mysql主从复制

mysql主从复制的三种模式(binlog的三种模式)

主从复制的模式

STATEMENT模式(SBR)
每一条修改数据库的语句都会被记录到binlog中
优点是不会记录每一条sql语句和每一行的数据变化,减少了bin-log的日志量 节约IO 提高性能
缺点是某些情况下会导致主从数据不一致

ROW模式(PBR)
不记录sql语句的上下文信息,仅仅记录那条数据被修改了,不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是altertable的时候会让日志暴涨

MIXED模式(MBR)
以上两种模式的混合,一般的复制使用SBR模式保存binlog,对于SBR无法复制的操作使用PBR保存binlog
mysql会根据执行的语句选择日志保存方式,建议使用

模式的配置使用

修改主库的配置

binlog_format=MIXED | ROW | STATEMENT
重启

查看主从复制的模式

mysql> show variables like "%binlog_format%";

命令行切换主从复制binlog模式

mysql> set global binlog_format='MIXED';

2,主从复制
mysqldump -uroot -p123 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql

参数说明:
--routines:导出存储过程和函数
--single_transaction:导出开始时设置事务隔离状态,并使用一致性快照开始事务,然后unlock tables;而lock-tables是锁住一张表不能写操作,直到dump完毕。
--master-data:默认等于1,将dump起始(change master to)binlog点和pos值写到结果中,等于2是将change master to写到结果中并注释。

  1. 从库导入备份库

mysql -uroot -p123 -e 'create database weibo;'

mysql -uroot -p123 weibo < weibo.sql

  1. 在备份文件weibo.sql查看binlog和pos值

head -25 weibo.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; #大概22行

从库设置从这个日志点同步,并启动
mysql> change master to master_host='192.168.18.212',
-> master_user='sync',
-> master_password='sync',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=107;
mysql> start slave;
mysql> show slave status\G;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 90
Current database: NONE
1. row **

    Slave_IO_State: Waiting for master to send event 
     Master_Host: 192.168.18.212 
     Master_User: sync 
     Master_Port: 3306 
    Connect_Retry: 60 
   Master_Log_File: mysql-bin.000001 
 Read_Master_Log_Pos: 358 
    Relay_Log_File: mysqld-relay-bin.000003 
    Relay_Log_Pos: 504 
Relay_Master_Log_File: mysql-bin.000001 
   Slave_IO_Running: Yes 
  Slave_SQL_Running: Yes 
上一篇:Shiro——主配置文件


下一篇:centos7不中断执行命令