云服务器上装 MySQL 到底要不要自己编译?
绝大多数情况下,不要自己编译安装。云服务器(如阿里云、腾讯云、AWS)的 Linux 发行版(Ubuntu/CentOS/Debian)都自带稳定、适配好的 MySQL 包,直接用包管理器装更安全、更新有保障、依赖自动处理。
常见误区是看到“最新版”就去官网下 tar.gz 编译——结果可能缺
libaio、
cmake版本不匹配、SELinux 拦截、或启动失败报
Failed to start mysqld.service: Unit not found。 Ubuntu/Debian:用
apt install mysql-server(默认装
mysql-server-8.0) CentOS 8+ / Rocky/AlmaLinux:用
dnf install mysql-serverCentOS 7:官方源已弃用 MySQL,改用
yum install mariadb-server或启用 MySQL 官方 repo 后装
mysql-community-server
装完连不上?检查这三处网络和权限
装完
mysql-server默认只监听
127.0.0.1,且 root 用户默认禁止远程登录——这是云服务器上最常卡住的点。 确认监听地址:
sudo ss -tlnp | grep :3306,若只显示
127.0.0.1:3306,需改
/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)或
/etc/my.cnf(CentOS),把
bind-address改成
0.0.0.0或具体内网 IP 开放云平台安全组:必须在阿里云控制台、腾讯云「安全组」里放行 TCP 3306 端口,仅限可信 IP(比如你办公室 IP),别开 0.0.0.0/0 授权远程用户:
mysql -u root -p进去后执行:
CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'strong_pass'; GRANT ALL ON mydb.* TO 'app'@'192.168.1.%'; FLUSH PRIVILEGES;——别直接给 root 远程权限
MySQL 8.0 默认认证插件导致客户端连不上
Ubuntu 20.04+/CentOS 8+ 装的 MySQL 8.0 默认用
caching_sha2_password插件,但老版本 MySQL Workbench、某些 Python 驱动(如 PyMySQL 0.9 以下)、PHP mysqli 扩展会报错:
Authentication plugin 'caching_sha2_password' cannot be loaded。 临时解决(开发环境):创建用户时指定旧插件:
CREATE USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';长期方案(生产):升级客户端驱动,比如 Python 改用
mysql-connector-python或 PyMySQL ≥1.0,Java 用 mysql-connector-j ≥8.0.23 不建议全局改默认插件(
default_authentication_plugin=mysql_native_password),会削弱密码安全性
云盘 IO 性能差?调这几个关键配置项
云服务器用的通常是网络型云盘(如阿里云 ESSD、腾讯云 CBS),IOPS 和吞吐受规格限制。MySQL 默认配置是为本地 SATA 盘设计的,不调容易写入慢、主从延迟高。
innodb_io_capacity:设为云盘实际 IOPS 的 50%~70%,例如 3000 IOPS 的盘,设
2000
innodb_log_file_size:云盘随机写强,可加大到
512M(需先停库、删旧 log、再启)
innodb_flush_method:云环境推荐
O_DIRECT(绕过系统缓存,避免 double buffer) 别盲目开
query_cache_type=1:MySQL 8.0 已移除,5.7 中在高并发下反而成瓶颈
这些值不是拍脑袋定的,得结合
SHOW ENGINE INNODB STATUS\G里的
Log sequence number增速、
Buffer pool hit rate和云监控里的磁盘 await、util 来调。
