my.cnf详解

my.cnf 是 MySQL 数据库服务器的配置文件,用于设置MySQL服务器的行为和性能。

[client]

  • port = 3306
  • socket = /tmp/mysql_3306.sock
  • default_character_set = utf8mb4
  • password=''

[mysqld]

Basic Configure

  • server_id = 4363306
  • port = 3306
  • user = mysql
  • basedir = /opt/mysql
  • datadir = /data/mysql_3306/var
  • tmpdir = /data/mysql_3306/tmp
  • socket = /tmp/mysql_3306.sock
  • skip_external_locking = 1
  • skip_name_resolve = 1 #.禁止mysql对外部连接进行DNS解析,而只能用ip地址
  • default_storage_engine = InnoDB
  • character_set_server = utf8mb4
  • collation_server = utf8mb4_unicode_ci
  • wait_timeout = 1500 #.关闭非交互连接之前等待活动的秒数,默认28800秒(8h)
  • interactive_timeout = 1500 #.关闭交互式连接前等待活动的秒数,默认28800秒(8h)
  • connect_timeout = 60 #.连接超时时间
  • back_log = 1000
  • lock_wait_timeout = 600
  • event_scheduler = 1 #.默认启用事件功能
  • lower_case_table_names = 1 #.是否区分大小写,0区分/1不区分
  • explicit_defaults_for_timestamp
  • sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION #.设置SQL服务器模式,用来定义支持哪些SQL语法,默认空值
  • disabled_storage_engines = "MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #.禁用非InnoDB的存储引擎(配置mgr需要)
  • pid_file = /data/mysql_3306/tmp/pid_mysql.pid
  • default_password_lifetime = 0 #.设置密码有效时间,单位天,默认0不启用密码有效时间
  • log_timestamps = system
  • show_compatibility_56 = on
  • symbolic_links = 0
  • secure_file_priv = /tmp
  • default_time_zone = '+08:00'
  • userstat = on
  • thread_statistics = on
  • mysql_native_password=on #.mysql 8.4默认禁用mysql_native_password认证插件
  • skip_networking #.完全禁用 TCP/IP 网络连接,启用后其他机器无法连此mysql服务
  • skip_ssl #.告诉MySQL在启动时跳过SSL模块
  • ssl=on #.是否启用 SSL,on启用/off禁用
  • ssl-ca=/data/mysql_3306/var/ca.pem
  • ssl-cert=/data/mysql_3306/var/server-cert.pem
  • ssl-key=/data/mysql_3306/var/server-key.pem
  • require_secure_transport=on #.是否强制所有客户端连接必须使用安全传输方式,on强制/off不强制

Binlog

  • log_bin = /data/mysql_3306/binlog/mysql-bin #.配置binlog日志路径,默认datadir
  • binlog_format = ROW #.设置binlog日志格式
  • binlog_rows_query_log_events = 1 #.默认为0(off),只对binlog为row格式有效,启用后会将把sql语句输出到binlog,就像注释一样,这对dba使用mysqlbinlog -vv分析binlog将非常有用.
  • binlog_cache_size = 8M #.基于会话的、所有未提交(uncommitted)的二进制日志缓存文件大小,默认大小为32KB
  • max_binlog_cache_size = 1G #.缓冲池中的二进制日志文件大小.基于事务,不能过大,而过小会导致写临时文件.
  • expire_logs_days = 8 #.超过x天的binlog删除
  • sync_binlog = 1 #.刷binlog的方式,直接影响mysql的性能和完整性,0高性能/1高安全/n兼顾性能和安全.
  • binlog_row_image = full #.默认full(在binlog为row格式下)会记录所有的行信息,而minimal只记录要修改列的记录,大大减少了binlog所占用的磁盘/网络/内存资源.
  • log_bin_trust_function_creators = 1
  • binlog_stmt_cache_size = 8M

以下这4个参数可使用zlib中的ISO-3309 CRC-32算法对binlog/relaylog进行checksum校验,以防止日志出错.

  • binlog_checksum = CRC32 #.设置写入二进制日志的事件的校验和的策略,默认为启用
  • slave_allow_batching = 1
  • master_verify_checksum = 1
  • slave_sql_verify_checksum = 1

Replication

  • slave_net_timeout = 60
  • skip_slave_start = 1 #.禁用之后,slave进程会随着mysql启动而启动
  • log_slave_updates = 1 #.链式主从(A->B->C),允许从库B写入binlog
  • slave_preserve_commit_order = 1
  • relay_log = /data/mysql_3306/binlog/repl-bin
  • relay_log_index = relay-bin.index
  • relay_log_purge = 1
  • binlog_gtid_simple_recovery = 1
  • slave_skip_errors = 1032,1062 #.定义复制过程中从库可以自动跳过的错误号
  • read_only = 1 #.限制普通用户对从库的更新操作,但是 对于 super 权限的超级用户依然可以更新
  • master_connect_retry = 600 #.用来设置在和主库连接丢失的时候,重试的时间间隔,默认60秒

关于gtid的几个参数:

  • gtid_mode = on #.是否开启gtid功能
  • enforce_gtid_consistency = on #.强制gtid一致性

