mysql支持单向,双向,链式级联,实时和异步的复制。一台充当主服务器,其它一台或多台充当从服务器。大多数应用mysql主从同步都是异步方式的,不是实时的。
主从复制的应用场景:
1,主从服务器互为备份
2,主从服务器读写分离分担压力
解决主从同步master宕机由于异步复制导致主从不一致的方法
1,人工或脚本将master的binlog推送给一台从库重新执行一次
2,应用程序对主从进行双写,不依赖同步
3,应用程序记录最近操作的日志,通过日志去恢复
4,利用工具将异步改为实时,例如半同步复制
读写分离生产环境一般使用应用来选择数据源完成
不使用mysql-proxy,amoeba等
mysql主从同步的步骤:
1,master打开binlog: my.cnf下的log-bin配置,可指定名字,通常指定名字使用机器名
2,指定master,slave的server-id. 最好取有意义的数字且两者不相同
3,master上添加一个同步帐户并grant授权。刷新权限flush privileges
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by '123456';
4,在master上先加锁不允许写(flush table with read lock),再show master status获取当前binlog文件位置。
5,新开窗口在master上dump,可加--master-data=2获取第四步binlog的点,可加-X加锁,省略第4步
6,dump完之后解锁master: unlock tables;使用-X加锁时不需要手动解锁。
7,将备份数据导入到slave中
8,从库执行change master… 再start slave(启动从库的io和sql线程),change master的信息会放在master-info文件中
change master to master_host='192.168.xxx.xxx',master_user='mysync',master_password='123456', master_log_file='mysql-bin.000004',master_log_pos=308;
如果第5步--master-data=1,change语句会被写在导出的备份文件中,恢复到从库时会自动执行
9,show slave status查看从库的两个线程的工作状态检查是否OK
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES