-
MySQL binlog格式
binlog的格式也有三種:STATEMENT、ROW、MIXED 。mysql
一、STATMENT模式:基於SQL語句的複製(statement-based replication, SBR),每一條會修改數據的sql語句會記錄到binlog中。sql
優勢:不須要記錄每一條SQL語句與每行的數據變化,這樣子binlog的日誌也會比較少,減小了磁盤IO,提升性能。c#
缺點:在某些狀況下會致使master-slave中的數據不一致(如sleep()函數, last_insert_id(),以及user-defined functions(udf)等會出現問題)函數
二、基於行的複製(row-based replication, RBR):不記錄每一條SQL語句的上下文信息,僅需記錄哪條數據被修改了,修改爲了什麼樣子了。性能
優勢:不會出現某些特定狀況下的存儲過程、或function、或trigger的調用和觸發沒法被正確複製的問題。spa
缺點:會產生大量的日誌,尤爲是alter table的時候會讓日誌暴漲。日誌
三、混合模式複製(mixed-based replication, MBR):以上兩種模式的混合使用,通常的複製使用STATEMENT模式保存binlog,對於STATEMENT模式沒法複製的操做使用ROW模式保存binlog,MySQL會根據執行的SQL語句選擇日誌保存方式。orm
-
binlog日誌經常使用操做
查看binlog日誌是否開啓事件
mysql> show variables like 'log_%'; +----------------------------------------+----------------------------------------+ | Variable_name | Value | +----------------------------------------+----------------------------------------+ | log_bin | ON | | log_bin_basename | /usr/local/mysql/data/binlog | | log_bin_index | /usr/local/mysql/data/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_error | /usr/local/mysql/data/mysqld.local.err | | log_error_services | log_filter_internal; log_sink_internal | | log_error_suppression_list | | | log_error_verbosity | 2 | | log_output | TABLE | | log_queries_not_using_indexes | OFF | | log_slave_updates | ON | | log_slow_admin_statements | OFF | | log_slow_extra | OFF | | log_slow_slave_statements | OFF | | log_statements_unsafe_for_binlog | ON | | log_throttle_queries_not_using_indexes | 0 | | log_timestamps | UTC | +----------------------------------------+----------------------------------------+ 18 rows in set (0.00 sec)
查看binlog日誌格式it
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)
設置binlog格式
mysql> set global binlog_format='MIXED'; Query OK, 0 rows affected (0.00 sec)
查詢全部binlog日誌列表
mysql> show master logs; +---------------+-----------+-----------+ | Log_name | File_size | Encrypted | +---------------+-----------+-----------+ | binlog.000001 | 668 | No | | binlog.000002 | 337 | No | +---------------+-----------+-----------+ 2 rows in set (0.00 sec)
查看master狀態,即最後(最新)一個binlog日誌的編號名稱,及其最後一個操做事件pos結束點(Position)值
mysql> show master status; +---------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+-------------------+ | binlog.000002 | 337 | | | | +---------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
查詢第一個最先的binlog日誌
mysql> show binlog events; +---------------+-----+----------------+-----------+-------------+------------------------------------------------------------------------ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info +---------------+-----+----------------+-----------+-------------+------------------------------------------------------------------------ | binlog.000001 | 4 | Format_desc | 1 | 124 | Server ver: 8.0.17, Binlog ver: 4 | binlog.000001 | 124 | Previous_gtids | 1 | 155 | | binlog.000001 | 155 | Anonymous_Gtid | 1 | 234 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | binlog.000001 | 234 | Query | 1 | 477 | ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' AS '$A$005$\\\"r^.c#qdplP\'+ya2kiwXO5BzYZL/FFhC2d33MFMdRMSFbzECvYz62sZS/' /* xid=2 */ | | binlog.000001 | 477 | Anonymous_Gtid | 1 | 554 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | binlog.000001 | 554 | Query | 1 | 645 | FLUSH PRIVILEGES; | binlog.000001 | 645 | Stop | 1 | 668 | +---------------+-----+----------------+-----------+-------------+------------------------------------------------------------------------ 7 rows in set (0.01 sec)
查詢指定binlog信息
mysql> show binlog events in 'binlog.000002'; +---------------+-----+----------------+-----------+-------------+--------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +---------------+-----+----------------+-----------+-------------+--------------------------------------+ | binlog.000002 | 4 | Format_desc | 1 | 124 | Server ver: 8.0.17, Binlog ver: 4 | | binlog.000002 | 124 | Previous_gtids | 1 | 155 | | | binlog.000002 | 155 | Anonymous_Gtid | 1 | 232 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | binlog.000002 | 232 | Query | 1 | 337 | CREATE SCHEMA `log` /* xid=207 */ | +---------------+-----+----------------+-----------+-------------+--------------------------------------+ 4 rows in set (0.01 sec)