mysql binlog 参数_MySQL 8.0 新增参数 binlog_row_metadata

binlog_row_metadata 参数是 MySQL 8.0.1 版本引入的新参数,当 binlog 格式为ROW时,设置该参数为FULL,会将表完整的元数据信息写入到binlog文件中。

binlog_row_metadata:

动态修改:是

全局变量:是

可选值:FULL,MINIMAL

默认值:MINIMAL

基于ROW格式的binlog,在记录DML语句产生的binlog event时,总会先记录一个table_map类型的event,table_map记录了表结构相关的元数据,比如数据库名称,表名称,表的字段类型,表的字段大小,精度等元数据。这些元数据并不完整,比如缺少数值类型的符号信息(signed, unsigned),缺少字段名称,缺少set和enum类型的字符串定义,缺少主键信息,缺少地理空间数据类型的具体分类等等。当binlog_row_metadata参数设置为FULL时,binlog 日志就会记录完整的表元数据信息。

举一个例子,binlog2sql 工具应该很多人都熟悉,它是一个非常好用的在线binlog解析工具,注意在线两个字,这个工具需要连接到MySQL才能解析binlog,因为它需要从MySQL里面获取binlog缺失的表元数据,而8.0设置binlog_row_metadata为FULL,就不再需要连接MySQL,解析binlog就能获取完整的表元数据信息。

binlog_row_metadata设置为FULL带来的好处:

当从库的表结构与主库不同时,可以利用完整的表元数据做转换。

第三方工具可以使用完整的表元数据信息解析binlog行数据,然后将其存储在其他数据库。

binlog_row_metadata设置为FULL带来的坏处:

存储完整的表元数据信息导致binlog文件变大,占用磁盘空间。

binlog文件变大,占用网络带宽。

测试sysbench表,插入同样的3条记录,binlog大小对比:

FULL:1130 字节

MINIMAL:1030字节

显然配置为FULL,会导致binlog文件变大,尤其是oltp,小事务多的场景下,binlog文件变大更加明显。

在Win10中,my.ini是MySQL的配置文件。下面是一份详细的my.ini配置示例: ``` [client] port=3306 default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] port=3306 basedir="C:/Program Files/MySQL/MySQL Server 8.0/" datadir="C:/ProgramData/MySQL/MySQL Server 8.0/Data/" character-set-server=utf8mb4 default-storage-engine=INNODB sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" log-output=FILE general-log=0 general_log_file="WIN10.log" slow-query-log=1 slow_query_log_file="WIN10-slow.log" long_query_time=10 log-error="WIN10.err" max_connections=100 query_cache_size=0 table_open_cache=2000 tmp_table_size=246M thread_cache_size=10 myisam_max_sort_file_size=100G myisam_sort_buffer_size=410M key_buffer_size=8M read_buffer_size=64K read_rnd_buffer_size=256K sort_buffer_size=256K innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=1M innodb_buffer_pool_size=8M innodb_log_file_size=48M innodb_thread_concurrency=8 innodb_autoextend_increment=64M innodb_buffer_pool_instances=8 innodb_concurrency_tickets=5000 innodb_old_blocks_time=1000 innodb_open_files=300 innodb_stats_on_metadata=0 innodb_file_per_table=1 innodb_checksum_algorithm=0 back_log=80 flush_time=0 join_buffer_size=256K max_allowed_packet=4M max_connect_errors=100 open_files_limit=4161 query_cache_type=0 sort_buffer_size=256K table_definition_cache=1400 binlog_row_event_max_size=8K sync_master_info=10000 sync_relay_log=10000 sync_relay_log_info=10000 [mysqldump] quick max_allowed_packet=16M [mysql] no-auto-rehash [myisamchk] key_buffer_size=256M sort_buffer_size=256M read_buffer=2M write_buffer=2M [mysqlhotcopy] interactive-timeout ``` 以上配置文件的含义是: - [client]和[mysql]部分用于客户端设置,包括默认字符集和端口号等。 - [mysqld]部分是MySQL服务器的核心设置。其中,port是监听的端口号,basedir是MySQL的安装目录,datadir是数据存储目录,character-set-server是默认字符集。 - default-storage-engine指定默认的存储引擎为InnoDB。 - sql-mode指定SQL执行模式,其中STRICT_TRANS_TABLES表示在插入数据时,如果数据类型不一致,会产生错误。 - log-output指定日志输出方式,general-log和slow-query-log分别指定普通日志和慢查询日志的输出路径。 - long_query_time指定慢查询的时间阈值,单位为秒。 - max_connections指定最大连接数。 - query_cache_size指定查询缓存大小,table_open_cache指定表缓存大小,tmp_table_size指定临时表大小等。 - thread_cache_size指定线程缓存大小,myisam_max_sort_file_size和myisam_sort_buffer_size指定MyISAM排序文件大小和缓存大小,key_buffer_size指定键缓存大小等。 - innodb_buffer_pool_size指定InnoDB缓存大小,innodb_log_file_size指定事务日志文件大小,innodb_thread_concurrency指定并发线程数,innodb_autoextend_increment指定自动增加的大小等。 - back_log指定等待连接的队列大小,flush_time指定刷新日志的时间间隔,join_buffer_size指定连接缓存大小,max_allowed_packet指定最大数据包大小等。 - open_files_limit指定打开文件的最大数量,query_cache_type指定查询缓存类型,table_definition_cache指定表定义缓存大小等。 - binlog_row_event_max_size指定二进制日志行事件的最大大小,sync_master_info、sync_relay_log和sync_relay_log_info指定同步信息的刷新时间间隔。 - [mysqldump]部分指定mysqldump的相关设置,包括max_allowed_packet等。 - [myisamchk]指定MyISAM检查的相关设置,包括key_buffer_size、sort_buffer_size等。 - [mysqlhotcopy]部分指定mysqlhotcopy的相关设置,包括interactive-timeout等。 需要注意的是,这只是一份示例配置文件,具体的配置需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值