需要看原理的小伙伴可以看这个很详细 参考博客、
mysql主从原理
- mysql支持的复制类型:
(1):基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时, 会自动选着基于行的复制。
(2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
- 工作过程
整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。
列出mysql主从的版本
- 主master(安装在centos7.4)
- 从slave(安装在windows10)
配置master
- 在配置文件加入如下(注意server-id=1,里面的值需要和从slave不一致)
- 重启master: service mysqld restart
- 进入mysql mysql -uXXXX -pXXX,在mysql中输入show master status;
- 创建用户及其为从Slave
这里我出现了一个IP问题(VM网络NAT)导致后续配置不出来,第一张图是我本地电脑的ip,第二张图是主mysql中通过账号连接所获取的ip
show processlist;
下面图中IP应为192.168.145.1,记住必须flush privileges; 否则不能及时响应
mysql> create user 'slave1'@'localhost' identified by 'Ljt19960202!';
Query OK, 0 rows affected (0.00 sec)
mysql> grant replication slave on *.* to 'slave1'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
配置slave
- 在windows中打开如下路径文件(这文件是隐藏的,你可以显示出来)
- 做出如下修改 ,修改完后记得重启mysql(windows中重启就是net stop mysql80,net start mysql80)黄色字看你是如何命名的
- 启动slave,slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。注意下面红色的就是配配置master中的第三步查看内容
mysql> change master to master_host=‘192.168.145.128’,master_port=3306,master_user=‘slave1’,master_password=‘Ljt19960202!’,
-> master_log_file=‘master-bin.000013’,master_log_pos=1339;
- 开启start slave;查看状态show slave status\G 红框中两个都为Yes表示成功了
遇到经常故障的问题
问题:
Could not execute Delete_rows event on table o2o.tb_product_img; Can’t find record in ‘tb_product_img’, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event’s master log master-bin.000009, end_log_pos 511
解决方法:最简单直接从机可以直接跳过。
stop slave;set global sql_slave_skip_counter=1;start slave;