最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在AWS EC2上安装和配置MySQL?
时间:2026-09-01 20:13:48 编辑:袖梨 来源:一聚教程网
最新二进制包安装最稳妥,因yum/apt安装常默认部署MariaDB或旧版MySQL,无法指定8.0.34等精确版本,且存在认证插件(caching_sha2_password)、密码策略、配置路径及数据目录结构不一致问题,导致客户端连接失败、权限混乱和升级迁移困难。
直接装最新二进制包最稳妥,别用系统包管理器(yum install mysql-server 或 apt-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 以下。关键问题是:
-
mysql_native_password插件默认不启用,导致客户端连接报ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded - 初始化后 root 密码不输出到终端,而是写进
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行
my.cnf 关键配置项不能漏
尤其注意这几个易错点,缺一不可:
-
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'@'%'; —— 光开安全组不授权,连通性测试永远超时。