1. 为什么选择Ubuntu + MySQL组合
在Linux发行版中部署数据库服务时,Ubuntu和MySQL的组合堪称经典配置。作为长期维护的LTS版本,Ubuntu Server提供了稳定的运行环境,而MySQL 8.0作为最流行的开源关系型数据库,二者结合既能满足开发测试需求,也经得起生产环境考验。
我曾在多个项目中使用该组合,相比Windows平台,其性能表现可提升20%-30%。特别是在高并发场景下,Ubuntu的线程调度机制与MySQL的InnoDB引擎配合更为高效。最新版的Ubuntu 22.04 LTS默认仓库已包含MySQL 8.0,但通过官方仓库安装能获得更及时的补丁更新。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的系统准备
2.1 硬件资源检查
建议生产环境至少配置:
- 2核CPU
- 4GB内存
- 50GB存储空间
运行free -h和df -h确认资源情况。我曾遇到一个案例:开发机内存不足导致MySQL频繁OOM崩溃,添加swap分区后问题解决。
2.2 依赖环境配置
更新软件包索引并升级现有包:
bash复制sudo apt update && sudo apt upgrade -y
安装基础依赖库:
bash复制sudo apt install -y gnupg2 wget lsb-release
注意:Ubuntu 22.04默认使用OpenSSL 3.0,与某些老版本MySQL客户端存在兼容性问题,建议统一使用MySQL 8.0+版本。
3. 官方仓库安装MySQL 8.0
3.1 添加MySQL APT仓库
下载官方仓库配置:
bash复制wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
安装配置包(交互界面选择MySQL 8.0):
bash复制sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
sudo apt update
3.2 执行核心安装
安装MySQL服务器包:
bash复制sudo apt install -y mysql-server
安装过程会提示设置root密码。建议使用强密码组合(至少12位,含大小写字母、数字和特殊字符)。我曾见证过因弱密码导致的数据库入侵事件。
4. 安全加固与初始化配置
4.1 运行安全脚本
执行内置安全向导:
bash复制sudo mysql_secure_installation
按序完成以下设置:
- 验证密码强度插件
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 立即重载权限表
4.2 关键配置文件调整
编辑主配置文件:
bash复制sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
建议修改的核心参数:
ini复制[mysqld]
bind-address = 127.0.0.1 # 生产环境应改为服务器内网IP
max_connections = 200 # 根据业务需求调整
innodb_buffer_pool_size = 1G # 建议为物理内存的50-70%
重启服务生效:
bash复制sudo systemctl restart mysql
5. 用户权限管理与连接测试
5.1 创建应用专用用户
使用root登录MySQL:
bash复制sudo mysql -u root -p
执行用户创建命令:
sql复制CREATE USER 'appuser'@'%' IDENTIFIED BY 'Strong@Pass123';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
重要:生产环境应遵循最小权限原则,精确控制用户权限范围。
5.2 远程连接验证
安装MySQL客户端工具:
bash复制sudo apt install -y mysql-client
测试连接:
bash复制mysql -h 服务器IP -u appuser -p
成功连接后,可执行基础SQL验证:
sql复制SHOW DATABASES;
6. 性能优化与监控配置
6.1 安装性能监控插件
在MySQL中执行:
sql复制INSTALL PLUGIN sys SONAME 'sys.so';
使用系统视图查看性能指标:
sql复制SELECT * FROM sys.memory_global_total;
6.2 配置慢查询日志
编辑配置文件:
ini复制slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
分析慢查询日志:
bash复制sudo mysqldumpslow -s t /var/log/mysql/mysql-slow.log
7. 常见问题排查指南
7.1 服务启动失败排查
查看MySQL错误日志:
bash复制sudo tail -n 50 /var/log/mysql/error.log
常见错误解决方案:
- 端口冲突:检查3306端口占用
sudo netstat -tulnp | grep 3306 - 权限问题:
sudo chown -R mysql:mysql /var/lib/mysql
7.2 连接数不足处理
临时增加连接数:
sql复制SET GLOBAL max_connections = 300;
永久生效需修改配置文件并重启服务。
8. 备份与恢复方案
8.1 使用mysqldump备份
全库备份:
bash复制sudo mysqldump -u root -p --all-databases > full_backup.sql
单库备份:
bash复制sudo mysqldump -u root -p appdb > appdb_backup.sql
8.2 定时自动备份
创建备份脚本/usr/local/bin/mysql_backup.sh:
bash复制#!/bin/bash
mysqldump -u root -p密码 appdb | gzip > /backups/appdb_$(date +%F).sql.gz
设置cron任务:
bash复制0 2 * * * /usr/local/bin/mysql_backup.sh
9. 版本升级与迁移方案
9.1 小版本升级
通过APT直接升级:
bash复制sudo apt update
sudo apt install --only-upgrade mysql-server
9.2 大版本迁移
建议采用逻辑备份迁移:
- 旧版导出数据
- 新版安装并导入
- 应用连接测试
我曾处理过5.7到8.0的迁移,特别注意:
- 密码认证插件变更
- 默认字符集改为utf8mb4
- 保留原my.cnf中的自定义配置
10. 容器化部署方案(可选)
对于需要快速部署的场景,可使用Docker:
bash复制docker run --name mysql8 \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-d mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
容器化部署的优势在于环境隔离和快速启动,但要注意数据持久化卷的配置。
