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寫到結果中并注釋。
- 從庫導入備份庫
mysql -uroot -p123 -e 'create database weibo;'
mysql -uroot -p123 weibo < weibo.sql
- 在備份檔案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