mysql在Linux系统上安装步骤_mysql部署实战解析

6次阅读

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

mysql在Linux系统上安装步骤_mysql部署实战解析

如何确认 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-libsmariadb-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

text=ZqhQzanResources