Mysql8.x配置详解

MySQL 8.x 的配置文件 (my.cnfmy.ini) 允许你定制 MySQL 服务器的行为。这些配置选项可以影响服务器的启动方式、内存使用、安全性、日志记录等方面。以下是 MySQL 8.x 中一些重要的配置段和配置项以及它们的作用。

一、配置文件结构

配置文件通常包含以下几部分:

  1. [client]: 客户端连接设置。
  2. [mysqld]: MySQL 服务器的设置。
  3. [mysqld_safe]: mysqld 守护进程的安全设置。
  4. [mysql]: MySQL 命令行客户端的设置。
  5. [mysqldump]: mysqldump 工具的设置。
  6. [mysqlhotcopy]: mysqlhotcopy 工具的设置。
  7. [mysqlcheck]: mysqlcheck 工具的设置。
  8. [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 配置文件示例:

ini 复制代码
[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

二、服务相关命令行

  • 服务启停
bash 复制代码
systemctl start mysql
systemctl stop mysql
  • 密码修改
bash 复制代码
# 初始密码查看(自己定义的日志位置)
grep 'temporary password' /var/log/mysqld.log
# 登录数据库
mysql -u 用户名 -p
# 修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 刷新权限
mysql> FLUSH PRIVILEGES;
  • 数据库备份以及还原

过程会需要输入密码

bash 复制代码
# 备份数据库
mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql
# (可选)删除或清空数据库
mysql -u 用户名 -p -e "DROP DATABASE 数据库名; CREATE DATABASE 数据库名;"
# 还原数据库
mysql -u 用户名 -p 数据库名 < 备份文件名.sql

三、其他说明

  • 数据库安装完通常在默认的日志文件里会有默认密码

在没有找到密码的前提下不要删除任何日志文件

  • 修改数据库配之前请一定要先备份一下配置文件

防止配置文件错误导致服务启动失败

  • 端口与绑定地址非常重要

决定你的数据库访问地址,一般设置为0.0.0.0 表示即可以使用本地地址访问,也可以使用服务器地址远程访问

  • 关于文件的存放路径

日志文件的存放路径需要单独存放
数据库文件需要单独存放,方便后续扩容

相关推荐
小林coding2 小时前
阿里云 Java 后端一面,什么难度?
java·后端·mysql·spring·阿里云
18号房客2 小时前
高级sql技巧进阶教程
大数据·数据库·数据仓库·sql·mysql·时序数据库·数据库架构
翔云1234563 小时前
MySQL purged gtid是如何生成和维护的
数据库·mysql
平行线也会相交5 小时前
云图库平台(三)——后端用户模块开发
数据库·spring boot·mysql·云图库平台
恒辉信达6 小时前
hhdb客户端介绍(53)
数据库·mysql·hhdb·数据库可视化界面客户端
Hello.Reader7 小时前
Redis热点数据管理全解析:从MySQL同步到高效缓存的完整解决方案
redis·mysql·缓存
是程序喵呀8 小时前
MySQL备份
android·mysql·adb
指尖上跳动的旋律8 小时前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
苹果醋312 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
先睡12 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式