手动搭建MySQL主从同步
本次搭建主从同步的环境:阿里云CentOS 7.6 ,MySQL5.7
。
服务器安装数据库,请参考我博客里的Centos安装mysql那篇文章。
CentOS 7 yum 安装 MySQL 5.7
场景介绍
本次将会搭建MySQL的主从同步,其中一台Master
,一台Slave
。
Master: IP:112.124.1.1 Port:3306
Slave1: IP:112.54.1.2 Port:3306
开始搭建
修改配置文件
当你在服务器安装完MySQL后,在系统的etc文件下有个my.cnf
配置文件。
打开文件,加入如下内容(别忘了修改之前做好备份):
#Master
#该配置为Master的配置
server-id=201 #Server id 每台MySQL的必须不同
log-bin=/var/lib/mysql/mysql-bin.log #代表开启binlog日志
expire_logs_days=10 #日志过期时间
max_binlog_size=200M #日志最大容量
binlog_ignore_db=mysql #忽略mysql库,表示不同步此库
#该配置为Slave的配置,第二台Slave也是这么配置,不过要修改一下server-id
server-id=202
expire_logs_days=10 #日志的缓存时间
max_binlog_size=200M #日志的最大大小
replicate_ignore_db=mysql #忽略同步的数据库
在Master库中新增Slave用户
打开Master节点的客户端 ,**mysql -u root -p** 密码
创建用户 create user 'Slave'@'%' identified by '123456';
给新创建的用户赋权:grant replication slave on *.* to 'Slave'@'%';
查看Master节点状态
以上操作都没有问题后,我们在客户端中输入show master status
查看master的binlog日志。
File是指主节点的备份文件名称,Position是定位内容位置,从节点备份是会根据这个地方来备份。
配置Slave节点
打开Slave节点客户端,在我们的Slave节点中输入如下命令:
change master to master_user='Slave',master_password='123456',master_host='你自己服务器的IP地址',master_log_file='mysql-bin.000001',master_log_pos=1422627;
#注意,这里的master_log_file,就是binlog的文件名,输入上图中的mysql-bin.000001,每个人的都可能不一样。
#注意,这里的master_log_pos是binlog偏移量,输入上图中的1422627,每个人的都可能不一样。
配置完成后,输入 start slave;
启动从节点后,输入 show slave status;
来查看从节点状态
当返回结果中,Slave_Master_Log_File 和 Slave_IO_Running都是YES; 说明主从同步开启成功。
搭建完成
通过上述步骤,就完成了MySQL主从同步的搭建。下面我们可以进行测试。
这时候你在Master库中新建表或者操作表中的数据,Slave库都会备份下来。
注意事项
如果出现IO线程一直在Connecting状态,可以看看是不是两台机器无法相互连接。
如果可以相互连接,那么有可能是Slave账号密码写错了,重新关闭Slave然后输入上面的配置命令再打开Slave即可。
如果出现SQL线程为NO状态,那么有可能是从数据库和主数据库的数据不一致造成的,或者事务回滚,如果是后者,先关闭Slave,然后先查看 Master
的 binlog
和 position
,然后输入配置命令,再输入set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
,再重新start slave;
即可.
如果问题是前者,那么就排查一下是不是存在哪张表没有被同步,是否存在主库存在而从库不存在的表,自己同步一下再重新配置一遍即可。