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 表示即可以使用本地地址访问,也可以使用服务器地址远程访问

  • 关于文件的存放路径

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

相关推荐
菲兹园长1 小时前
表的设计(MYSQL)
数据库·mysql
Java Fans1 小时前
MySQL数据库常用命令大全(完整版——表格形式)
数据库·mysql
白萝卜弟弟1 小时前
【MySQL】MySQL函数之JSON_EXTRACT
数据库·mysql·json
gjh12081 小时前
MySQL常见面试题
数据库·mysql
我的K84092 小时前
Flink整合Hive、Mysql、Hbase、Kafka
hive·mysql·flink
little_kid_pea3 小时前
MySQL Workbench导入数据比mysql命令行慢
数据库·mysql
苹果醋33 小时前
C语言 strlen 函数 - C语言零基础入门教程
java·运维·spring boot·mysql·nginx
爪哇学长4 小时前
解锁数据世界:从基础到精通的数据库探索之旅
数据库·mysql·oracle
码哥字节4 小时前
重生之从零设计 MySQL 架构
数据库·mysql·架构
地图之家家长9 小时前
19.(开发工具篇mysql库)mysql锁表问题解决
数据库·mysql