在Linux服务器上如何搭建MySQL数据库服务?

在 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();

五、(可选)允许远程连接

⚠️ 仅在内网可信环境或配合防火墙策略时使用!

  1. 编辑配置文件:
# 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,通过防火墙放行特定端口
  1. 重启服务:
sudo systemctl restart mysql   # 或 mysqld
  1. 开放防火墙端口(如使用 firewalld/ufw):
# UFW (Ubuntu)
sudo ufw allow 3306/tcp

# Firewalld (CentOS)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
  1. 创建可远程登录的用户(已在前面示例中演示):
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 = utf8mb4
character-set-server = utf8mb4

七、后续建议

  • ✅ 配置自动备份(如 mysqldump + cron)
  • ✅ 启用慢查询日志监控性能
  • ✅ 使用 pt-heartbeatMHA 做高可用(生产级)
  • ✅ 考虑容器化部署(Docker + official MySQL image)

需要我提供:

  • Docker 快速部署脚本?
  • 自动化安装 Shell 脚本?
  • 高可用(主从复制)配置指南?

欢迎告诉我你的具体需求 😊

未经允许不得转载:CLOUD云枢 » 在Linux服务器上如何搭建MySQL数据库服务?