MySQL複製參數及狀態判斷總結
1、MySQL主從複製參數
1.1、master 常用參數
server_id 服務器在集羣中唯一標識符
log_bin[=binlog_name] 啓動二進制日誌
log_bin_index 二進制日誌索引名稱
binlog_format 二進制日誌的類型
binlog_row_image 二進制鏡像保存量
binlog_do_db,binlog_ignore_db 記錄在二進制日誌中和不記錄在二進制日誌中
binlog_cache_size 緩存還沒刷新到磁盤的binlog日誌
max_binlog_cache_size 緩存還沒刷新到磁盤的最大binlog日誌
max_binlog_size 二進制日誌最大值
expire_logs_days 二進制日誌被保留的有效期
sync_binlog 二進制日誌刷新到磁盤頻率
binlog_rows_query_log_events 二進制日誌基於行,用來指定額外的信息
log_error 記錄錯誤日誌
slow_query_log_file 記錄慢查詢日誌位置
log_queries_not_using_indexes 查詢沒使用索引是否記錄到慢查詢日誌
slow_query_log 啓用慢查詢日誌
log_slow_admin_statements 慢查詢日誌是否記錄管理語句
long_query_time 多長時間記錄到慢查詢日誌中
enforce_gtid_consistency 開啓gtid的一些安全限制
gtid_mode=on 開啓gtid
1.2、slave常用參數
relay_log[=relay_log_name] 從節點中繼日誌名
relay_log_index 中繼日誌索引名稱
replicate_do_db[table] slave只重放指定的庫/表
replicate_ignore_db[table] slave 忽略重放指定的庫/表
replicate_wild_do_table slave重放滿足匹配的表
replicate_wild_ignore_table slave忽略重放滿足匹配條件的表
slave_skip_errors 自動忽略指定錯誤,逗號分割
slave_exec_mode 取值IDEMPOTENT,STRICE是否自動忽略重複主鍵和主鍵找不到錯誤
log_slave_updates 啓動從節點的二進制日誌
relay_log_purge 如何清除中繼日誌文件,默認1 自動清理
read_only 從庫只讀,SUPER權限用戶除外
super_read_only SUPER用戶設置只讀
skip_slave_start 從節點跳過自動開啓複製
sync_relay_log和sysnc_relay_log_info 中繼日誌文件同步頻率,默認10000
repost_host 區別不同的從節點,SHOW SLAVE HOSTS查看
slave_max_allowed_packet 從節點的SQL和IO線程允許最大的數據包容量
relay_log_recovery 中繼日誌自動恢復,從庫意外停止後使用
master_info_repository slave master節點信息保留在位置,默認file
relay_log_info_repository 從節點信息slave保留在位置,默認file
gtid_mode=on 開啓gtid
enforce_gtid_consistency=on 開啓gtid的一些安全限制
1.3、半同步複製參數
rpl_semi_sync_master_enabled 主節點開啓半同步複製
rpl_semi_sync_master_timeout 半同步複製超時時間,默認10s
rpl_semi_sync_master_wait_no_slave 主節點是否需要在數據複製發生後等待一段時間(在master_timeout超時時間內,當slave的數量少於wait_for_slave_count時,是否保持半同步複製),默認on
rpl_semi_sync_master_wait_for_slave_count master必須接收到slave ACK消息的數量,默認1
rpl_semi_sync_master_trace_level master調式日誌輸出級別,可選1,16,32,64,默認32
rpl_semi_sync_slave_trace_level slave調式日誌輸出級別,可選1,16,32,64,默認32
rpl_semi_sync_slave_enabled 從節點開啓半同步複製
rpl_semi_sync_master_wait_point 半同步複製master Storage commit在獲取從庫ACK之前(AFTER_COMMIT)還是之後(AFTER_SYNC),默認AFTER_SYNC
rpl_stop_slave_timeout 控制stop slave 的執行時間,在重放一個大的事務的時候,突然執行stop slave,命令 stop slave會執行很久,這個時候可能產生死鎖或阻塞,嚴重影響性能,mysql 5.6可以通過rpl_stop_slave_timeout參數控制stop slave的執行時間。
slave_parallel_type slave並行複製類型
slave_parallel_workers 並行複製進程數
2、主從同步狀態判斷
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: XX.XX.XX.XX
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.001250
Read_Master_Log_Pos: 657664
Relay_Log_File: relaylog.002972
Relay_Log_Pos: 657871
Relay_Master_Log_File: binlog.001250
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 657664
Relay_Log_Space: 40938241024
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 89
Master_UUID: 0090f5f1-3ec3-11e9-9cf2-e4434b18391a
Master_Info_File: /data/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 0090f5f1-3ec3-11e9-9cf2-e4434b18391a:1-301580
Executed_Gtid_Set: 0090f5f1-3ec3-11e9-9cf2-e4434b18391a:1-301580,
722985f1-3ec4-11e9-bc62-e4434b18399a:1-2
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
Seconds_Behind_Master值計算,是通過當前系統時間戳減去sql_thread線程正在執行的binlog evnet上的時間戳,得到的差值就是Seconds_Behing_Master的值。
如果用這個判斷延遲,當io_thread停止時,沒接收到binglog,這時Seconds_Behing_Master就爲0,這種情況判斷主從延遲就不準確。
正常的判斷主從延遲:
首先Master_Log_File和Relay_Master_Log_File所指向的文件必須一致。
其次Read_Master_Log_Pos和Exec_Master_Log_Pos的位置也要一致才行。
3、查看半同步狀態
3.1、查看master semi sync狀態:
mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 669 |
| Rpl_semi_sync_master_net_wait_time | 1338 |
| Rpl_semi_sync_master_net_waits | 2 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 779 |
| Rpl_semi_sync_master_tx_wait_time | 1559 |
| Rpl_semi_sync_master_tx_waits | 2 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 2 |
+--------------------------------------------+-------+
註解:
Rpl_semi_sync_master_clients
記錄支持半同步的slave的個數。
Rpl_semi_sync_master_net_avg_wait_time
master 等待slave 回覆的平均等待時間。 單位毫秒.
Rpl_semi_sync_master_net_wait_time
master 總的等待時間。
Rpl_semi_sync_master_net_waits
master 等待slave 回覆的的總的等待次數。
Rpl_semi_sync_master_no_times
master 關閉半同步複製的次數。
Rpl_semi_sync_master_no_tx
master 沒有收到slave的回覆而提交的次數,(應該可以理解爲master 等待超時的次數)
Rpl_semi_sync_master_status
標記master現在是否是半同步複製狀態。
Rpl_semi_sync_master_tx_avg_wait_time
master 花在每個事務上的平均等待時間。
Rpl_semi_sync_master_tx_wait_time
master 總的等待次數。
Rpl_semi_sync_master_wait_sessions
當前有幾個線程在等備庫響應。
Rpl_semi_sync_master_yes_tx
master 成功接收到slave的回覆的次數。
Rpl_semi_sync_slave_status
標記slave 是否在半同步狀態。
Rpl_semi_sync_master_timefunc_failures
時間函數未正常工作的次數
Rpl_semi_sync_master_wait_pos_backtraverse
改變當前等待最小二進制日誌的次數
3.2、查看slave的semi sync狀態
mysql > SHOW GLOBAL STATUS LIKE 'rpl_semi%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)