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

直接在主流 Linux 服务器(如 CentOS 8+/Rocky 9、Ubuntu 22.04+)上部署 MySQL,mysql-server 包已不再默认提供 —— 官方推荐用 mysql-community-server(Oracle 官方源)或 mariadb-server(系统默认替代),硬装旧版 mysql-server 会触发依赖冲突或仓库不可用错误。
确认系统自带的 MySQL 替代方案
现代发行版基本移除了 Oracle MySQL 官方包,改用 MariaDB 兼容实现:
- Ubuntu/Debian:
apt list --installed | grep mysql通常只返回mariadb-client、mariadb-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-server 后 systemctl 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,确认没其他mysqld或mysqld_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。










