mysql如何在Linux上安装_mysql环境配置详细步骤

来源:这里教程网 时间:2026-02-28 20:48:51 作者:

直接用包管理器安装 MySQL 8.0(推荐)

绝大多数 Linux 发行版的官方仓库已提供 MySQL 8.0,无需手动编译或下载二进制包。Debian/Ubuntu 用

apt
,CentOS/RHEL 8+ 用
dnf
,RHEL 7 用
yum
。安装后服务默认不启动,也不设 root 密码——这是 MySQL 8.0 的安全默认行为。

Ubuntu/Debian:
sudo apt update && sudo apt install mysql-server
CentOS 8+/AlmaLinux/Rocky Linux:
sudo dnf install @mysql
RHEL/CentOS 7:
sudo yum install mysql-community-server
(需先启用 MySQL 官方 repo)

注意:不要混用不同源(比如同时启用 MariaDB repo 和 MySQL repo),否则可能因依赖冲突导致

systemctl start mysqld
失败并报
Failed to start mysqld.service: Unit not found

初始化 root 密码与验证插件选择

MySQL 8.0 默认使用

caching_sha2_password
插件,但部分旧客户端(如某些 PHP PDO 驱动、Navicat 旧版本)不兼容,连接时会报错
Authentication plugin 'caching_sha2_password' cannot be loaded
。首次启动后必须运行
sudo mysql_secure_installation
,它会引导你设置 root 密码、禁用匿名用户、禁止远程 root 登录等。

若需兼容老客户端,可在初始化后执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
密码强度策略由
validate_password
组件控制,默认要求至少 8 位、含大小写字母+数字+特殊字符;临时关闭可执行:
UNINSTALL COMPONENT "file://component_validate_password";
(不建议生产环境关闭)

配置文件 my.cnf 的常见修改位置与权限问题

MySQL 启动时按顺序读取多个配置文件,优先级从高到低为:

/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf
。实际生效的是第一个存在且可读的文件。修改后必须重启服务:
sudo systemctl restart mysql
(Ubuntu/Debian)或
sudo systemctl restart mysqld
(RHEL/CentOS)。

绑定地址默认是
127.0.0.1
,如需监听外网,改
bind-address = 0.0.0.0
,但必须配合防火墙(
ufw
firewalld
)放行 3306 端口
中文支持需在
[mysqld]
段落添加:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
;同时在
[client]
段落加
default-character-set = utf8mb4
配置文件权限必须为 644,且属主不能是普通用户(否则 MySQL 启动时拒绝读取并静默失败)

验证安装与常见连接失败排查

运行

sudo mysql -u root -p
是最直接的验证方式。如果提示
Access denied for user 'root'@'localhost'
,说明
mysql_secure_installation
未执行或密码输错;若提示
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
,先检查服务状态:
systemctl status mysql
systemctl status mysqld
,常见原因是磁盘满、
/var/lib/mysql
权限被误改、或配置文件语法错误(如多了一个逗号)。

查看错误日志最快路径:
sudo tail -n 50 /var/log/mysql/error.log
(Ubuntu)或
sudo tail -n 50 /var/log/mysqld.log
(RHEL)
socket 路径不一致时,可用
mysql --socket=/path/to/mysql.sock -u root -p
显式指定
忘记 root 密码?需跳过权限表启动:
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
,再连入重置,但操作期间数据库无访问控制

配置里最容易被忽略的是 SELinux(RHEL/CentOS)和 AppArmor(Ubuntu)。即使端口开放、配置正确,它们也可能拦截 mysqld 对数据目录或 socket 文件的访问,错误日志中会出现

Permission denied
但不提示 SELinux。临时关闭验证可用:
sudo setenforce 0
(RHEL)或
sudo aa-disable /usr/sbin/mysqld
(Ubuntu)。

相关推荐