解决多主自增长ID重复的几个参数:

  • auto_increment_increment = 2
  • auto_increment_offset = 1

为了避免master.info和中继日志崩溃,在容忍额外的fsync()带来的开销的情况下推荐如下3个参数:

  • sync_relay_log = 1
  • sync_relay_log_info = 1
  • sync_master_info = 1

[不推荐].跳过或只同步某个db的事务

  • replicate_ignore_table = guild.mirdb_bak #.从库:忽略特定表的复制

[推荐].跳过或只同步某个db的事务

  • replicate_wild_do_table = testdb.%
  • replicate_wild_ignore_table = mysql.%

开启基于库的多线程复制的5个配置(默认是0,不开启,最大并发数为1024个线程).

  • slave_parallel_workers = 8
  • slave_parallel_type = LOGICAL_CLOCK
  • master_info_repository = TABLE #.将master.info元数据保存在系统表中
  • relay_log_info_repository = TABLE #.将relay.info元数据保存在系统表中
  • relay_log_recovery = 1

ppd内部使用的报表服务器:

  • report_host = 10.114.8.30
  • report_port = 3403

实测发现 5.7.13 不支持如下参数:

  • rpl_semi_sync_master_enabled = 1
  • rpl_semi_sync_slave_enabled = 1
  • rpl_semi_sync_master_timeout = 1000
  • rpl_semi_sync_master_wait_no_slave = 1

MGR

  • transaction_write_set_extraction = XXHASH64 #.使用哈希算法将其编码为散列
  • loose-group_replication_group_name = "ce9be252-2b71-11e6-b8f4-00212844f856" #.mgr的组名,必须是uuid格式,所有节点相同,可修改
  • loose-group_replication_start_on_boot = off #.不自动启用组复制集群
  • loose-group_replication_local_address = "192.168.31.101:3306" #.本地IP地址字符串,只能用于组内节点之间的连接,不能开放给上层应用
  • loose-group_replication_group_seeds = "192.168.31.101:3406,192.168.31.102:3406,192.168.31.103:3406" #.组中成员访问列表
  • loose-group_replication_bootstrap_group = off #.不启用引导组
  • loose-group_replication_member_weight = 50 #.新主选举时,权重越大则优先级越高,默认50
  • loose-group_replication_single_primary_mode = TRUE #.TRUE(默认)表示mgr单主模式,FALSE表示多主模式
  • loose-group_replication_enforce_update_everywhere_checks = FALSE #.TRUE表示启用多主模式的一致性检查,FALSE表示禁用多主一致性检查

Error log

  • log_error = /data/mysql_3306/error/mysql_run.err

General log

  • general_log_file = /data/mysql_3306/tmp/mysql_general.log

Slow log

  • slow_query_log = 1 #.是否启用慢查询日志,默认0不启用
  • long_query_time = 3 #.慢查询阀值时间,单位为秒,默认超过10s的查询才写日志
  • log_output = file #.默认为FILE表示将通用查询日志和慢查询日志存入文件,改为TABLE则会将日志输出到 mysql.general_log 和 mysql.slow_log 表,对其他日志无效
  • slow_query_log_file = /data/mysql_3306/slow/mysql_slow.log #.开启慢查询日志, 记录查询过长的语句以便优化
  • log_queries_not_using_indexes = 1 #.是否记录没有使用索引的查询,而不考虑执行时间的长短,默认0不记录
  • log_throttle_queries_not_using_indexes = 10 #.限制每分钟记录的不使用索引的查询数,超过这个数目后只记录语句数量和花费的总时间,只有log_queries_not_using_indexes=1才有效
  • log_slow_admin_statements = 1 #.是否记录执行缓慢的管理SQL(即OPTIMIZE、ANALYZE、ALTER和其他管理命令语句),默认0不记录
  • log_slow_slave_statements = 1 #.是否记录从库上执行的慢查询语句,默认0不记录
  • min_examined_row_limit = 100 #.扫描行数小于该值的查询则不记入慢查询日志,默认0

Per_thread_buffer

  • max_connections = 3000 #.所有用户同时打开的最大连接数,默认151
  • max_user_connections = 2000 #.每个用户同时打开的最大连接数
  • max_connect_errors = 10000 #.针对某个IP连接中断与mysql服务连接的次数
  • max_allowed_packet = 512M #.服务器发送和接受的最大包长度
  • slave_max_allowed_packet = 1024M
  • slave_pending_jobs_size_max = 600M
  • table_open_cache = 20000
  • table_definition_cache = 20000
  • sort_buffer_size = 2M
  • read_buffer_size = 2M
  • join_buffer_size = 2M
  • tmp_table_size = 64M
  • max_heap_table_size = 64M
  • query_cache_type = 0
  • query_cache_size = 0
  • bulk_insert_buffer_size = 32M #.限制每个进程中缓冲池大小,不要大于key_buffer_size
  • thread_cache_size = 400
  • thread_stack = 256K
  • read_rnd_buffer_size = 2M
  • thread_handling = pool-of-threads

