MySQL配置文件

一.Linux

1.MySQL5.7

**MySQL 5.7 配置文件示例(适用于 Linux)**

 

[client]
# 设置客户端默认端口
port=3306

# 设置客户端默认字符集为 utf8mb4
default-character-set=utf8mb4

# 指定 MySQL 客户端用来与 MySQL 服务器通信的本地 socket 文件的位置。
# 如果使用 UNIX 域套接字连接 MySQL 时,这个选项是必需的
socket=/var/lib/mysql/mysql.sock


[mysql]
# 设置 mysql 客户端默认端口
port=3306

# 设置 mysql 客户端默认字符集为 utf8mb4
default-character-set=utf8mb4

# 禁用反向 DNS 解析,以提高连接性能(尤其在 DNS 解析较慢或有问题的环境中)
skip-name-resolve

# 指定 MySQL 服务器监听的端口号。默认情况下,MySQL 服务器监听端口3306。
# 注意:通常在 [mysqld] 部分设置端口,此处可以省略
# port=3306

# 指定 MySQL 服务器使用的 UNIX 域套接字文件的位置。
# 注意:通常在 [mysqld] 部分设置 socket,此处可以省略
# socket=/var/lib/mysql/mysql.sock


[mysqld]
# 服务器端口
port=3306

# MySQL 安装目录(根据实际安装路径调整)
basedir=/usr/local/mysql

# MySQL 数据目录
datadir=/var/lib/mysql

# 错误日志文件路径
log-error=/var/log/mysql/mysqld.log

# 进程 ID 文件路径
pid-file=/var/run/mysqld/mysqld.pid

# 二进制日志文件存放路径
log-bin=/var/lib/mysql/mysql-bin

# 启用二进制日志(用于主从复制和数据恢复)
# 如果不需要二进制日志,可以注释掉或移除以下两行
# log-bin=mysql-bin 
# expire_logs_days=10

# 设置单个二进制日志文件的最大大小(例如 100MB)
max_binlog_size=100M

# 二进制日志格式 
binlog-format=ROW

# 服务器字符集和排序规则
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 默认存储引擎
default-storage-engine=InnoDB

# 设置服务器ID(适用于主从复制)
server-id=1

# SQL 模式(根据需要调整,以下为常用设置)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 开启慢查询日志,慢查询阈值设为 2秒
slow_query_log=1
long_query_time=2

# 慢查询日志文件路径
slow_query_log_file=/var/log/mysql/slow.log

# 连接超时设置(秒)
wait_timeout=600
interactive_timeout=600

# 最大连接数
max_connections=500

# 允许的最大包大小
max_allowed_packet=512M

# 打开表缓存的大小
table_open_cache=400

# 排序缓冲区大小
sort_buffer_size=256K

# 索引缓存大小(适用于 MyISAM,可以适当调整或忽略)
key_buffer_size=64M

# 指定 MySQL 内部临时表的最大大小
tmp_table_size=1G
max_heap_table_size=1G

# InnoDB 使用缓冲池来缓存数据和索引,以提高读写性能
# 根据服务器内存调整,通常设置为总内存的 60-80%
innodb_buffer_pool_size=4G

# InnoDB 使用日志文件来记录所有的修改操作,以支持崩溃恢复
# 根据事务量和磁盘性能调整
innodb_log_file_size=1G

# 每个表的数据和索引存储在单独的文件中(推荐开启)
innodb_file_per_table=ON

# InnoDB 日志缓冲区大小
innodb_log_buffer_size=16M

# InnoDB 刷新日志的策略
innodb_flush_log_at_trx_commit=1

# InnoDB 双写缓冲(保护数据免受部分页写入的影响)
innodb_doublewrite=ON

# InnoDB I/O 容量设置(根据存储设备性能调整)
innodb_io_capacity=2000
innodb_io_capacity_max=4000

# InnoDB 读写线程数(根据 CPU 核心数调整)
innodb_read_io_threads=8
innodb_write_io_threads=8

# 禁用符号链接,增强安全性
skip-symbolic-links

# 禁用本地加载文件,增强安全性(如果不需要 LOAD DATA LOCAL INFILE)
local-infile=0

# 资源限制
open_files_limit=65535

# 查询缓存(MySQL 8.0 已移除,5.7 可选使用,但通常不建议)
# query_cache_type=0
# query_cache_size=0

# 表定义缓存
table_definition_cache=400

# 表打开缓存实例数(适用于多核 CPU)
table_open_cache_instances=8

# 其他优化(根据需要启用和调整)
# innodb_strict_mode=ON
# innodb_adaptive_hash_index=ON

2.MySQL8.0

