MySQL 8.0.17单机以及主备模式参数配置

近期由于业务需要将系统升级到CentOS7.9,同时因为漏洞问题将数据库升级至系统默认的8.0.17版本。

测试过程中出现以下问题(对比早期5.7版本):

1、数据insert效率奇慢无比,测试数据为20条/秒,与上一版本有上百倍差距,查阅一些资料后是由于MySQL8版本默认开启了log-bin以及log-bin-index,系统命令行方式关闭后,insert效率与5.7版本相当,修改方式如下:

  • set global log_bin=off;
  • set global log_bin_index=off;
  • set global innodb_flush_log_at_trx_commit=2;

或者在配置文件my.cnf中增加:

  • skip-log-bin #关闭bin日志
  • skip-log-bin-index #关闭索引日志
  • innodb_flush_log_at_trx_commit=2 #0 / 1 / 2,其中1最安全

关闭此两项后效率飞升!

如还希望继续提升效率可加入配置:

sync_binlog=0

此参数默认情况下为1,单事务刷盘,当值为0使用操作系统刷盘,大于1则由MySQL刷盘线程处理,实测为0时可以提高2-3倍效率。

2、主从同步配置如下(实为互为主从)

主:

  • server-id=1
  • log-bin=mysql-bin
  • binlog_format=MIXED # binlog日志格式,强烈建议,其他格式可能造成数据不一致
  • gtid_mode=ON # 开启gtid模式
  • log_slave_updates # 表示即可以当从也可以当主
  • enforce_gtid_consistency=ON # 强制gtid一致性
  • log-slave-updates=1
  • slave-skip-errors=all
  • expire_logs_days=180
  • binlog_transaction_dependency_tracking=writeset
  • slave_parallel_type=LOGICAL_CLOCK
  • slave_parallel_workers=4
  • sync_binlog=1

从:

  • server-id=2
  • log-bin=mysql-bin
  • binlog_format=MIXED # binlog日志格式,强烈建议,其他格式可能造成数据不一致
  • gtid_mode=ON # 开启gtid模式
  • log_slave_updates # 表示即可以当从也可以当主
  • enforce_gtid_consistency=ON # 强制gtid一致性
  • log-slave-updates=1
  • slave-skip-errors=all
  • expire_logs_days=180
  • binlog_transaction_dependency_tracking=writeset
  • slave_parallel_type=LOGICAL_CLOCK
  • slave_parallel_workers=4
  • sync_binlog=1
  • stop slave;
  • flush tables with read lock;
  • show master status;
  • reset slave;
  • change master to master_host='10.10.16.235',master_user='replicate',master_password='1qaz@WSX',master_log_file='mysql-bin000003',master_log_pos=154;
  • start slave;
  • unlock tables;
  • show slave status\G;

以上为需要的配置命令。

在上述配置下同步效率还可以,但是因为开启了binlog所以insert效率只有20条/秒左右,所以建议设置sync_binlog=0,这也是大多DBA的设置项。

测试过程中也测试过修改临时表内存以及pool、instance大小,但是效果也不是很好,可能我这的服务器内存比较小导致,如果您的设备内存足够可以考虑如下配置:

  • max_heap_table_size=2048M #调节临时表内存大小
  • tmp_table_size=2048M #调节临时表内存大小
  • innodb_buffer_pool_size=2048M #缓存池
  • innodb_buffer_pool_instances=8 #跟innodb_buffer_pool_size共同确定有几个缓存池,
  • #会平分innodb_buffer_pool_size,设置错误会仅使用默认值1
  • innodb_purge_threads=8 #刷盘线程数
  • max_connections=1000 #最大连接数,与内存有关 过大时会设置成上限
  • back_log=1000 #默认与max_connections一致
  • mysqlx_max_connections=500 #大致是max_connections的一半

经过上述配置已经基本满足现场需求,暂时不再做深入处理,希望对您有用。

猜你喜欢

转载自blog.csdn.net/afk_02/article/details/118156812