-
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)