**MySQL 8.0 配置文件示例(适用于 Linux)**

[client]
port=3306
# 设置 MySQL 客户端默认字符集
default-character-set=utf8mb4
# 指定 MySQL 客户端用来与 MySQL 服务器通信的本地 socket 文件的位置。
socket=/var/lib/mysql/mysql.sock

[mysql]
# 设置 MySQL 客户端默认字符集
default-character-set=utf8mb4
# 禁用反向 DNS 解析,以提高连接性能。
skip-name-resolve
# 指定 MySQL 客户端连接的端口号。
port=3306
# 指定 MySQL 客户端使用的 UNIX 域套接字文件的位置。
socket=/var/lib/mysql/mysql.sock

[mysqld]
# 服务器端口
port=3306

# MySQL 的安装目录
basedir=/usr/local/mysql

# MySQL 的数据目录
datadir=/var/lib/mysql

# 错误日志文件
log-error=/var/log/mysql/mysqld.log

# 进程 ID 文件
pid-file=/var/run/mysqld/mysqld.pid

# 自定义二进制日志文件存放路径
log-bin=/var/lib/mysql/mysql-bin

# 启用二进制日志(已在 log-bin 中启用,无需重复)
# log-bin=mysql-bin 

# 设置二进制日志过期时间(秒)
binlog_expire_logs_seconds=2592000 # 30天

# 设置单个二进制日志文件的最大大小(例如100MB)
max_binlog_size=100M # 最大连接数 max_connections=1000 # 允许的最大包大小 max_allowed_packet=512M # 打开表缓存的大小 table_open_cache=256 # 排序缓冲区大小 sort_buffer_size=256K # 读取缓冲区大小 read_buffer_size=256K # 读取临时表缓冲区大小 read_rnd_buffer_size=512K # 连接缓冲区大小 join_buffer_size=256K # 指定 MySQL 内部临时表的最大大小 tmp_table_size=1G max_heap_table_size=1G # InnoDB 使用缓冲池来缓存数据和索引 innodb_buffer_pool_size=40G # InnoDB 使用日志文件来记录所有的修改操作 innodb_log_file_size=4G # 每个表的数据和索引存储在单独的文件中 innodb_file_per_table=ON # 索引缓存大小(适用于 MyISAM) key_buffer_size=64M # 默认存储引擎 default-storage-engine=InnoDB # 设置服务器ID(适用于主从复制) server-id=1 # SQL 模式 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 开启慢查询日志,慢查询阈值设为 2秒 slow_query_log=1 long_query_time=2 # 慢查询日志文件 slow_query_log_file=/var/log/mysql/slow.log # 连接超时设置(秒) wait_timeout=600 interactive_timeout=600 # 线程缓存大小 thread_cache_size=200 # 查询缓存大小(MySQL 8.0 已移除查询缓存,无需配置) # 表定义缓存 table_definition_cache=400 # 表打开缓存 table_open_cache_instances=4 # InnoDB 相关优化 innodb_flush_log_at_trx_commit=1 innodb_flush_method=O_DIRECT innodb_io_capacity=2000 innodb_io_capacity_max=4000 innodb_read_io_threads=8 innodb_write_io_threads=8 innodb_thread_concurrency=0 innodb_adaptive_hash_index=ON innodb_buffer_pool_instances=8 # 日志刷新频率 sync_binlog=1 innodb_doublewrite=ON # 错误日志缓冲 log_error_verbosity=3 # 临时表相关设置 tmp_table_size=1G max_heap_table_size=1G # 字符集和排序规则 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 安全相关设置 skip_symbolic_links local-infile=0 # 资源限制 open_files_limit=65535 # 其他优化 innodb_strict_mode=ON innodb_old_blocks_time=1000

二.windows 

1.MySQL5.7

**MySQL 5.7 配置文件示例(适用于 Windows Server)**

[client]
# 设置客户端默认端口
port=3306

# 设置客户端默认字符集为 utf8mb4,支持更广泛的字符集(如表情符号)
default-character-set=utf8mb4


[mysql]
# 设置 mysql 客户端默认端口
port=3306

# 设置 mysql 客户端默认字符集为 utf8mb4
default-character-set=utf8mb4

# 禁用反向 DNS 解析,提高连接性能(尤其在 DNS 解析较慢或有问题的环境中)
skip-name-resolve


[mysqld]
# 服务器端口
port=3306

# MySQL 安装目录(根据实际安装路径调整)
basedir=C:/Program Files/MySQL/MySQL Server 5.7

# MySQL 数据目录(根据实际数据存储路径调整)
datadir=C:/ProgramData/MySQL/Data/

