一、环境准备
- 系统更新
bash
sudo yum update -y
sudo reboot # 推荐重启以应用内核更新
- 安装依赖
bash
sudo yum install -y wget curl vim net-tools epel-release
二、安装 MySQL 8
- 添加 MySQL 官方 YUM 仓库
bash
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-11.noarch.rpm
sudo yum clean all && sudo yum makecache
- 安装 MySQL 8 服务器
bash
sudo yum install -y mysql-community-server
- 启动 MySQL 并设置开机自启
bash
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld # 检查状态
三、安全配置
- 获取临时 root 密码
bash
sudo grep 'temporary password' /var/log/mysqld.log
输出示例:
text
2024-01-01T00:00:00.000000Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: AbCdEfGhIjK1!
2.运行安全配置向导
bash
sudo mysql_secure_installation
按照提示操作:
- 输入临时密码
- 设置新 root 密码(需符合复杂度要求)
- 移除匿名用户(
Y
) - 禁止 root 远程登录(
Y
) - 删除测试数据库(
Y
) - 重新加载权限表(
Y
)
四、优化配置
- 编辑 MySQL 配置文件
bash
sudo vim /etc/my.cnf
推荐配置(8GB 内存服务器示例) :
bash
[mysqld]
# 基础配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 性能优化
innodb_buffer_pool_size=4G # 50%-70% 物理内存
innodb_log_file_size=1G # 日志文件大小
innodb_flush_log_at_trx_commit=1 # 1=最安全,2=性能更好
innodb_flush_method=O_DIRECT
max_connections=500 # 最大连接数
query_cache_type=0 # MySQL 8 已移除查询缓存
skip_name_resolve=1 # 禁用 DNS 解析
table_open_cache=4000 # 打开表缓存
slow_query_log=1 # 启用慢查询日志
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=2 # 超过 2 秒记录为慢查询
# 大小写不敏感(可选)
lower_case_table_names=1 # 0=敏感,1=不敏感
[client]
default-character-set=utf8mb4
- 重启 MySQL 生效
bash
sudo systemctl restart mysqld
五、数据库用户管理
1.新增数据库用户
bash
-- 登录 MySQL
mysql -u root -p
-- 创建新用户(示例:用户 'appuser',密码 'Str0ngP@ssw0rd!')
CREATE USER 'appuser'@'%' IDENTIFIED BY 'Str0ngP@ssw0rd!';
-- 授予权限(按需调整)
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
2.授权用户远程访问
bash
# 使用 root 登录 MySQL
mysql -u root -p
-- 检查当前 root 用户权限
SELECT Host, User FROM mysql.user WHERE User = 'root';
-- 修改现有root@localhost为root@%
UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';
-- 刷新权限
FLUSH PRIVILEGES;
六、防火墙配置
bash
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
七、数据目录权限检查
bash
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 750 /var/lib/mysql
八、备份策略
- 定时全量备份(crontab)
bash
sudo crontab -e
添加:
text
0 3 * * * /usr/bin/mysqldump -u root -p'YourPassword' --all-databases | gzip > /backup/mysql_$(date +\%F).sql.gz
- 恢复数据库
bash
gunzip < /backup/mysql_2025-01-01.sql.gz | mysql -u root -p
九、监控与日志
- 查看慢查询日志
bash
sudo tail -f /var/log/mysql-slow.log
- 监控工具推荐
- Prometheus + Grafana(可视化监控)
- pt-query-digest(分析慢查询)