最新二进制包安装最稳妥,因yum/apt安装常默认部署MariaDB或旧版MySQL,无法指定8.0.34等精确版本,且存在认证插件(caching_sha2_password)、密码策略、配置路径及数据目录结构不一致问题,导致客户端连接失败、权限混乱和升级迁移困难。
直接装最新二进制包最稳妥,别用系统包管理器(yum install mysql-server 或 apt-get install mysql-server)——它默认装的是 MariaDB 或旧版 MySQL,且无法指定 8.0.34 这类精确版本,后续权限、密码策略、插件兼容性全会出问题。
Amazon Linux 2024 / CentOS Stream / RHEL 系统里,yum install mysql-server 实际安装的是 mariadb-server;Ubuntu/Debian 则可能装 mysql-client + mysql-server,但版本常卡在 5.7 或 8.0.33 以下。关键问题是:
mysql_native_password 插件默认不启用,导致客户端连接报 ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
error.log,你根本找不到以 Amazon Linux 2024 为例,完整流程如下(路径统一用 /data/mysql8/3308):
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz 下载,别用镜像站,避免校验失败chown -R mysql:mysql /data/mysql8/3308,否则 mysqld --initialize 会因权限拒绝失败--user=mysql 和明确 --datadir:./bin/mysqld --initialize --user=mysql --datadir=/data/mysql8/3308/data --basedir=/data/mysql8/3308/mysql
/data/mysql8/3308/data/error.log 最末尾,搜 A temporary password 行尤其注意这几个易错点,缺一不可:
default_authentication_plugin=mysql_native_password —— 不加这行,新用户连不上;caching_sha2_password 在多数 PHP/Python 客户端里仍需额外配置才能用character-set-server=utf8mb4 + collation-server=utf8mb4_0900_ai_ci —— utf8 是 MySQL 的陷阱别名,实际只支持 3 字节,存 emoji 必崩bind-address=0.0.0.0 或具体内网 IP(如 172.31.16.10),不能留空或写 127.0.0.1,否则 EC2 内其他服务(如 SpringBoot)连不上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 & 后,立刻查三处:
ps aux | grep mysqld —— 没进程说明启动被拒,十有八九是 datadir 权限不对或 pid-file 路径不可写tail -50 /data/mysql8/3308/mysqldb-general.err —— 出现 Can't start server: Bind on TCP/IP port 就是端口被占;出现 Table 'mysql.plugin' doesn't exist 是初始化没跑完就启了./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'@'%'; —— 光开安全组不授权,连通性测试永远超时。