# 错误日志文件路径
log-error=C:/ProgramData/MySQL/Logs/mysqld.log

# 进程 ID 文件路径
pid-file=C:/ProgramData/MySQL/PID/mysqld.pid

# 二进制日志文件存放路径
log-bin=C:/ProgramData/MySQL/Logs/mysql-bin

# 启用二进制日志(用于主从复制和数据恢复)
# 注意:如果不需要二进制日志,可以注释掉或移除以下两行
log-bin=mysql-bin
expire_logs_days=10

# 设置单个二进制日志文件的最大大小(例如 100MB)
max_binlog_size=100M

# 二进制日志格式(推荐 ROW 格式,支持更可靠的数据复制)
binlog-format=ROW

# 最大连接数
# 根据服务器资源和应用需求调整,8000 对于大多数应用来说可能过高
max_connections=500

# 允许的最大包大小
max_allowed_packet=512M

# 打开表缓存的大小
table_open_cache=400

# 排序缓冲区大小
sort_buffer_size=256K

# 读取缓冲区大小
read_buffer_size=256K

# 读取临时表缓冲区大小
read_rnd_buffer_size=512K

# 连接缓冲区大小
join_buffer_size=256K

# 指定 MySQL 内部临时表的最大大小
tmp_table_size=1G
max_heap_table_size=1G

# InnoDB 使用缓冲池来缓存数据和索引,以提高读写性能
# 根据服务器内存调整,通常设置为总内存的 60-80%
innodb_buffer_pool_size=4G

# InnoDB 使用日志文件来记录所有的修改操作,以支持崩溃恢复
# 根据事务量和磁盘性能调整
innodb_log_file_size=1G

# 每个表的数据和索引存储在单独的文件中(推荐开启)
innodb_file_per_table=ON

# InnoDB 日志缓冲区大小
innodb_log_buffer_size=16M

# InnoDB 刷新日志的策略
innodb_flush_log_at_trx_commit=1

# InnoDB 双写缓冲(保护数据免受部分页写入的影响)
innodb_doublewrite=ON

# 索引缓存大小(适用于 MyISAM,可以适当调整或忽略)
key_buffer_size=64M

# 默认存储引擎
default-storage-engine=InnoDB

# 设置服务器ID(适用于主从复制)
server-id=1

# SQL 模式(根据需要调整,以下为常用设置)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 开启慢查询日志,慢查询阈值设为 2秒
slow_query_log=1
long_query_time=2

# 慢查询日志文件路径
slow_query_log_file=C:/ProgramData/MySQL/Logs/slow.log

# 连接超时设置(秒)
wait_timeout=600
interactive_timeout=600

# 线程缓存大小(提高连接性能)
thread_cache_size=100

# 表定义缓存
table_definition_cache=400

# 表打开缓存实例数(适用于多核 CPU)
table_open_cache_instances=8

# 查询缓存(MySQL 8.0 已移除,5.7 可选使用,但通常不建议)
# query_cache_type=0
# query_cache_size=0

# 临时表相关设置
tmp_table_size=1G
max_heap_table_size=1G

# 字符集和排序规则
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 安全相关设置
skip_symbolic_links
local-infile=0

# 资源限制
open_files_limit=65535

# InnoDB 高级设置(根据需要调整)
innodb_io_capacity=2000
innodb_io_capacity_max=4000
innodb_read_io_threads=8
innodb_write_io_threads=8
innodb_thread_concurrency=0
innodb_adaptive_hash_index=ON
innodb_strict_mode=ON

2.MySQL8.0

**MySQL 8.0 配置文件示例(适用于 Windows Server)

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
# 设置服务器默认字符集为 utf8mb4
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 服务器端口
port=3306

# MySQL 的安装目录
basedir=C:/Program Files/MySQL/MySQL Server 8.0

# MySQL 的数据目录
datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data/

# 错误日志文件
log-error=C:/ProgramData/MySQL/MySQL Server 8.0/Logs/mysqld.log

# 进程 ID 文件
pid-file=C:/ProgramData/MySQL/MySQL Server 8.0/PID/mysqld.pid

# 自定义二进制日志文件存放路径 
log-bin="D:/ProgramData/MySQL/MySQL Server 8.0/Logs/mysql-bin"

# 设置二进制日志过期时间(秒)
binlog_expire_logs_seconds=2592000 # 30天

