奋斗
努力

新购Linux云服务器后,如何在上面部署MySQL数据库?

云计算

在新购的 Linux 云服务器上部署 MySQL 数据库,推荐使用 MySQL 官方 APT/YUM 仓库安装(推荐)Docker 部署(轻量灵活)。以下以主流 Ubuntu/Debian 和 CentOS/RHEL(8+/9)为例,提供安全、生产就绪的完整步骤(含初始化、防火墙、远程访问配置等):


✅ 前置准备(所有系统均需执行)

  1. 更新系统

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
    
    # CentOS/RHEL 8+/9(使用 dnf)
    sudo dnf update -y
  2. 设置主机名(可选但推荐)

    sudo hostnamectl set-hostname mysql-server
    echo "127.0.0.1 $(hostname)" | sudo tee -a /etc/hosts
  3. 关闭 SELinux(仅 CentOS/RHEL)

    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

🚀 方式一:官方包安装(推荐用于生产环境)

▶️ Ubuntu/Debian(22.04+)

# 1. 下载并添加 MySQL 官方 GPG 密钥和仓库
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb  # 安装时选择 MySQL 8.0(回车→OK)
sudo apt update

# 2. 安装 MySQL Server(自动安装客户端、服务端等)
sudo apt install mysql-server -y

# 3. 启动并设为开机自启
sudo systemctl enable mysql
sudo systemctl start mysql

▶️ CentOS/RHEL 8+/9

# 1. 添加 MySQL 官方 YUM 仓库
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{rhel}')-1.noarch.rpm -y

# 2. 确保启用 MySQL 8.0(禁用其他版本如5.7)
sudo dnf config-manager --disable mysql57-community
sudo dnf config-manager --enable mysql80-community

# 3. 安装
sudo dnf install mysql-community-server -y

# 4. 启动并开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld

💡 提示:首次启动后,MySQL 会自动生成临时 root 密码(Ubuntu/Debian 可跳过;CentOS/RHEL 查看日志):

sudo grep 'temporary password' /var/log/mysqld.log  # RHEL/CentOS
# Ubuntu 默认无临时密码,root 可空密码登录(见下一步初始化)

🔐 步骤二:安全初始化(关键!)

运行交互式安全脚本,设置 root 密码、禁用匿名用户、禁止远程 root 登录等:

sudo mysql_secure_installation

按提示操作(强烈建议):

  • Set password for root → ✅ 设置强密码(如 MyPass@2024!
  • Remove anonymous users? → Y
  • Disallow root login remotely? → Y(后续如需远程,单独授权用户)
  • Remove test database? → Y
  • Reload privilege tables? → Y

✅ 完成后,root 仅可通过本地 socket 登录。


🌐 步骤三:配置远程访问(如需从外部连接)

⚠️ 生产环境请严格限制 IP,勿开放 0.0.0.0/0

1. 修改 MySQL 绑定地址(允许远程连接)

# 编辑配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf    # Ubuntu/Debian
# 或
sudo nano /etc/my.cnf.d/mysql-server.cnf       # CentOS/RHEL 8+

# 找到 bind-address 行,改为:
bind-address = 0.0.0.0   # 或指定内网IP(如 10.0.0.5)
# 保存退出

2. 创建专用远程用户(替代 root 远程登录)

sudo mysql -u root -p

在 MySQL 中执行:

-- 创建用户(替换 'myapp' 和 'StrongPass123!')
CREATE USER 'myapp'@'%' IDENTIFIED BY 'StrongPass123!';
-- 授予必要权限(生产环境请最小权限原则,如只给特定数据库)
GRANT ALL PRIVILEGES ON mydb.* TO 'myapp'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- (可选)限制该用户仅从某IP连接
-- CREATE USER 'myapp'@'192.168.1.100' IDENTIFIED BY '...';

3. 配置云服务器防火墙

# Ubuntu (UFW)
sudo ufw allow OpenSSH
sudo ufw allow 3306
sudo ufw enable

# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

4. 重启 MySQL 生效

sudo systemctl restart mysql   # Ubuntu/Debian
# 或
sudo systemctl restart mysqld  # CentOS/RHEL

✅ 验证部署

  1. 本地连接测试

    mysql -u root -p  # 输入密码
    SELECT VERSION(), USER(), CURRENT_USER();
    EXIT;
  2. 远程连接测试(从本地电脑)

    mysql -h <你的云服务器公网IP> -u myapp -p
  3. 检查监听状态

    ss -tlnp | grep :3306
    # 应显示 0.0.0.0:3306 或 [::]:3306

🐳 方式二:Docker 快速部署(开发/测试首选)

# 1. 安装 Docker(略,参考官网)
# 2. 拉取并运行 MySQL 8.0(持久化数据卷)
docker run -d 
  --name mysql-prod 
  -p 3306:3306 
  -e MYSQL_ROOT_PASSWORD=MyRootPass123 
  -e MYSQL_DATABASE=myappdb 
  -e MYSQL_USER=myuser 
  -e MYSQL_PASSWORD=mypass123 
  -v /opt/mysql/data:/var/lib/mysql 
  -v /opt/mysql/conf:/etc/mysql/conf.d 
  --restart=unless-stopped 
  -d mysql:8.0

# 连接:mysql -h 127.0.0.1 -P 3306 -u myuser -p

✅ 优势:隔离性好、升级方便、无需污染系统;⚠️ 注意:生产环境需配置备份、监控、资源限制。


🛡️ 安全加固建议(生产必做)

  • ✅ 使用强密码 + 定期轮换
  • ✅ 禁用 local_infile(防止文件读取攻击):
    SET GLOBAL local_infile = OFF;
    # 并在 /etc/mysql/my.cnf 中 [mysqld] 下添加:
    # local_infile = OFF
  • ✅ 启用 MySQL 8.0+ 默认加密(default_authentication_plugin = caching_sha2_password
  • ✅ 配置慢查询日志 & 错误日志审计
  • ✅ 使用 TLS 加密远程连接(生成证书后配置 require_secure_transport=ON
  • ✅ 定期备份(mysqldumpmysqlpump + cron + 对象存储)

📚 附:常用命令速查

功能 命令
查看状态 sudo systemctl status mysql
日志位置 /var/log/mysql/error.log(Ubuntu)或 /var/log/mysqld.log(RHEL)
备份数据库 mysqldump -u root -p mydb > mydb_backup.sql
恢复数据库 mysql -u root -p mydb < mydb_backup.sql
修改 root 密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';

如需进一步帮助,可告知:

  • 你的具体 Linux 发行版及版本(如 cat /etc/os-release
  • 是否需要主从复制、读写分离、高可用(MHA/InnoDB Cluster)
  • 是否集成监控(Prometheus + Grafana)或备份方案

我可以为你定制完整脚本或 Ansible Playbook 👨‍💻

需要我帮你生成 一键部署脚本Docker Compose 文件 吗? 😊

未经允许不得转载:云服务器 » 新购Linux云服务器后,如何在上面部署MySQL数据库?