主从同步(主从复制)
- master将改变的数,记录在本地的二进制中(binary log);该过程称之为:二进制日志件事
- slave将master的binary log拷贝到自己的relay_log(中继日志文件)中
- 中继日志事件,将数据读取到自己的数据库之中
Mysql主从复制是异步的,串行化的,有延迟
master:slave=1 :n
操作
配置:
windows(mysql: my.ini)
linux(mysql: my.cnf)
主机:
my.ini
[mysqld]
#id
server-id=1
#二进制日志文(注意是/ 不是\)
log-bin="D:/MySQL/MySQL Server 5.5/data/mysql-bin"
#错误记录文件
log-error="D:/MySQL/MySQL Server 5.5/data/mysql-error"
#主从同步时 忽略的数据库
binlog-ignore-db=mysql
#(可选)指定主从同步时,同步哪些数据库
binlog-do-db=test
windows中的数据库 授权哪台计算机中的数据库 是自己的从数据库:
GRANT REPLICATION slave,reload,super ON . TO 'root'@'192.168.2.%' IDENTIFIED BY 'root'; flush privileges ;
查看主数据库的状态(每次在左主从同步前,需要观察 主机状态的最新值)
show master status; (mysql-bin.000001、 107)
从机
my.cnf
[mysqld]
server-id=2
log-bin=mysql-bin
replicate-do-db=test
授权哪台计算机中的数控 是自己的主计算机
CHANGE MASTER TO MASTER_HOST = '192.168.2.2', MASTER_USER = 'root', MASTER_PASSWORD = 'root', MASTER_PORT = 3306, master_log_file='mysql-bin.000001', master_log_pos=107;
如果报错:This operation cannot be performed with a running slave; run STOP SLAVE first
解决:STOP SLAVE ;再次执行上条授权语句
开启主从同步
从机: start slave;
检验: show slave status\G;
主要观察: Slave_IO_Running和Savle_SQLRunning.确保二者都是yes
如果不都是yes,则看下方的 Last_IO_Error
本次 通过 Last_IO_Error发现错误的原因是 主从使用了相同的server-id
检查:在主从中分别查看serverid: show variables like 'server_id' ; 可以发现,在Linux中的my.cnf中设置了server-id=2,但实际执行时 确实server-id=1,
原因:可能是 linux版Mysql的一个bug,也可能是 windows和Linux版本不一致造成的兼容性问题。
解决改bug: set global server_id =2 ;
评论区