# 设置单个二进制日志文件的最大大小(例如100MB)
max_binlog_size=100M # 最大连接数 max_connections=500 # 允许的最大包大小 max_allowed_packet=512M # 打开表缓存的大小 table_open_cache=256 # 排序缓冲区大小 sort_buffer_size=256K # 指定MySQL内部临时表的最大大小 tmp_table_size=1G max_heap_table_size=1G # InnoDB 使用缓冲池来缓存数据和索引 innodb_buffer_pool_size=10G # InnoDB 使用日志文件来记录所有的修改操作 innodb_log_file_size=2G # 根据需要调整 # 每个表的数据和索引存储在单独的文件中 innodb_file_per_table=ON # 索引缓存大小(适用于 MyISAM,可以忽略或设置为较小值) key_buffer_size=64M # 默认存储引擎 default-storage-engine=InnoDB # 设置服务器ID(适用于主从复制) server-id=1 # SQL 模式 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 开启慢查询日志,慢查询阈值设为 2秒 slow_query_log=1 long_query_time=2 # 线程缓存大小 thread_cache_size=100 # 连接超时设置(秒) wait_timeout=600 interactive_timeout=600

三、验证配置​​

登录 MySQL 后,执行以下命令检查关键参数是否生效:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'tmp_table_size';
SHOW VARIABLES LIKE 'max_heap_table_size';
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'binlog_format';

四、windows、linux、docker中配置区别

在Linux 系统​​ 或 ​​Docker 容器​​ 中安装 ​​MySQL 8.0.24​​ 时,您提供的配置文件 ​​大部分内容是可以通用的​​,但根据不同的部署环境,有一些特定的注意事项和调整建议。以下是详细的分析和建议:

​​1. 配置文件在 Linux 与 Docker 中的通用性​​

​​通用部分​​

  • ​​配置参数​​:大多数 MySQL 配置参数(如 max_connectionsinnodb_buffer_pool_sizelog-bin 等)在 Linux 和 Docker 环境中是通用的,您可以沿用现有的配置参数。
  • ​​字符集设置​​:字符集相关的配置(如 character-set-server=utf8mb4 和 collation-server=utf8mb4_unicode_ci)在两种环境中同样适用。

​​不同之处​​

  • ​​配置文件的位置​​:

    • ​​Linux​​:通常位于 /etc/mysql/my.cnf 或 /etc/my.cnf,也可能在 /etc/mysql/mysql.conf.d/ 目录下的其他配置文件中。
    • ​​Docker​​:通常通过挂载配置文件或使用环境变量来配置 MySQL。如果使用自定义配置文件,需要将其挂载到容器内的指定位置。
  • ​​路径分隔符​​:

    • ​​Linux​​ 使用正斜杠 / 作为路径分隔符,这在您的配置文件中已经正确使用(如 C:/ProgramData/MySQL/MySQL Server 8.0/Data/mysql-bin 在 Linux 中应改为 /ProgramData/MySQL/MySQL Server 8.0/Data/mysql-bin)。不过,通常在 Linux 环境下,MySQL 数据目录位于 /var/lib/mysql,日志文件位于 /var/log/mysql/ 等标准路径下。
  • ​​权限管理​​:

    • ​​Linux​​ 需要确保 MySQL 数据目录和日志文件的权限正确,以便 MySQL 进程有读写权限。
    • ​​Docker​​ 容器内的文件权限也需正确设置,尤其是在挂载主机目录到容器时。

​​2. 针对 Linux 系统的配置建议​​

​​a. 配置文件位置与命名​​

  • ​​主配置文件​​:通常为 /etc/mysql/my.cnf 或 /etc/my.cnf
  • ​​包含的其他配置文件​​:可以在 /etc/mysql/conf.d/ 或 /etc/mysql/mysql.conf.d/ 目录下创建额外的 .cnf 文件,以便更好地管理不同环境的配置。

​​b. 调整路径​​

  • ​​数据目录​​:默认情况下,MySQL 在 Linux 上的数据目录为 /var/lib/mysql。如果保持默认,无需在配置文件中指定 datadir,除非您自定义了数据目录。
  • ​​日志文件路径​​:将日志文件路径调整为 Linux 标准路径,例如:
    log-error=/var/log/mysql/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    log-bin=/var/lib/mysql/mysql-bin
  • ​​确保目录存在并设置正确的权限​​:
    sudo mkdir -p /var/log/mysql /var/run/mysqld /var/lib/mysql
    sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld /var/lib/mysql

​​c. 优化配置参数​​

  • 内存相关参数​​:
    • 根据您的服务器内存(64GB),可以适当调整 innodb_buffer_pool_size。例如,设置为 32GB 或 40GB,视其他应用的内存需求而定。
    • 调整 max_connections 根据实际需求,避免过高导致内存压力。

 

posted @ 2024-05-08 18:09  O波V步  阅读(941)  评论(0)    收藏  举报