先用 which mysql 和 rpm -qa | grep -i mysql(rpm 系统)或 dpkg -l | grep -i mysql(debian/ubuntu)确认是否安装 mysql 或 mariadb;若返回 mariadb-libs 等需注意兼容性;推荐通过官方源安装 mysql 8.0,服务名为 mysqld,首次启动后必须运行 mysql_secure_installation 并处理临时密码、匿名用户、远程 root、test 库等安全项;连接前检查端口、bind-address、防火墙及 socket 路径,并排查 selinux/apparmor 干扰。

如何确认 Linux 系统已安装 MySQL 或 MariaDB
很多用户直接运行 mysql --version 却得到 command not found,其实是因为系统可能预装了 mariadb(尤其 CentOS 8+/AlmaLinux/RHEL 8+),而它和 MySQL 不完全兼容。先执行:
which mysql和
rpm -qa | grep -i mysql(RPM 系统)或
dpkg -l | grep -i mysql(Debian/Ubuntu)。若返回空,说明未安装;若看到
mariadb-libs 或 mariadb-server,要特别注意后续是否需卸载冲突包。
使用官方 APT/YUM 源安装 MySQL 8.0(推荐方式)
不建议用系统默认源(如 Ubuntu 的 apt install mysql-server 安装的是 MariaDB;CentOS 8+ 默认无 MySQL 包)。应添加 MySQL 官方仓库:
- Ubuntu/Debian:下载
mysql-apt-config_*.deb,用sudo dpkg -i安装后会自动配置源,再sudo apt update && sudo apt install mysql-server - RHEL/CentOS/AlmaLinux:下载
mysql80-community-release-*.rpm,执行sudo rpm -Uvh,然后启用 8.0 仓库:sudo yum-config-manager --enable mysql80-community
(RHEL 8+ 用dnf),最后sudo dnf install mysql-community-server - 关键点:安装后服务名是
mysqld(不是mysql),启动命令为sudo systemctl start mysqld
首次启动后必须执行 mysql_secure_installation
MySQL 8.0 默认生成临时 root 密码,存于 /var/log/mysqld.log 中,用 sudo grep 'temporary password' /var/log/mysqld.log 提取。但仅改密码不够——mysql_secure_installation 会强制处理几个关键风险:
- 移除匿名用户(
root@localhost以外的空用户名) - 禁用远程 root 登录(只保留
root@localhost) - 删除
test数据库及关联权限 - 重载权限表(
FLUSH PRIVILEGES) - 注意:该脚本不修改默认认证插件,MySQL 8.0 默认用
caching_sha2_password,旧客户端连接会报Authentication plugin 'caching_sha2_password' cannot be loaded,需在创建用户时显式指定mysql_native_password
验证端口、防火墙与 socket 连接是否就绪
常见“连不上”问题往往卡在底层通信层:
- 检查 MySQL 是否监听
3306:sudo ss -tlnp | grep :3306
(输出应含mysqld进程) - 若需远程访问,确保
bind-address在/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf中设为0.0.0.0(或注释掉该行),且重启服务 - 开放防火墙:
sudo ufw allow 3306(Ubuntu)或sudo firewall-cmd --permanent --add-port=3306/tcp(RHEL/CentOS) - 本地 socket 连接失败?检查
socket路径是否一致:mysql --socket=/var/lib/mysql/mysql.sock -u root -p,路径以mysqld --verbose --help | grep socket输出为准
配置文件加载顺序、SELinux 策略、AppArmor 限制都可能静默拦截连接,遇到异常先查 journalctl -u mysqld -n 50 --no-pager。










