在新购的 Linux 云服务器上部署 MySQL 数据库,通常分为 安装、初始化、安全加固、配置优化 四个阶段。以下以主流的 Ubuntu/Debian 和 CentOS/RHEL 为例,提供详细步骤:
一、准备工作
-
登录服务器
ssh root@your_server_ip -
更新系统包
- Ubuntu/Debian:
sudo apt update && sudo apt upgrade -y - CentOS/RHEL (7/8):
sudo yum update -y # 或 dnf update -y(CentOS 8+)
- Ubuntu/Debian:
-
确认云服务商防火墙规则
- 在云平台控制台(如阿里云、腾讯云、AWS)放行 TCP 3306 端口(仅对必要 IP 开放更安全)。
- 本地临时测试可先关闭防火墙(生产环境不建议):
sudo ufw disable # Ubuntu sudo systemctl stop firewalld # CentOS
二、安装 MySQL
✅ 方案 A:使用官方 YUM/APT 源(推荐,版本较新)
Ubuntu/Debian
# 添加 MySQL APT 仓库
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
# 选择版本(如 MySQL 8.0),按空格选中后回车
sudo apt update
sudo apt install mysql-server -y
CentOS/RHEL
# 下载并安装 MySQL YUM 仓库
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
sudo rpm -ivh mysql80-community-release-el8-1.noarch.rpm
# 安装 MySQL Server(默认 8.0)
sudo yum install mysql-server -y
# 如需其他版本,编辑 /etc/yum.repos.d/mysql-community.repo 调整
💡 提示:也可用
mysql-community-server替代mysql-server避免冲突。
✅ 方案 B:使用发行版自带源(简单但版本可能旧)
# Ubuntu
sudo apt install mysql-server -y
# CentOS 7(MariaDB 默认,若需 MySQL 请换方案 A)
sudo yum install mysql-server -y
三、启动与服务管理
# 启动服务
sudo systemctl start mysqld # CentOS/RHEL
sudo systemctl start mysql # Ubuntu/Debian
# 设置开机自启
sudo systemctl enable mysqld # 或 mysql
✅ 检查状态:
sudo systemctl status mysqld
四、初始安全设置(关键!)
运行安全脚本(交互式):
sudo mysql_secure_installation
按提示操作:
- [Y/n] 是否启用 validate_password?→ 建议
n(除非有强密码策略需求) - 设置 root 密码 → 务必设强密码
- 删除匿名用户?→
Y - 禁止 root 远程登录?→
Y - 删除 test 库?→
Y - 重载权限表?→
Y
🔐 更安全的做法:手动创建专用管理员账号,而非直接用 root:
sudo mysql -u root -p -- 进入后执行: CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT;⚠️ 注意:
%表示允许任意 IP 连接;生产环境应替换为具体 IP 或内网段(如10.0.0.%)。
五、配置远程访问(可选但需谨慎)
-
修改绑定地址
编辑配置文件:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu sudo nano /etc/my.cnf # CentOS(路径可能不同)找到
[mysqld]部分,注释掉或修改:# bind-address = 127.0.0.1 bind-address = 0.0.0.0 # 监听所有网卡(慎用!) -
重启服务
sudo systemctl restart mysqld -
防火墙放行 3306
sudo ufw allow 3306/tcp # Ubuntu sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload # CentOS -
验证远程连接
从本机或其他机器测试:mysql -h your_server_ip -P 3306 -u admin -p
六、基础优化建议(生产环境)
| 项目 | 建议 |
|---|---|
| 字符集 | 确保 UTF8MB4:[client] + [mysqld] 中加 default-character-set = utf8mb4 |
| 连接数 | 根据业务调整 max_connections(默认 151,高并发可提至 500~1000) |
| 缓冲池 | InnoDB 缓冲池设为物理内存的 50%~70%:innodb_buffer_pool_size = 4G(示例) |
| 慢查询日志 | 开启辅助调优:slow_query_log = 1long_query_time = 2 |
| 备份策略 | 定期 mysqldump 或使用 Percona XtraBackup |
示例 /etc/mysql/conf.d/custom.cnf:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 300
innodb_buffer_pool_size = 2G
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
七、常见问题排查
| 问题 | 解决思路 |
|---|---|
Can't connect to MySQL server |
检查服务状态、防火墙、bind-address、端口监听 (netstat -tlnp | grep 3306) |
Access denied for user 'root'@'localhost' |
尝试 sudo mysql -u root -p 跳过密码;或重置 root 密码 |
| 中文乱码 | 确认客户端、数据库、表字段均为 utf8mb4 |
| 磁盘空间不足 | 清理 binlog:PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY); |
八、进阶建议(生产环境必做)
- ✅ 使用 SSL/TLS 加密连接
- ✅ 启用 审计日志(如 MySQL Enterprise Audit 或第三方工具)
- ✅ 配置 主从复制 实现高可用
- ✅ 使用 监控工具(Prometheus + Grafana + mysqld_exporter)
- ✅ 定期 备份 + 恢复演练
需要我为你提供:
- 📜 自动化部署脚本(Ansible/Bash)
- 🛠️ Docker 方式快速部署 MySQL
- 🔐 如何生成 SSL 证书并启用加密连接
- 📊 常用性能诊断 SQL 命令清单
欢迎告诉我你的具体场景(如:开发测试 / 生产核心库 / 高并发读写),我可进一步定制方案。
云计算导航