当Too many connections时,dba可以通过这个管理端口来登录(percona5.5及以后才支持):

  • extra_max_connections = 10
  • extra_port = 13306

MyISAM

  • key_buffer_size = 64M #.索引块的缓冲区大小,只针对mysiam

InnoDB

  • innodb_data_home_dir = /data/mysql_3306/iblog #.表空间的保存目录. 默认datadir
  • innodb_log_group_home_dir = /data/mysql_3306/iblog
  • innodb_data_file_path = ibdata1:1G:autoextend
  • innodb_temp_data_file_path = ibtmp1:100M:autoextend
  • innodb_buffer_pool_size = 9837936K #.保存索引和原始数据的缓冲池大小,建议为物理内存的50-60%,默认8M,仅对innodb生效
  • innodb_buffer_pool_instances = 8
  • innodb_log_file_size = 512M #.日志文件的大小,更大的设置可以提高性能,但也会增加故障恢复所需的时间
  • innodb_log_files_in_group = 3 #.为提高性能,MySQL可以以循环方式将日志文件写到多个文件。默认2,推荐3
  • innodb_log_buffer_size = 16M #.日志文件所用的内存大小,更大设置可以提高性能,但意外故障将会丢失数据
  • innodb_flush_log_at_trx_commit = 1 #.log buffer刷新到磁盘的方式,默认1最安全、0性能最好、其他值则折衷
  • innodb_lock_wait_timeout = 60 #.InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。默认值是50秒
  • innodb_read_io_threads = 8
  • innodb_write_io_threads = 8
  • innodb_page_cleaners = 8
  • innodb_max_dirty_pages_pct = 75
  • innodb_io_capacity = 2000
  • innodb_flush_method = O_DIRECT
  • innodb_file_per_table = 1 #.设置innodb引擎独立表空间,建议启用,否则所有数据库InnoDB引擎的表数据将存储在一个共享空间(ibdata1)中
  • transaction_isolation = READ-COMMITTED #.设定默认的事务隔离级别
  • innodb_strict_mode = 1
  • innodb_open_files = 400000
  • innodb_buffer_pool_dump_at_shutdown = ON
  • innodb_buffer_pool_load_at_startup = ON
  • innodb_print_all_deadlocks = 1
  • innodb_sort_buffer_size = 64M
  • innodb_undo_directory = /data/mysql_3306/iblog
  • innodb_max_undo_log_size = 2G
  • innodb_undo_log_truncate = 1
  • innodb_undo_tablespaces = 3
  • innodb_rollback_segments = 128
  • innodb_purge_threads = 8
  • innodb_purge_batch_size = 300
  • innodb_file_io_threads = 4 #.指定InnoDB表可用的文件I/O线程数,建议在非Windows平台中设为4
  • innodb_adaptive_hash_index = 0 #.建议禁用自适应哈希索引,避免高并发导致的mysql服务重启

tokudb

  • tokudb_cache_size = 9837936K
  • tokudb_directio = on
  • tokudb_data_dir = /data/mysql_3306/var
  • tokudb_log_dir = /data/mysql_3306/iblog
  • tokudb_tmp_dir = /data/mysql_3306/tmp
  • tokudb_commit_sync = OFF
  • tokudb_fsync_log_period = 1000
  • innodb_use_native_aio = off

audit

  • audit_log_policy = ALL
  • audit_log_format = JSON
  • audit_log_file = /data/mysql_3306/tmp/audit.log
  • audit_log_rotate_on_size = 1024M
  • audit_log_rotations = 50

performance-schema

  • performance_schema_instrument = 'memory/%=ON'
  • performance_schema_instrument = 'wait/lock/metadata/sql/mdl=ON'
  • performance_schema_instrument = 'statement/%=ON'
  • performance_schema_consumer_events_statements_current = ON
  • performance_schema_consumer_events_statements_history = ON
  • performance_schema_consumer_events_statements_history_long = ON
  • performance_schema_consumer_statements_digest = ON
  • performance_schema_digests_size = 40000
  • performance_schema_max_table_instances = 40000
  • performance_schema_max_sql_text_length = 4096
  • performance_schema_max_digest_length = 4096

Security

  • local_infile = 0 #.设置为0可禁用客户端load data local infile命令
  • skip_symbolic_links = yes #.禁用符号链接以防止各种安全风险

[mysql]

  • auto_rehash
  • pager = more
  • show_warnings
  • default_character_set = utf8mb4
  • skip_name_resolve #.禁止MySQL对外部连接进行DNS解析,而只能用ip地址

[mysqldump]

  • quick
  • single_transaction
  • max_allowed_packet = 1G #.服务器发送和接受的最大包长度
  • default_character_set = utf8mb4

[myisamchk]

  • key_buffer_size = 64M
  • sort_buffer_size = 2M
  • read_buffer = 2M
  • write_buffer = 2M

[mysqld_safe]

  • open_files_limit = 400000
Copyright © www.sqlfans.cn 2021 - 2026 All Right Reserved更新时间: 2026-08-26 10:14:59

results matching ""

    No results matching ""