下载地址/官网:MySQL Community Server
MySQL 8 用来保存业务数据和邮件发送记录。这套项目需要数据库 spring_cloud_alibaba,应用通过 spring_cloud_alibaba 用户连接,并且
JDBC URL 使用 sslMode=REQUIRED。本文从零开始安装,并创建这套项目可用的数据库和账号。
本文按“单机部署”写,适合同一台服务器上运行 MySQL 和微服务的场景。不要把 3306 端口直接暴露到公网。
Windows 安装 MySQL 8
- 打开 MySQL Community Server 下载页。
- 下载
mysql-installer-community,建议选择体积更大的完整版,包含配置向导。 - 打开安装器,选择
Server only,点击Execute。 - 类型选择
Standalone MySQL Server。 - 网络配置保持默认端口
3306。 - 认证方式选择默认的
Use Strong Password Encryption。 - 给 root 设置一个强密码并记住。这个密码只给 MySQL 运维使用,不建议直接写进微服务配置。
- Windows Service 保持默认即可,服务名一般是
MySQL80。 - 完成安装后,打开 PowerShell,验证服务状态:
Get-Service MySQL80
看到 Running 即为正常。
- 连接 MySQL。如果
mysql不在 PATH 里,常见目录是:
C:\Program Files\MySQL\MySQL Server 8.0\bin
可以在该目录下执行:
.\mysql.exe -u root -p
也可以把 bin 目录加入系统 PATH,之后直接执行:
mysql -u root -p
Ubuntu 安装 MySQL 8
- 更新软件源:
sudo apt update
- 安装 MySQL Server:
sudo apt install -y mysql-server
- 启动并设置开机自启:
sudo systemctl enable --now mysql
- 查看状态:
sudo systemctl status mysql --no-pager
看到 active (running) 即为正常。
- Ubuntu 安装后 root 默认使用系统用户认证,先进入 MySQL:
sudo mysql
- 给 root 设置密码,之后可以用密码登录:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '换成你的root强密码';
FLUSH PRIVILEGES;
EXIT;
- 使用密码验证:
mysql -u root -p
macOS 安装 MySQL 8
- 安装 Homebrew 后执行:
brew install mysql@8.4
brew link --force mysql@8.4
- 启动 MySQL:
brew services start mysql@8.4
- 查看状态:
brew services list
- 确认客户端版本:
mysql -V
- 首次连接。Homebrew 安装的 MySQL 初始 root 密码通常为空:
mysql -u root -p
提示密码时直接回车。
- 设置 root 密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '换成你的root强密码';
FLUSH PRIVILEGES;
EXIT;
创建项目数据库和账号
三个系统进入 MySQL 后,执行同样的 SQL。
- 创建数据库:
CREATE DATABASE spring_cloud_alibaba
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
- 创建应用账号。把
换成强密码替换成自己的密码:
CREATE USER 'spring_cloud_alibaba'@'localhost'
IDENTIFIED WITH caching_sha2_password BY '换成强密码';
- 授权。单机部署时只授权
spring_cloud_alibaba这一个库:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP, REFERENCES
ON spring_cloud_alibaba.*
TO 'spring_cloud_alibaba'@'localhost';
FLUSH PRIVILEGES;
如果初始化表结构由外部 SQL 脚本执行,可以临时把
CREATE、ALTER、DROP授权给执行脚本的用户;日常运行建议只保留SELECT、INSERT、UPDATE、DELETE。
- 使用新账号验证:
mysql -u spring_cloud_alibaba -p
- 登录后确认当前数据库可访问:
SHOW DATABASES;
USE spring_cloud_alibaba;
SHOW TABLES;
确认 SSL 可用
这套项目的 JDBC URL 使用 sslMode=REQUIRED,所以 MySQL 必须启用 SSL。MySQL 8 默认会在首次启动时自动生成证书,一般不需要手动创建。
登录 MySQL 后执行:
SHOW VARIABLES LIKE 'have_ssl';
SHOW VARIABLES LIKE 'ssl_ca';
期望结果:
have_ssl YES
也可以执行:
STATUS;
输出里的连接信息包含 SSL: Cipher in use is ...,说明当前客户端连接已经走了 SSL。
接入微服务配置
单机部署时,项目生产环境的连接地址保持为 127.0.0.1:3306:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/spring_cloud_alibaba?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&sslMode=REQUIRED
username: spring_cloud_alibaba
password: ENC(你的Jasypt密文)
密码建议使用 Jasypt 加密,不要把明文密码提交到 Git。
数据库和应用不在同一台机器
优先做法是创建一个限定来源 IP 的账号,不要使用 % 通配所有主机:
CREATE USER 'spring_cloud_alibaba'@'应用服务器IP'
IDENTIFIED WITH caching_sha2_password BY '换成强密码';
GRANT SELECT, INSERT, UPDATE, DELETE
ON spring_cloud_alibaba.*
TO 'spring_cloud_alibaba'@'应用服务器IP';
FLUSH PRIVILEGES;
然后修改 MySQL 监听地址和防火墙,只允许应用服务器访问 3306。
Ubuntu 查看监听地址:
ss -lntp | grep 3306
如果需要远程访问,编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,将:
bind-address = 127.0.0.1
改为:
bind-address = 0.0.0.0
mysqlx-bind-address = 127.0.0.1
重启 MySQL:
sudo systemctl restart mysql
改成
0.0.0.0只是表示 MySQL 监听所有网卡,不代表可以裸奔公网。必须配合安全组、防火墙和限定来源 IP 的账号使用。
备份与恢复
备份:
mysqldump -u root -p \
--databases spring_cloud_alibaba \
--single-transaction \
--routines --triggers \
> spring_cloud_alibaba.sql
恢复:
mysql -u root -p < spring_cloud_alibaba.sql
建议把备份文件存到另一台机器或对象存储,不要只留在数据库服务器本机。
常见问题
Access denied for user
确认三件事:用户名和密码正确;用户 Host 匹配;账号有目标库权限。单机部署用 localhost,远程部署要创建对应应用服务器 IP 的用户。
Public Key Retrieval is not allowed
常见于 MySQL 8 的 caching_sha2_password 认证。既然项目要求 SSL,保持 sslMode=REQUIRED 即可,不要关闭 SSL 后用
allowPublicKeyRetrieval=true 绕过。
SSL connection error
执行 SHOW VARIABLES LIKE 'have_ssl'; 确认为 YES。如果证书缺失,备份 MySQL 数据后重新生成 SSL 证书,或参考 MySQL
官方文档修复证书配置。
应用连不上 127.0.0.1
先在数据库服务器执行:
mysql -h 127.0.0.1 -P 3306 -u spring_cloud_alibaba -p
如果这个命令能连上,说明 MySQL 正常,问题在应用配置、Jasypt 密钥或应用进程环境。
部署完成检查
SELECT VERSION();
SHOW VARIABLES LIKE 'have_ssl';
SHOW DATABASES LIKE 'spring_cloud_alibaba';
SHOW GRANTS FOR 'spring_cloud_alibaba'@'localhost';
四条都符合预期后,这台机器的 MySQL 部分就完成了。