如何在linux服务器搭建mysql环境_mysql部署步骤详解

7次阅读

主流linux发行版已用mariadb替代oracle mysql,需手动添加官方源安装mysql-community-server;启动失败多因SELinux、权限或端口冲突;初始化后须改密、加固并配置防火墙与bind-address。

如何在linux服务器搭建mysql环境_mysql部署步骤详解

直接在主流 Linux 服务器(如 centos 8+/Rocky 9、ubuntu 22.04+)上部署 MySQL,mysql-server 包已不再默认提供 —— 官方推荐用 mysql-community-server(Oracle 官方源)或 mariadb-server(系统默认替代),硬装旧版 mysql-server 会触发依赖冲突或仓库不可用错误。

确认系统自带的 MySQL 替代方案

现代发行版基本移除了 Oracle MySQL 官方包,改用 MariaDB 兼容实现:

  • Ubuntu/debianapt list --installed | grep mysql 通常只返回 mariadb-clientmariadb-server
  • RHEL/CentOS/Rocky:dnf module list mysql 显示的是 mariadb 模块,mysql 模块状态为 disabled 或不存在
  • 运行 mysqld --version 很可能报错,因为真正服务名是 mysqld(MariaDB)或未安装

装 Oracle MySQL 官方版(需手动加 repo)

若明确需要 Oracle MySQL(比如依赖 mysql_native_password 插件、特定复制特性),必须添加官方 YUM/APT 源:

  • 下载对应平台的 mysql80-community-release 包(如 mysql80-community-release-el9-1.noarch.rpm
  • 执行 sudo dnf install ./mysql80-community-release-el9-1.noarch.rpm(RHEL 系)
  • 禁用默认模块:sudo dnf module reset mysql && sudo dnf module enable mysql:8.0
  • 安装:sudo dnf install mysql-community-server
  • 启动前先初始化:sudo mysqld --initialize --user=mysql(日志里会输出临时 root 密码)

启动失败常见原因和修复

装完 mysql-community-serversystemctl start mysqld 报错,大概率是 SELinux 或目录权限问题:

  • Failed to start mysqld.service: Unit not found → 检查是否装的是 mysql-community-server 而非 mysql-server,服务名始终是 mysqld
  • Can't find Error-message file '/usr/share/mysql-8.0/english/errmsg.sys' → 缺少语言包,装 mysql-community-client-plugins
  • SELinux 拒绝访问 /var/lib/mysql → 临时关 SELinux 测试:sudo setenforce 0;长期方案是恢复上下文:sudo restorecon -Rv /var/lib/mysql
  • 端口被占用(Address already in use)→ 查 sudo ss -tlnp | grep :3306,确认没其他 mysqldmysqld_safe 进程残留

首次登录与安全加固

初始化后 root 密码在 /var/log/mysqld.log 里,用它登录后必须立刻改密并删匿名用户:

mysql -u root -p # 输入临时密码后执行: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!'; DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;

别跳过 mysql_secure_installation —— 它自动处理密码强度、远程 root、test 库等,但注意:该脚本在 MySQL 8.0+ 默认禁用 unix_socket 认证,如果之前用 socket 登录过,运行时会提示切换认证方式,选 y 即可。

真实部署中,最容易被忽略的是防火墙放行和 bind-address 配置:CentOS 的 firewalld 默认不放行 3306,Ubuntu 的 ufw 默认拒绝所有入站;而 my.cnf 里的 bind-address = 127.0.0.1 会彻底禁止远程连接,改 0.0.0.0 前务必配好用户权限和网络 ACL。

text=ZqhQzanResources