如何在AWS EC2上安装和配置MySQL?

作者:袖梨 2026-09-01

最新二进制包安装最稳妥,因yum/apt安装常默认部署MariaDB或旧版MySQL,无法指定8.0.34等精确版本,且存在认证插件(caching_sha2_password)、密码策略、配置路径及数据目录结构不一致问题,导致客户端连接失败、权限混乱和升级迁移困难。

直接装最新二进制包最稳妥,别用系统包管理器(yum install mysql-serverapt-get install mysql-server)——它默认装的是 MariaDB 或旧版 MySQL,且无法指定 8.0.34 这类精确版本,后续权限、密码策略、插件兼容性全会出问题。

为什么不能用 yum install mysql-server?

Amazon Linux 2024 / CentOS Stream / RHEL 系统里,yum install mysql-server 实际安装的是 mariadb-server;Ubuntu/Debian 则可能装 mysql-client + mysql-server,但版本常卡在 5.7 或 8.0.33 以下。关键问题是:

  1. mysql_native_password 插件默认不启用,导致客户端连接报 ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
  2. 初始化后 root 密码不输出到终端,而是写进 error.log,你根本找不到
  3. 配置文件路径、服务名、数据目录结构全和最新二进制包不一致,后续升级或迁移极难对齐

必须用最新二进制包:下载、解压、初始化三步

以 Amazon Linux 2024 为例,完整流程如下(路径统一用 /data/mysql8/3308):

  1. 执行 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz 下载,别用镜像站,避免校验失败
  2. 解压后立即 chown -R mysql:mysql /data/mysql8/3308,否则 mysqld --initialize 会因权限拒绝失败
  3. 初始化命令必须带 --user=mysql 和明确 --datadir

    ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql8/3308/data --basedir=/data/mysql8/3308/mysql

  4. 初始化成功后,临时密码在 /data/mysql8/3308/data/error.log 最末尾,搜 A temporary password

my.cnf 关键配置项不能漏

尤其注意这几个易错点,缺一不可:

  1. default_authentication_plugin=mysql_native_password —— 不加这行,新用户连不上;caching_sha2_password 在多数 PHP/Python 客户端里仍需额外配置才能用
  2. character-set-server=utf8mb4 + collation-server=utf8mb4_0900_ai_ci —— utf8 是 MySQL 的陷阱别名,实际只支持 3 字节,存 emoji 必崩
  3. bind-address=0.0.0.0 或具体内网 IP(如 172.31.16.10),不能留空或写 127.0.0.1,否则 EC2 内其他服务(如 SpringBoot)连不上
  4. max_allowed_packet=1G 要显式设大,否则 mysqldump 导出大表直接中断,错误是 Packets larger than max_allowed_packet bytes are not allowed

启动失败常见原因和验证方式

运行 ./bin/mysqld_safe --defaults-file=/data/mysql8/3308/my_3308.cnf & 后,立刻查三处:

  1. 看进程:ps aux | grep mysqld —— 没进程说明启动被拒,十有八九是 datadir 权限不对或 pid-file 路径不可写
  2. 看错误日志:tail -50 /data/mysql8/3308/mysqldb-general.err —— 出现 Can't start server: Bind on TCP/IP port 就是端口被占;出现 Table 'mysql.plugin' doesn't exist 是初始化没跑完就启了
  3. 本地连通性:./bin/mysql -u root -p -S /data/mysql8/3308/mysql.sock —— 成功登录后立刻执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_pass'; FLUSH PRIVILEGES;

EC2 安全组必须放行 3308(或你配的端口),且数据库用户要显式授权远程访问:CREATE USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'pass'; GRANT ALL ON *.* TO 'app'@'%'; —— 光开安全组不授权,连通性测试永远超时。

相关文章

精彩推荐