本文档旨在提供一份基于Anolis OS 8.6(龙蜥OS)操作系统的MySQL 8.4.7数据库生产级部署指南。内容涵盖使用官方二进制压缩包进行安装、针对高性能硬件(16核CPU, 64GB内存, SSD磁盘)的深度参数调优,以及配置基于GTID的异步主从复制架构。所有步骤与配置均遵循稳定性、安全性与性能最佳实践。
-
系统内核参数调整
编辑 /etc/sysctl.conf 文件,添加或修改以下内核参数,以优化网络、内存及文件系统性能。
# 编辑系统参数配置文件
vi /etc/sysctl.conf
# 添加或修改如下内容:
# 网络核心参数
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# 网络TCP参数
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_keepalive_time = 600
# 内存与虚拟内存
vm.swappiness = 1
vm.dirty_ratio = 60
vm.dirty_background_ratio = 5
# 文件系统与Inode
fs.file-max = 655350
fs.aio-max-nr = 1048576
执行 sysctl -p 使配置生效。
-
用户资源限制调整
编辑 /etc/security/limits.conf 文件,提高未来MySQL服务用户的可用的进程数和文件打开数限制。
vi /etc/security/limits.conf
# 在文件末尾添加:
mysql soft nproc 65535
mysql hard nproc 65535
mysql soft nofile 65535
mysql hard nofile 65535
-
创建用户与目录
为MySQL服务创建专用的系统用户、组,并规划好数据目录,设置严格的权限控制。
# 创建mysql用户组和用户(无登录权限)
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 创建MySQL基础目录和数据目录
mkdir -p /usr/local/mysql
mkdir -p /data/mysql/{data,logs,binlogs,tmp,run}
# 更改目录所有者
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql
-
磁盘I/O调度策略优化(针对SSD)
对于SSD磁盘,建议将I/O调度策略设置为 deadline 或 none(对应多队列的blk-mq)。
# 查看当前磁盘调度策略,假设数据盘为 /dev/nvme0n1
cat /sys/block/nvme0n1/queue/scheduler
# 临时修改调度策略(重启失效)
echo deadline | sudo tee /sys/block/nvme0n1/queue/scheduler
# 如需永久生效,可将上述命令写入 /etc/rc.local 或对应的系统启动脚本
-
下载与解压
从MySQL官方网站下载适用于Linux的二进制压缩包(例如 mysql-8.4.7-linux-glibc2.17-x86_64.tar.xz),并解压到预定的安装目录。
# 切换到安装包所在目录(例如 /tmp)
cd /tmp
# 解压并移动到目标目录
tar -xvf mysql-8.4.7-linux-glibc2.17-x86_64.tar.xz -C /usr/local/mysql
-
设置环境变量
为方便使用MySQL命令行工具,将其路径加入系统环境变量。
# 创建环境变量脚本
vi /etc/profile.d/mysql.sh
# 添加以下内容:
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
# 使环境变量立即生效
source /etc/profile.d/mysql.sh
-
MySQL参数配置文件
根据64GB内存和SSD磁盘的特性,精心调优的my.cnf是数据库高性能与稳定运行的核心。以下为主库的配置示例(从库需修改server_id)。
主库配置文件 /etc/my.cnf
[client]
port = 3306
socket = /data/mysql/run/mysql.sock
[mysql]
prompt="\\u@\\h : \\d \\r:\\m:\\s> "
default_character_set = utf8mb4
no_auto_rehash
[mysqld]
# === 基础路径与标识 ===
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql/data
socket = /data/mysql/run/mysql.sock
pid_file = /data/mysql/run/mysql.pid
tmpdir = /data/mysql/tmp
# === 服务器标识(主从必须不同)===
server_id = 101
report_host = master_ip_or_hostname # 请替换为主库实际IP或主机名
# === 字符集与语言设置 ===
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
lower_case_table_names = 1
# === 内存配置(64G内存优化)===
# InnoDB缓冲池,约占物理内存的50%
innodb_buffer_pool_size = 32G
# 缓冲池实例数
innodb_buffer_pool_instances = 8
# 其他内存缓冲区
key_buffer_size = 64M
innodb_log_buffer_size = 256M
sort_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
join_buffer_size = 4M
thread_stack = 512K
binlog_cache_size = 2M
# === 连接与线程 ===
max_connections = 2000
max_connect_errors = 1000000
thread_cache_size = 64
table_open_cache = 4096
table_definition_cache = 2048
# === InnoDB引擎核心优化(针对SSD)===
# 事务日志刷盘策略
innodb_flush_log_at_trx_commit = 1
# redo日志文件总容量
innodb_redo_log_capacity = 6G
# IO线程数
innodb_read_io_threads = 8
innodb_write_io_threads = 8
# 刷盘方式,Linux下建议O_DIRECT
innodb_flush_method = O_DIRECT
# 独立表空间
innodb_file_per_table = 1
# 打开文件数限制
innodb_open_files = 65535
# === 二进制日志与复制(启用GTID模式)===
log_bin = /data/mysql/binlogs/mysql-bin
binlog_format = ROW
relay_log = /data/mysql/binlogs/relay-log
relay_log_index = /data/mysql/binlogs/relay-log.index
# GTID相关
gtid_mode = ON
enforce_gtid_consistency = ON
log_replica_updates = ON
# 二进制日志保留7天
binlog_expire_logs_seconds = 604800
max_binlog_size = 1G
sync_binlog = 1
# === 其他重要参数 ===
# 跳过域名解析
skip_name_resolve = 1
# 错误日志路径
log_error = /data/mysql/logs/error.log
# 慢查询日志
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/logs/slow.log
# 最大数据包
max_allowed_packet = 1G
# 连接超时
interactive_timeout = 10800
wait_timeout = 10800
从库配置差异
从库的my.cnf文件绝大部分与主库相同,只需确保以下参数唯一或按需调整:
[mysqld]
# 服务器标识必须唯一
server_id = 102
report_host = slave_ip_or_hostname # 请替换为从库实际IP或主机名
# 从库可选项:开启以下参数可增强只读安全性
# read_only = 1
# super_read_only = 1 (如果希望超级用户也只读)
-
初始化数据库与启动服务
4.1 初始化数据目录
使用--initialize选项进行初始化,此过程会为root@localhost用户生成一个临时密码。
sudo -u mysql /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
重要:初始化完成后,务必在错误日志中查找并记录生成的临时密码。
grep 'temporary password' /data/mysql/logs/error.log
4.2 配置启动与关闭脚本
为方便管理,可以创建简单的启动和关闭脚本。
# 创建启动脚本
cd /data/mysql
vi startMySQL.sh
# 内容如下:
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
# 创建关闭脚本
vi stopMySQL.sh
# 内容如下(需使用正确的root密码):
/usr/local/mysql/bin/mysqladmin -uroot -p'your_password' -S /data/mysql/run/mysql.sock shutdown
# 赋予执行权限
chmod +x /data/mysql/startMySQL.sh
chmod +x /data/mysql/stopMySQL.sh
启动MySQL服务:
/data/mysql/startMySQL.sh
4.3 修改root密码并初始化权限
使用临时密码登录,并立即修改为强密码。
mysql -uroot -p -S /data/mysql/run/mysql.sock
在MySQL提示符下执行:
-- 输入临时密码登录后,立即修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Your_New_Strong_Password_123!';
-- 刷新权限
FLUSH PRIVILEGES;
-
配置基于GTID的主从复制
5.1 主库操作
在主库上创建一个用于复制的专用用户。
-- 创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password_123!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
5.2 从库操作
在从库上配置主库连接信息并启动复制进程。GTID模式简化了主从复制的配置与管理。
-- 配置主库连接信息(使用CHANGE REPLICATION SOURCE TO语法,MySQL 8.0+)
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master_ip', -- 替换为主库IP地址
SOURCE_PORT=3306,
SOURCE_USER='repl',
SOURCE_PASSWORD='repl_password_123!',
SOURCE_AUTO_POSITION=1, -- 启用基于GTID的自动定位
GET_SOURCE_PUBLIC_KEY=1; -- MySQL 8.0 caching_sha2_password认证需要
-- 启动复制
START REPLICA;
-- 检查复制状态
SHOW REPLICA STATUS\G
需要关注的状态信息:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0 (或一个很小的值)
Retrieved_Gtid_Set 和 Executed_Gtid_Set 应正常显示并同步增长。
本文档提供了一套完整的、针对生产环境的MySQL 8.4.7二进制安装与部署方案,特别是详细阐述了基于GTID的主从复制配置。所有核心参数均基于16核CPU、64GB内存及SSD存储的硬件配置进行了深度优化。这套数据库部署方案为构建高可用、高性能的数据服务层奠定了坚实基础。在实际应用时,仍需结合具体业务负载特征进行监控与微调,并严格执行备份、监控和告警等运维策略。