在腾讯云轻量应用服务器(Lighthouse)上部署 MySQL 8.0,核心难点其实不在于安装本身,而在于内存管理。
轻量服务器的配置通常比较“紧凑”(比如 1核2G 或 2核4G),而 MySQL 8.0 默认的资源占用比 MySQL 5.7 高很多。如果直接按默认配置启动,很容易因为 OOM(Out Of Memory)导致服务崩溃,甚至拖垮整个系统。
下面是一套经过验证的、适合国内轻量服务器环境的实操方案。
第一步:环境准备与依赖安装
首先登录 SSH,建议先更新一下源,确保软件包列表是最新的。
sudo apt update
sudo apt upgrade -y
接着安装必要的工具包。虽然 Ubuntu 20.04/22.04 默认可能包含较新版本的 MySQL,但为了稳定性和兼容性,我们直接使用官方 APT 仓库来安装 MySQL 8.0。
# 安装 wget 和 curl(如果还没有的话)
sudo apt install wget curl -y
# 下载 MySQL 官方的 APT 配置文件
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
# 执行安装,此时会弹出一个交互界面
# 选择 "Ubuntu Focal" (如果是 20.04) 或 "Ubuntu Jammy" (如果是 22.04)
# 确保只勾选 "MySQL Server & Cluster",其他可以取消
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
# 再次更新源,以获取 MySQL 8.0 的最新包
sudo apt update
开始安装 MySQL 服务端:
sudo apt install mysql-server -y
安装过程中,你会被要求设置 root 用户的密码。请务必记住这个密码,这是后续所有操作的基础。
第二步:关键优化——防止内存溢出
这是最重要的一步。MySQL 8.0 默认的 innodb_buffer_pool_size 对于小内存服务器来说太大了。我们需要手动调整 /etc/mysql/mysql.conf.d/mysqld.cnf 文件。
打开配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到 [mysqld] 部分,添加或修改以下参数。假设你的服务器是 2GB 内存,建议配置如下:
[mysqld]
# 绑定本地地址,安全起见
bind-address = 127.0.0.1
# 字符集设置,推荐 utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 性能优化关键参数
# innodb_buffer_pool_size: 缓冲池大小。
# 对于 2GB 内存服务器,建议设置为 512M 到 1G 之间。
# 如果内存只有 1GB,建议设为 256M 或 384M。
innodb_buffer_pool_size = 512M
# 日志相关,关闭不必要的详细日志以提升性能
log_error = /var/log/mysql/error.log
# 最大连接数,根据业务需求调整,轻量服务器建议保守一点
max_connections = 100
# 临时目录权限修复(常见坑点)
tmpdir = /tmp
注意:如果你使用的是 4GB 或更高内存的实例,可以将
innodb_buffer_pool_size调整为物理内存的 50%-70%。
保存并退出(在 Nano 编辑器中,按 Ctrl+O 保存,Enter 确认,Ctrl+X 退出)。
第三步:解决权限与启动问题
由于轻量服务器通常是非 root 用户通过 sudo 操作,有时会遇到权限问题。确保 MySQL 数据目录权限正确:
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql
现在尝试启动 MySQL 服务:
sudo systemctl start mysql
检查状态是否正常:
sudo systemctl status mysql
如果看到 active (running),说明启动成功。如果报错,请查看 /var/log/mysql/error.log 排查具体原因(通常是配置文件语法错误或磁盘空间不足)。
第四步:设置开机自启
这一步非常简单,Systemd 已经处理好了大部分逻辑,但我们显式地启用它以确保万无一失:
sudo systemctl enable mysql
你可以验证一下是否已设置为开机自启:
systemctl is-enabled mysql
# 输出应为:enabled
第五步:远程访问配置(可选但重要)
腾讯云轻量服务器默认防火墙是开启的,且 MySQL 默认只监听 localhost。如果你需要从本地电脑或其他服务器连接数据库,需要进行两步操作:
-
修改 MySQL 监听地址:
编辑/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address = 127.0.0.1改为:bind-address = 0.0.0.0然后重启 MySQL:
sudo systemctl restart mysql -
创建允许远程连接的用户:
登录 MySQL:sudo mysql -u root -p在 MySQL 命令行中执行:
-- 创建新用户(推荐不要直接用 root 远程登录) CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_strong_password'; -- 授予权限 GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES; -- 退出 EXIT; -
配置腾讯云轻量应用服务器防火墙:
登录腾讯云控制台 -> 轻量应用服务器 -> 防火墙 -> 添加入站规则:- 协议:TCP
- 端口:3306
- 授权对象:0.0.0.0/0 (或者指定你的 IP 段,更安全)
常见问题排查
-
Q: 启动失败,提示 "Job for mysql.service failed because the control process exited with error code."
- A: 90% 的情况是内存不足。检查
free -m,如果 Swap 没开,考虑增加 Swap 分区。轻量服务器没有 Swap 时,MySQL 很容易在启动瞬间耗尽内存。 - 增加 Swap 示例:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效需添加到 /etc/fstab echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
- A: 90% 的情况是内存不足。检查
-
Q: 如何重置 root 密码?
- A: 如果忘记密码,可以通过跳过权限表的方式重置:
- 停止 MySQL:
sudo systemctl stop mysql - 以跳过权限方式启动:
sudo mysqld_safe --skip-grant-tables & - 无密码登录:
mysql -u root - 执行:
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root'; FLUSH PRIVILEGES; - 重启 MySQL 恢复正常模式。
- 停止 MySQL:
- A: 如果忘记密码,可以通过跳过权限表的方式重置:
这套流程涵盖了从安装、优化、自启到远程访问的完整闭环,特别适合在国内云厂商的轻量服务器上稳定运行 MySQL 8.0。
云技术博客