天天看点

mysql主从复制主从复制的模式模式的配置使用修改主库的配置查看主从复制的模式命令行切换主从复制binlog模式mysql -uroot -p123 -e 'create database weibo;'mysql -uroot -p123 weibo < weibo.sqlhead -25 weibo.sql

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