主从复制原理
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1、从库IO线程,读取master.info内容,获取主库的IP/Port/User/Pass/binlog文件名和位置号(3250) 2、从库通过IO线程与主库连接 3、通过master.info记录的binlog文件名与位置号,“问”主库有没有比这个(3250)更加新的 4、主库看一下(show master status-->3438)告诉从库有更加新的binlog日志 5、从库的IO线程接收主库Dump线程传送来的binlog内容,存储到TCP/IP缓存,立即返回ACK确认给主库 6、从库IO线程将TCP/IP缓存内容写入到relay-log,更新master.info中binlog日志的位置号 7、SQL线程读取relay.info信息,往后执行最新的relay-log日志,执行完成后,再次更新relay-log信息 |
主从复制先决条件:
1 2 3 4 5 6 7 |
1、主库要开启binlog日志功能 2、主库开启专用复制用户(replication slave) 3、主从的server_id号要不同 4、从库要保证在开启主从之前,保证数据和主库在一个时间点上(备份恢复) |
前文已经有二进制多实例安装的文档,本文档不再从新安装,如果没有安装请点击: 二进制多实例安装
配置主库的binlog
1 2 3 |
[root@db02 /service]# vim /service/3307/my.cnf ... ... log_bin=/service/3307/data/mysql-bin |
主库授权主从的用户
1 2 3 4 5 6 7 8 |
mysql> grant replication slave on *.* to rep@'127.0.0.1' identified by '123'; Query OK, 0 rows affected (0.00 sec) #重启 mysqladmin -uroot -p123 shutdown -S /service/3307/data/mysql.sock #后台启动 mysqld_safe --defaults-file=/service/3307/my.cnf & |
主库查看binlog信息
1 2 3 4 5 6 7 |
mysql> show master status; +------------------+----------+ | File | Position | +------------------+----------+ | mysql-bin.000001 | 120 | +------------------+----------+ 1 row in set (0.01 sec) |
从库配置同步主库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#1.从库需要知道主库的信息 1)主库的地址 2)主库的端口 3)主库授权的用户 4)主库授权的用户的密码 5)主库的binlog日志名字 6)binlog的位置点 #2.从库配置主从同步 mysql> change master to -> master_host='127.0.0.1', -> master_port=3307, -> master_user='rep', -> master_password='123', -> master_log_file='mysql-bin.000001', -> master_log_pos=120; Query OK, 0 rows affected, 2 warnings (0.03 sec) |
启动主从同步
1 2 |
mysql> start slave; Query OK, 0 rows affected (0.00 sec) |
查看主从状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: rep Master_Port: 3307 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 416 Relay_Log_File: db02-relay-bin.000002 Relay_Log_Pos: 579 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes |
主从同步问题
1)IO线程为NO
1 2 3 4 5 6 7 8 |
1.检查网络 [root@db02 ~]# ping 127.0.0.1 2.检查端口 [root@db02 ~]# telnet 127.0.0.1 3307 3.查看防火墙 4.主从同步的用户和密码错误 检查change master to语句信息是否正确 5.数据库反向解析 |
2)SQL线程为NO
1 2 3 |
1.主库有的数据,从库没有 2.从库有的数据,主库没有 3.主库与从库数据不一致 |