要实现mysql主从复制就必须有个机群(至少两台虚拟机),如果电脑配置够我们可以在vm重新安装一个新的centos系统,但是安装另一个还是稍微比较费时的,我们可以直接克隆已经安装完成的系统,既方便又快捷,下面是具体步骤
注意选择克隆类型时,选择创建完整克隆(相当于另一台完整虚拟机)
之后、稍作等待 ,等待克隆完成即可,之后克隆虚拟局即可正常运行。
mysql主从复制原理
mysql主从配置的流程大体如图:
1)master会将变动记录到二进制日志里面;
2)master有一个I/O线程将二进制日志发送到slave;
- slave有一个I/O线程把master发送的二进制写入到relay日志里面;
4)slave有一个SQL线程,按照relay日志处理slave的数据;
主从复制设置步骤
第一步、配置文件
一般Linux中的MySQL配置文件都在/etc/my.cnf
vim /etc/my.cnf进入配置文件
在/etc/my.cnf文件中【mysqld】下加上:
server-id = 1 (在整个Mysql集群中保证唯一)
log-bin = binlog
log-bin-index = binlog.index
然后重启MySQL服务
在进入mysql 输入show variables like ‘log_bin’;
查看是否开启二进制日志(on为开启,off为关闭)
第二步
我们需要给slave从配置一个用户/密码的权限
mysql>GRANT REPLICATION SLAVE ON *.* TO '用户名'@'slave数据库的IP地址' IDENTIFIED BY '密码';
这行命令的意思是:允许在某个IP地址的某个用户以某个密码对当前数据库的所有库和所有表进行复制操作
注意:以上配置了权限,我们需要刷新以下权限使用命令:
mysql>flush privileges;
或者
直接重启mysql服务:
service mysql restart;
第三步、
查看主服务MySQL服务器二进制文件名与位置
mysql>SHOW MASTER STATUS;
File: 日志文件名称
Position: 日志所在位置
第四步
1)编辑mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二进制日志配置,开启二进制(relay-bin只是日志文件名称,可以自己指定)
log-bin=relay-bin
server-id=2
注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符
第五步:
告知二进制文件名与位置
在从服务器中执行:
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服务器的IP',
>MASTER_USER='master授权的账号',
>MASTER_PASSWORD='master授权的密码',
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;
将slave指向master
第六步:开始主从复制
在slave上执行
mysql>start slave;
我们可以查看slave的运行状态:
show slave status\G;
可以看到类似如下内容:
复制代码
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
…
复制代码
注意:
Slave_IO_Running: YES 表示slave的日志读取线程开启
Slave_SQL_Running: YES 表示SQL执行线程开启
如果有主从复制有错误信息其实也可以看到
第七步、测试
以上我们就将主从复制功能设置完毕了,我们可以通过在master里面创建数据库,或者表,插入数据等来测试一下
注意点
1)开启了主从复制,slave库如果写入数据的话,可能导致数据回滚从而主从复制线程中断,可以通过以下方式解决:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
2)如果要停止slave的复制可以使用命令:
mysql>stop slave;
3)由于主从复制是基于I/O的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题
参考文档:
1.https://www.cnblogs.com/lay2017/p/9043985.html?tdsourcetag=s_pcqq_aiomsg
2.https://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label0