




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

mysql-server 包已不再默认提供 —— 官方推荐用 mysql-community-server(Oracle 官方源)或 mariadb-server(系统默认替代),硬装旧版 mysql-server 会触发依赖冲突或仓库不可用错误。
现代发行版基本移除了 Oracle MySQL 官方包,改用 MariaDB 兼容实现:
apt list --installed | grep mysql 通常只返回 mariadb-client、mariadb-server
dnf module list mysql 显示的是 mariadb 模块,mysql 模块状态为 disabled 或不存在mysqld --version 很可能报错,因为真正服务名是 mysqld(MariaDB)或未安装若明确需要 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
/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。