前言
今天实操了下搭建mysql的主从复制,特此记录下,便于以后回顾。
主从复制原理详解
详情参见 MySQL主从复制原理
步骤
详细步骤可以参见 MySQL主从复制(linux主+windows从)
踩坑总结
-
一般对于正式环境来讲,需要保证主从mysql的版本一致。但是不一致,也是可以的。这里我linux服务器上面使用的是mysql-5.7.36 ,windows上面使用的是 mysql-8.0.26;
-
mysql配置文件里面的[mysqld]表示其包含的设置是针对MySQL服务器起作用的,不能删除,由于我windows上把一般配置和主从复制的配置分开了,所以导致主从的在[mysqld] 前面,导致不生效;
-
一开始数据同步没有问题,但是过一段时间之后却发现不能同步数据了。
解决:
通过 show slave status; 查看信息发现 Slave_SQL_Running = “NO” (下图是成功时的状态)
经查导致原因可能是自己重启了本地的mysql服务,或者其他原因导致,一般是事务回滚造成的。
这里要额外讲一下 Slave 的两个关键进程,数据同步缺一不可: -
Slave_SQL_Running,负责与主机的io通信;
-
Slave_IO_Running,负责自己的slave mysql进程。
解决方法一:
stop slave; //停止slave SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; //跳过slave上的1个错误 start slave; //启动slave
解决方法二:
首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值
然后到slave服务器上执行手动同步:change master to master_host='master的ip', master_user='用户名', master_password='密码', master_port=3306, master_log_file='mysql-bin.000001', //master的binlog master_log_pos=8857; //postion //启动slave即可 start slave;