在 Linux 服务器上搭建 MySQL 数据库服务,通常分为以下步骤(以 Ubuntu/Debian 和 CentOS/RHEL 为例):
一、更新系统并安装必要工具
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
# CentOS/RHEL (需启用 EPEL 或使用官方源)
sudo yum update -y
二、安装 MySQL
方式 A:使用包管理器安装(推荐,适合生产环境快速部署)
✅ Ubuntu/Debian(Ubuntu 20.04+ 默认含 MariaDB,若需 MySQL 请添加官方源)
# 安装 MySQL Server(Ubuntu 20.04+ 可能默认是 MariaDB,如需 MySQL 8.0+ 建议用官方 APT 源)
sudo apt install mysql-server -y
# 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
# 安全初始化(设置 root 密码等)
sudo mysql_secure_installation
⚠️ 注意:Ubuntu 20.04/22.04 默认
mysql-server包可能是 MariaDB。如需 MySQL 官方版本,请改用以下方式:
安装 MySQL 8.0 官方源(Ubuntu)
# 下载 MySQL APT 配置包
wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
# 在弹出界面中选择 MySQL Server 8.0(按 Tab 选择,Enter 确认)
sudo apt update
sudo apt install mysql-server -y
sudo systemctl start mysql
sudo systemctl enable mysql
✅ CentOS/RHEL / AlmaLinux / Rocky Linux
# 安装 MySQL YUM 仓库
sudo yum install -y https://repo.mysql.com/mysql80-community-release-el9.x86_64.rpm
# (el9 对应 RHEL/CentOS 9;el8 对应 8;请根据实际版本调整)
# 安装 MySQL Server
sudo yum install -y mysql-server
# 启动并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 获取临时 root 密码
sudo grep 'temporary password' /var/log/mysqld.log
三、安全加固与初始配置
运行安全脚本(可选但强烈推荐):
# Ubuntu/Debian
sudo mysql_secure_installation
# CentOS/RHEL(无交互式脚本,需手动操作)
sudo mysql -u root -p
进入 MySQL 后执行以下 SQL(示例):
-- 修改 root 密码(MySQL 8.0+ 要求强密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
-- 删除匿名用户
DROP USER ''@'localhost';
DROP USER ''@'%';
-- 禁止 root 远程登录(除非明确需要)
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- 创建专用管理用户(推荐)
CREATE USER 'admin'@'%' IDENTIFIED BY 'AdminPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
🔐 生产环境建议:
- 禁用
root远程登录- 使用最小权限原则分配用户
- 定期备份 + 开启二进制日志(binlog)
四、验证安装是否成功
# 检查服务状态
systemctl status mysql # Debian/Ubuntu
systemctl status mysqld # CentOS/RHEL
# 登录测试
mysql -u root -p
# 输入密码后应能进入 MySQL 命令行
# 查看版本
mysql --version
# 或在 MySQL 内执行:
SELECT VERSION();
五、(可选)允许远程连接
⚠️ 仅在内网可信环境或配合防火墙策略时使用!
- 编辑配置文件:
# Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf
# CentOS: /etc/my.cnf 或 /etc/my.cnf.d/server.cnf
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # 路径可能略有差异
找到 [mysqld] 部分,确保注释掉或修改:
bind-address = 0.0.0.0 # 默认是 127.0.0.1,改为 0.0.0.0 允许所有 IP
# 或保留 127.0.0.1,通过防火墙放行特定端口
- 重启服务:
sudo systemctl restart mysql # 或 mysqld
- 开放防火墙端口(如使用 firewalld/ufw):
# UFW (Ubuntu)
sudo ufw allow 3306/tcp
# Firewalld (CentOS)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
- 创建可远程登录的用户(已在前面示例中演示):
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123!';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
六、常见问题排查
| 问题 | 解决方案 |
|---|---|
| 无法启动服务 | 检查日志:journalctl -u mysql 或 /var/log/mysql/error.log |
| 忘记 root 密码 | 跳过授权表启动:mysqld_safe --skip-grant-tables & → 重置密码 |
| 连接被拒绝 | 检查 bind-address、防火墙、用户主机权限(Host 字段) |
| 字符集乱码 | 在 [client] 和 [mysqld] 中添加:default-character-set = utf8mb4character-set-server = utf8mb4 |
七、后续建议
- ✅ 配置自动备份(如
mysqldump+ cron) - ✅ 启用慢查询日志监控性能
- ✅ 使用
pt-heartbeat或MHA做高可用(生产级) - ✅ 考虑容器化部署(Docker + official MySQL image)
需要我提供:
- Docker 快速部署脚本?
- 自动化安装 Shell 脚本?
- 高可用(主从复制)配置指南?
欢迎告诉我你的具体需求 😊
CLOUD云枢