Mysql 8.x参数优化
## my.cnf for 8.0版本
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysql]
no_auto_rehash
loose-skip-binary-as-hex
[mysqld]
user = mysql
port = 3306
#主从复制或MGR集群中,server_id记得要不同
#另外,实例启动时会生成 auto.cnf,里面的 server_uuid 值也要不同
#server_uuid的值还可以自己手动指定,只要符合uuid的格式标准就可以
server_id = 3306
basedir = /var/lib/mysql
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
pid_file = dms-mysql.pid
character_set_server = UTF8MB4
skip_name_resolve = 1
#若你的MySQL数据库主要运行在境外,请务必根据实际情况调整本参数
default_time_zone = "+8:00"
#启用admin_port,连接数爆满等紧急情况下给管理员留个后门
admin_address = '127.0.0.1'
admin_port = 33062
#performance setttings
lock_wait_timeout = 3600
open_files_limit = 65535
back_log = 1024
max_connections = 512
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
thread_stack = 512K
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
thread_cache_size = 768
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
#log settings
log_timestamps = SYSTEM
log_error = /var/lib/mysql/error.log
log_error_verbosity = 3
slow_query_log = 1
log_slow_extra = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 0.1
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_bin = /var/lib/mysql/mybinlog
binlog_format = ROW
sync_binlog = 1 #MGR环境中由其他节点提供容错性,可不设置双1以提高本地节点性能
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
binlog_rows_query_log_events = 1
binlog_expire_logs_seconds = 604800
#MySQL 8.0.22前,想启用MGR的话,需要设置binlog_checksum=NONE才行
binlog_checksum = CRC32
gtid_mode = ON
enforce_gtid_consistency = TRUE
#myisam settings
key_buffer_size = 32M
myisam_sort_buffer_size = 128M
#replication settings
relay_log_recovery = 1
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 64 #可以设置为逻辑CPU数量的2倍
binlog_transaction_dependency_tracking = WRITESET
slave_preserve_commit_order = 1
slave_checkpoint_period = 2
#mgr settings
loose-plugin_load_add = 'mysql_clone.so'
loose-plugin_load_add = 'group_replication.so'
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
#MGR本地节点IP:PORT,请自行替换
loose-group_replication_local_address = "172.16.16.10:33061"
#MGR集群所有节点IP:PORT,请自行替换
loose-group_replication_group_seeds = "172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061"
loose-group_replication_start_on_boot = OFF
loose-group_replication_bootstrap_group = OFF
loose-group_replication_exit_state_action = READ_ONLY
loose-group_replication_flow_control_mode = "DISABLED"
loose-group_replication_single_primary_mode = ON
loose-group_replication_communication_max_message_size = 10M
loose-group_replication_unreachable_majority_timeout = 30
loose-group_replication_member_expel_timeout = 5
loose-group_replication_autorejoin_tries = 288
#innodb settings
transaction_isolation = REPEATABLE-READ
innodb_buffer_pool_size = 11264M
innodb_buffer_pool_instances = 4
innodb_data_file_path = ibdata1:12M:autoextend
innodb_flush_log_at_trx_commit = 1 #MGR环境中由其他节点提供容错性,可不设置双1以提高本地节点性能
innodb_log_buffer_size = 32M
innodb_log_file_size = 1G #如果线上环境的TPS较高,建议加大至1G以上,如果压力不大可以调小
innodb_log_files_in_group = 3
innodb_max_undo_log_size = 4G
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_open_files = 65535
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_online_alter_log_max_size = 4G
innodb_print_ddl_logs = 1
innodb_status_file = 1
#注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log_error文件增长较快
innodb_status_output = 0
innodb_status_output_locks = 1
innodb_sort_buffer_size = 67108864
innodb_adaptive_hash_index = OFF
#提高索引统计信息精确度
innodb_stats_persistent_sample_pages = 500
#innodb monitor settings
innodb_monitor_enable = "module_innodb"
innodb_monitor_enable = "module_server"
innodb_monitor_enable = "module_dml"
innodb_monitor_enable = "module_ddl"
innodb_monitor_enable = "module_trx"
innodb_monitor_enable = "module_os"
innodb_monitor_enable = "module_purge"
innodb_monitor_enable = "module_log"
innodb_monitor_enable = "module_lock"
innodb_monitor_enable = "module_buffer"
innodb_monitor_enable = "module_index"
innodb_monitor_enable = "module_ibuf_system"
innodb_monitor_enable = "module_buffer_page"
#innodb_monitor_enable = "module_adaptive_hash"
#pfs settings
performance_schema = 1
#performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
[mysqldump]
quick
MySQL性能参数调优
参数调优是MySQL性能优化的重要方面之一,通常只需要重点关注几个主要的参数,就能显著地提高MySQL性能。根据运行的MySQL版本的不同,本文中使用的一些参数默认值可能有所不同,但是基本上还是一致的。
一、硬件相关的参数调优
根据MySQL实例运行的硬件环境,一些硬件相关的参数需要根据实际情况进行设置,主要如下:
1.1 innodb_buffer_pool_size
- 该参数通常设置为总内存大小的50%~70%,充分利用内存缓存,减少换页带来的磁盘性能损耗。
- 该参数设置的大小尽量不要大于数据库的总大小,否则造成内存浪费。
- 在MySQL运行过程中,监控buffer pool的使用率,根据实际情况进行调整。
1.2 innodb_log_file_size
- 该参数通常设置为128M ~ 2G之间。
- 该参数大小应当能够支持最少一个小时的日志量,保证在刷脏页和做检查点操作期间,有足够的空间顺序写日志。
1.3 innodb_flush_log_at_trx_commit
- 该参数设置为1,事务实时落盘,保证数据的持久性,但是影响性能。
- 该参数设置为0或2,性能较高,但是事务无法实时落盘,存在丢失数据的风险。
1.4 sync_binlog
- 该参数设置为1,binlog日志实时落盘,保证数据的持久性,但是影响性能。
- 该参数设置为0,性能较高,但是binlog日志无法实时落盘,存在丢失数据的风险。
1.5 innodb_flush_method
将该参数设置为O_DIRECT将避免双缓冲带来的性能损失,从buffer pool直接往磁盘上写,避免经过操作系统的缓冲带来的性能损耗。
二、参数优化最佳实践
2.1 innodb_file_per_table
innodb_file_per_table设置为ON,为每一个表生成一个独立的表空间。
2.2 innodb_stats_on_metadata
innodb_stats_on_metadata设置为OFF,避免不必要的InnoDB统计信息更新,可大大提高读取速度。
2.3 innodb_buffer_pool_instances
innodb_buffer_pool_instances参数,一个比较好的设置值为8,如果buffer pool size 小于 1G,将该参数设置为1。
2.4 query_cache_type & query_cache_size
这两个参数应当设置为0,禁用查询缓存。在MySQL 8.0 版本,查询缓存功能及参数被整体移除,而5.7及以下版本,应当禁用查询缓存。
2.5 innodb_autoinc_lock_mode
该参数设置为2(交错模式)能够避免auto-inc锁(表级锁),显著提高性能,前提binlog格式为ROW或者MIXED。
2.6 innodb_io_capacity & innodb_io_capacity_max
在写入很重的场景下,这两个参数将会影响MySQL的写入性能。首先需要了解磁盘IO的性能,即IOPS,可以先使用sysbench测试磁盘IO性能,然后再调整innodb_io_capacity和innodb_io_capacity_max,以便最大程度利用磁盘IO的能力。

浙公网安备 33010602011771号