1. 项目概述
这个SpringBoot+Vue+MySQL的部署教程,主要面向需要将前后端分离项目部署到生产环境的开发者。作为全栈项目部署的关键环节,MySQL数据库的安装配置直接影响整个系统的数据存储和访问性能。
我在实际项目部署中发现,很多团队在开发阶段使用本地MySQL测试一切正常,但一到生产环境就遇到各种连接、权限和性能问题。本文将结合我多次部署的经验,分享从安装到优化的完整流程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MySQL安装准备
2.1 环境选择建议
对于生产环境,我强烈推荐使用MySQL 8.0而非5.7版本。8.0在性能(特别是高并发场景)和安全性方面有显著提升。以下是版本对比:
| 特性 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| 默认加密方式 | mysql_native_password | caching_sha2_password |
| JSON支持 | 基础功能 | 完善的功能集 |
| 窗口函数 | 不支持 | 支持 |
| 性能提升 | - | 读负载提升2倍 |
注意:如果必须使用5.7版本(如某些遗留系统兼容要求),需要特别处理密码加密方式,后文会详细说明。
2.2 系统配置检查
安装前请确认:
- 至少2GB可用内存(MySQL 8.0推荐4GB以上)
- 20GB以上磁盘空间(实际需要根据数据量调整)
- 确保3306端口未被占用:
bash复制
netstat -tulnp | grep 3306
3. MySQL安装步骤
3.1 使用官方仓库安装
这是我最推荐的安装方式,能确保获取最新安全补丁:
bash复制# 添加MySQL官方仓库
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
# 更新并安装
sudo apt update
sudo apt install mysql-server
安装过程中会提示设置root密码,建议使用强密码(至少12位,含大小写、数字和特殊字符)。
3.2 初始化安全设置
运行安全脚本:
bash复制sudo mysql_secure_installation
按提示完成以下设置:
- 验证密码强度插件
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 立即重载权限表
3.3 创建应用专用账户
永远不要在生产环境使用root账户连接应用!应该创建专用账户:
sql复制CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
4. SpringBoot集成配置
4.1 基础连接配置
在application.properties中配置:
properties复制spring.datasource.url=jdbc:mysql://localhost:3306/app_db?useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=app_user
spring.datasource.password=StrongPassword123!
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 连接池配置(建议使用HikariCP)
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
4.2 常见连接问题解决
- 时区问题:添加
serverTimezone=Asia/Shanghai参数 - SSL警告:开发环境可加
useSSL=false,生产环境应配置真实证书 - Public Key检索问题:添加
allowPublicKeyRetrieval=true
5. 性能优化建议
5.1 关键参数调整
编辑/etc/mysql/my.cnf,在[mysqld]段添加:
ini复制innodb_buffer_pool_size = 4G # 建议为系统内存的50-70%
innodb_log_file_size = 256M
max_connections = 200
wait_timeout = 600
5.2 定期维护任务
设置cronjob执行:
bash复制# 每日优化表
0 3 * * * mysqlcheck -o app_db
# 每周备份
0 4 * * 0 mysqldump -u root -p app_db > /backups/app_db_$(date +\%Y\%m\%d).sql
6. 监控与故障排查
6.1 基础监控命令
sql复制-- 查看活跃连接
SHOW PROCESSLIST;
-- 查看锁等待
SELECT * FROM performance_schema.events_waits_current;
-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query%';
6.2 日志配置
启用慢查询日志:
ini复制slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
7. 高可用方案(可选)
对于关键业务系统,建议配置主从复制:
-
主库配置:
ini复制server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW -
从库配置:
ini复制server-id = 2 relay_log = /var/log/mysql/mysql-relay-bin read_only = ON
配置完成后,在从库执行:
sql复制CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
8. 安全加固措施
-
定期审计用户权限:
sql复制SELECT user, host FROM mysql.user; SHOW GRANTS FOR 'app_user'@'%'; -
启用审计插件(MySQL Enterprise版)或使用开源替代方案如McAfee MySQL Audit Plugin
-
配置防火墙规则,只允许应用服务器访问3306端口
9. 备份与恢复策略
9.1 物理备份(推荐)
bash复制# 使用Percona XtraBackup
xtrabackup --backup --target-dir=/backups/full --user=root --password
9.2 逻辑备份
bash复制mysqldump --single-transaction --routines --triggers app_db > backup.sql
9.3 恢复测试
至少每季度执行一次恢复演练,确保备份有效。
10. 版本升级注意事项
升级MySQL版本时:
- 先在测试环境验证兼容性
- 检查所有自定义函数和存储过程
- 特别注意密码加密方式变更(8.0默认使用caching_sha2_password)
- 准备回滚方案
我在实际升级中遇到过存储过程不兼容的情况,建议使用mysql_upgrade工具并仔细阅读官方升级说明。
