MySQL 8.x 的配置文件 (my.cnf
或 my.ini
) 允许你定制 MySQL 服务器的行为。这些配置选项可以影响服务器的启动方式、内存使用、安全性、日志记录等方面。以下是 MySQL 8.x 中一些重要的配置段和配置项以及它们的作用。
一、配置文件结构
配置文件通常包含以下几部分:
- [client]: 客户端连接设置。
- [mysqld]: MySQL 服务器的设置。
- [mysqld_safe]: mysqld 守护进程的安全设置。
- [mysql]: MySQL 命令行客户端的设置。
- [mysqldump]: mysqldump 工具的设置。
- [mysqlhotcopy]: mysqlhotcopy 工具的设置。
- [mysqlcheck]: mysqlcheck 工具的设置。
- [mysqladmin]: mysqladmin 工具的设置。
[mysqld] 配置段
这是最重要的配置段之一,用于设置 MySQL 服务器的行为。
通用设置
- port: MySQL 服务器监听的 TCP/IP 端口号,默认为 3306。
- socket: Unix socket 文件的路径。
- bind-address: MySQL 服务器绑定的 IP 地址。设置为
0.0.0.0
表示监听所有接口。 - skip-name-resolve: 如果设置为 ON,则禁止 MySQL 执行 DNS 反向查找。
内存和缓存
- innodb_buffer_pool_size: InnoDB 缓冲池的大小,通常设置为服务器总内存的 70%-80%。
- tmp_table_size: 临时表的最大大小。
- max_heap_table_size: 内存表的最大大小。
- key_buffer_size: MyISAM 表索引缓存的大小。
安全性和身份验证
- secure-file-priv: 限制 LOAD DATA INFILE 和 SELECT INTO OUTFILE 命令只能访问指定目录下的文件。
- skip-external-locking: 禁用外部锁定机制。
- skip-networking: 禁用网络连接,仅允许本地访问。
- validate-password-policy: 密码复杂度策略。
- validate-password-length: 最小密码长度。
性能和并发
- max_connections: 最大并发连接数。
- thread_cache_size: 线程缓存的大小。
- wait_timeout: 非交互式连接的超时时间。
- interactive_timeout: 交互式连接的超时时间。
- query_cache_size: 查询缓存的大小。MySQL 8.x 默认禁用了查询缓存。
日志和复制
- general_log: 是否启用通用日志。
- log-error: 错误日志文件的路径。
- slow_query_log: 是否启用慢查询日志。
- long_query_time: 慢查询的时间阈值。
- log-bin: 二进制日志文件的前缀。
- server-id: 用于复制的服务器标识。
存储引擎
- default-storage-engine: 默认存储引擎。
- innodb_file_per_table: 是否为每个 InnoDB 表分配单独的 .ibd 文件。
- innodb_flush_log_at_trx_commit: 控制 InnoDB 日志刷新到磁盘的频率。
- innodb_log_file_size: 单个 InnoDB 日志文件的大小。
- innodb_log_files_in_group: InnoDB 日志组中的文件数量。
[client] 配置段
- port: 客户端连接使用的端口。
- socket: 客户端连接使用的 Unix socket 文件路径。
[mysql] 配置段
- no-auto-rehash: 禁用自动 rehash 命令。
- auto-rehash: 允许自动 rehash 命令。
[mysqld_safe] 配置段
- nice: mysqld 守护进程的 nice 值。
- open-files-limit: mysqld 守护进程可以打开的最大文件数。
示例配置
这里是一个比较全的 MySQL 8.x 配置文件示例:
[client]
# MySQL 客户端连接设置(
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld_safe]
# MySQL 守护进程的安全设置
nice = 0
open-files-limit= 10000
[mysqld]
# MySQL 服务器设置
port = 3306
bind-address = 0.0.0.0
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
thread_concurrency = 10
query_cache_size = 0
query_cache_type = 0
expire_logs_days = 10
max_connections = 151
table_open_cache = 200
sort_buffer_size = 512K
read_rnd_buffer_size = 1M
read_buffer_size = 256K
join_buffer_size = 256K
tmp_table_size = 64M
max_heap_table_size = 64M
bulk_insert_buffer_size = 64M
# InnoDB 存储引擎配置
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_log_files_in_group = 2
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_support_xa = 1
innodb_lock_wait_timeout = 50
innodb_file_per_table = 1
innodb_large_prefix = 1
innodb_open_files = 400
innodb_io_capacity = 200
innodb_io_capacity_max = 400
innodb_adaptive_hash_index = 1
innodb_adaptive_max_sleep_delay = 150000
innodb_change_buffer_max_size = 25
innodb_change_buffering = all
innodb_stats_on_metadata = 0
innodb_use_native_aio = 1
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_file_format_check = 1
innodb_stats_auto_recalc = 1
innodb_stats_persistent = 1
innodb_stats_persistent_sample_pages = 20
innodb_doublewrite = 1
innodb_flush_neighbors = 2
innodb_print_all_deadlocks = 1
innodb_buffer_pool_dump_at_shutdown = 0
innodb_buffer_pool_load_at_startup = 0
innodb_fast_shutdown = 1
# 日志和复制配置
log_bin = /var/lib/mysql/mysql-bin
binlog_format = ROW
binlog_row_image = FULL
binlog_checksum = CRC32
expire_logs_days = 10
max_binlog_size = 100M
max_binlog_cache_size = 100M
sync_binlog = 0
server-id = 1
# 性能监控
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
# 错误日志
log_error = /var/log/mysql/error.log
# 二进制日志
binlog_cache_size = 4M
# 事务隔离级别
transaction_isolation = READ-COMMITTED
# 安全性配置
secure-file-priv = /var/lib/mysql-files/
validate_password_policy = MEDIUM
validate_password_length = 8
# 网络配置
max_connect_errors = 10
max_connections = 151
# 并发配置
thread_cache_size = 50
# 会话超时
wait_timeout = 28800
interactive_timeout = 28800
# 默认存储引擎
default_storage_engine = InnoDB
# 复制配置
gtid_mode = ON
enforce_gtid_consistency = ON
[mysql]
# MySQL 命令行客户端设置
no-auto-rehash
[mysqldump]
# mysqldump 工具设置
quick
max_allowed_packet = 16M
[mysqlhotcopy]
# mysqlhotcopy 工具设置
interactive-timeout
[mysqlcheck]
# mysqlcheck 工具设置
checksum
二、服务相关命令行
- 服务启停
systemctl start mysql
systemctl stop mysql
- 密码修改
# 初始密码查看(自己定义的日志位置)
grep 'temporary password' /var/log/mysqld.log
# 登录数据库
mysql -u 用户名 -p
# 修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 刷新权限
mysql> FLUSH PRIVILEGES;
- 数据库备份以及还原
过程会需要输入密码
# 备份数据库
mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql
# (可选)删除或清空数据库
mysql -u 用户名 -p -e "DROP DATABASE 数据库名; CREATE DATABASE 数据库名;"
# 还原数据库
mysql -u 用户名 -p 数据库名 < 备份文件名.sql
三、其他说明
- 数据库安装完通常在默认的日志文件里会有默认密码
在没有找到密码的前提下不要删除任何日志文件
- 修改数据库配之前请一定要先备份一下配置文件
防止配置文件错误导致服务启动失败
- 端口与绑定地址非常重要
决定你的数据库访问地址,一般设置为
0.0.0.0
表示即可以使用本地地址访问,也可以使用服务器地址远程访问
- 关于文件的存放路径
日志文件
的存放路径需要单独存放
数据库文件
需要单独存放,方便后续扩容