mysql云服务器部署需清理冲突服务、用官方源安装、调整内存与安全配置、初始化强密码并限制访问权限,否则易崩溃或被攻击。

能直接跑起来,但默认配置在云上大概率扛不住真实流量——必须调参数、关危险项、配网络权限,否则不是连不上,就是半夜OOM挂掉。
检查并清理残留的 MariaDB/MySQL
CentOS/RHEL 系统自带 mariadb,和 MySQL 冲突。不清理就装,mysqld 启动会失败或端口被占。
- 先查进程:
ps aux | grep -i mysql或ps aux | grep mariadb - 停服务:
sudo systemctl stop mariadb(或mysql) - 卸载包:
sudo yum remove mariadb* mysql*(CentOS);sudo apt purge mysql-server mariadb-server(Ubuntu) - 删残留:
sudo rm -rf /var/lib/mysql /etc/my.cnf(备份好再删)
用官方 YUM/Apt 源安装 MySQL 8.0+
别下 tar 包手动编译,云服务器上没那个必要,也容易漏依赖。YUM/Apt 装的版本带 systemd 集成、日志路径规范、自动创建 mysql 用户,省心且安全。
- CentOS 7/8:
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm,再sudo yum install -y mysql-community-server - Ubuntu 20.04+:
curl -fsSL https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb > mysql-apt.deb && sudo dpkg -i mysql-apt.deb(选 8.0),再sudo apt update && sudo apt install -y mysql-server - 装完别急着启动——先确认
/var/lib/mysql所在磁盘是 SSD 云盘,不是系统盘(尤其轻量服务器,默认盘 IOPS 差一个数量级)
启动前必须改的三处配置
云服务器内存有限,MySQL 默认 innodb_buffer_pool_size 是 128MB,但实际应设为可用内存的 50%–70%;另外默认允许 root 远程登录、没开慢查询日志,生产环境等于裸奔。
- 编辑
/etc/my.cnf,在[mysqld]下加:innodb_buffer_pool_size = 1536M bind-address = 0.0.0.0 skip-log-bin slow_query_log = 1 long_query_time = 2
-
bind-address = 0.0.0.0是为了允许远程连接,但必须配合安全组白名单——不能只靠这行 -
skip-log-bin关二进制日志(除非你要主从复制),减少写放大和磁盘压力 - 改完执行
sudo systemctl daemon-reload,再sudo systemctl start mysqld
获取初始密码并加固账户
MySQL 5.7+ 启动后会生成临时 root 密码,藏在日志里。不改密码,任何客户端都连不上;不建专用用户,应用直连 root 就是高危操作。
- 查密码:
sudo grep 'temporary password' /var/log/mysqld.log(CentOS)或sudo grep 'temporary password' /var/log/mysql/error.log(Ubuntu) - 登录:
mysql -u root -p,粘贴临时密码 - 立刻改密:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass123!'; - 建应用用户(示例):
CREATE USER 'app'@'%' IDENTIFIED BY 'AppPass456!'; GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'app'@'%'; FLUSH PRIVILEGES; - 安全组只放行你应用服务器的内网 IP 段(如
10.0.1.0/24),别开0.0.0.0/0
真正麻烦的不是装,是后续:磁盘空间突然爆满(没设 expire_logs_days)、连接数打满(max_connections 默认 151,不够用)、或者备份脚本没配 crontab 导致数据丢了才想起没做——这些都在第一次重启后就该盯住。











