1. MySQL安装部署概述
MySQL作为全球最流行的开源关系型数据库,其安装部署是每个开发者和管理员的必备技能。不同于简单的"下一步"安装,生产环境的MySQL部署需要考虑性能优化、安全配置、系统兼容性等多方面因素。本文将基于我十年DBA经验,从底层原理到实操细节,手把手带你完成MySQL的专业级部署。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与安装方案选择
2.1 系统环境检查
在开始安装前,必须对目标系统进行全面检查:
- 内存:建议至少4GB(生产环境推荐16GB+)
- 磁盘:SSD优先,预留2倍数据量的空间
- 操作系统:确认glibc版本(
ldd --version) - 网络:检查防火墙规则(3306端口)
关键提示:CentOS/RHEL需禁用默认的mariadb-libs,否则会导致冲突:
bash复制sudo yum remove mariadb-libs
2.2 安装方案对比
| 方案类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 二进制包安装 | 生产环境首选 | 性能最优,定制化强 | 配置复杂 |
| 源码编译安装 | 特殊需求定制 | 极致性能调优 | 耗时且易出错 |
| 包管理器安装 | 快速测试环境 | 简单快捷 | 版本可能较旧 |
| Docker容器部署 | 开发/测试环境 | 环境隔离,快速部署 | 生产环境需额外优化 |
推荐生产环境使用官方二进制包安装,以下示例以MySQL 8.0.34为例。
3. 详细安装步骤
3.1 下载与校验
bash复制# 创建专用目录
mkdir -p /opt/mysql && cd /opt/mysql
# 下载官方二进制包(建议国内使用镜像源)
wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.34-linux-glibc2.17-x86_64.tar.xz
# 验证文件完整性
sha256sum mysql-8.0.34-linux-glibc2.17-x86_64.tar.xz | grep a63f6b964c5eee0c5f5bf0b7e900a7e8a6c6f5e5
3.2 解压与目录准备
bash复制# 解压安装包
tar -xvf mysql-8.0.34-linux-glibc2.17-x86_64.tar.xz
# 创建软链接便于版本管理
ln -s mysql-8.0.34-linux-glibc2.17-x86_64 mysql
# 创建数据目录和日志目录
mkdir -p /data/mysql/{data,logs,binlog}
chown -R mysql:mysql /data/mysql
3.3 系统用户与权限配置
bash复制# 创建mysql系统用户
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 设置目录权限
chown -R mysql:mysql /opt/mysql
chmod 750 /data/mysql/data
4. 配置文件优化
4.1 基础my.cnf配置
创建/etc/my.cnf文件,关键配置如下:
ini复制[mysqld]
# 目录设置
basedir=/opt/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
log-error=/data/mysql/logs/mysqld.log
pid-file=/data/mysql/mysqld.pid
# 内存配置(按实际内存调整)
innodb_buffer_pool_size=4G # 建议为物理内存的50-70%
key_buffer_size=512M
# 连接配置
max_connections=500
thread_cache_size=100
# 存储引擎
default-storage-engine=INNODB
innodb_file_per_table=ON
# 二进制日志
log_bin=/data/mysql/binlog/mysql-bin
binlog_format=ROW
expire_logs_days=7
4.2 生产环境关键参数
ini复制# 性能优化
innodb_flush_log_at_trx_commit=1 # ACID保障
sync_binlog=1 # 数据安全
innodb_io_capacity=2000 # SSD建议值
innodb_io_capacity_max=4000
# 安全配置
skip_name_resolve=ON
local_infile=OFF
5. 初始化与启动
5.1 数据库初始化
bash复制cd /opt/mysql
./bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/data/mysql/data
初始化后会显示临时root密码,格式如下:
code复制[Note] A temporary password is generated for root@localhost: JqfkR3m!8z,a
5.2 启动MySQL服务
bash复制# 创建systemd服务文件
cat > /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
6. 安全加固与基础配置
6.1 修改root密码
bash复制# 使用初始化时的临时密码登录
mysql -uroot -p
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
6.2 创建管理用户
sql复制CREATE USER 'admin'@'%' IDENTIFIED BY 'AdminPassword456!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
6.3 安全脚本执行
bash复制mysql_secure_installation
重要安全建议:
- 移除匿名用户
- 禁止root远程登录
- 移除test数据库
- 立即重载权限表
7. 性能优化检查清单
7.1 安装后必检项
sql复制-- 检查引擎状态
SHOW ENGINES;
-- 验证缓冲池配置
SHOW VARIABLES LIKE 'innodb_buffer_pool%';
-- 检查连接设置
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';
-- 查看慢查询日志配置
SHOW VARIABLES LIKE 'slow_query%';
7.2 推荐性能调整
ini复制# 添加到my.cnf的[mysqld]段
innodb_buffer_pool_instances=4 # 多核CPU建议设置
innodb_flush_neighbors=0 # SSD建议关闭
innodb_read_io_threads=8
innodb_write_io_threads=8
8. 常见问题排查
8.1 启动失败排查步骤
- 检查错误日志:
bash复制tail -n 50 /data/mysql/logs/mysqld.log
- 常见错误解决:
Can't create/write to file:权限问题,检查mysql用户对目录的权限Table doesn't exist:可能ibdata1损坏,需要恢复备份Address already in use:3306端口被占用,netstat -tulnp | grep 3306
8.2 连接问题诊断
bash复制# 检查防火墙
iptables -L -n | grep 3306
# 测试本地连接
mysql -uadmin -p -h127.0.0.1
# 检查用户权限
SELECT host, user FROM mysql.user;
9. 备份与监控设置
9.1 基础备份配置
bash复制# 每日全量备份脚本示例
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d)
/opt/mysql/bin/mysqldump -uadmin -p'AdminPassword456!' --all-databases --single-transaction | gzip > $BACKUP_DIR/full_$DATE.sql.gz
9.2 监控指标建议
sql复制-- 关键性能指标查询
SELECT * FROM sys.metrics
WHERE Variable_name IN (
'cpu_usage',
'memory_used',
'innodb_row_lock_waits',
'table_open_cache_hits'
);
10. 版本升级注意事项
- 先升级测试环境,验证应用兼容性
- 检查废弃特性警告:
sql复制SHOW WARNINGS;
- 使用mysql_upgrade工具:
bash复制/opt/mysql/bin/mysql_upgrade -uadmin -p
11. 生产环境部署建议
- 高可用方案选择:
- 主从复制(简单易用)
- MGR集群(官方方案)
- 第三方方案(如Orchestrator)
- 定期维护任务:
sql复制-- 每周执行
OPTIMIZE TABLE critical_table1, critical_table2;
-- 每月执行
ANALYZE TABLE db1.*, db2.*;
- 安全审计配置:
ini复制[mysqld]
plugin-load-add=audit_log.so
audit_log_format=JSON
audit_log_file=/data/mysql/logs/audit.log
