主从同步(主从复制)

  • 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 ;