本文来自我正在开发平台后端的README操作指南。经过整理,我保留了核心步骤,补充了具体的 SQL 执行命令 、系统命令 ,并增加了字符集设置、权限刷新、连接测试 以及安全警告。
本文目录
-
- 0.背景需求
- 1.环境准备与登录
-
- [1.1 确认 MySQL 服务状态](#1.1 确认 MySQL 服务状态)
- [1.2 登录 MySQL](#1.2 登录 MySQL)
- 2.检查现有资源
-
- [2.1 检查数据库是否存在](#2.1 检查数据库是否存在)
- [2.2 检查用户是否存在及权限](#2.2 检查用户是否存在及权限)
- 3.创建数据库
- 4.创建用户与授权
-
- [4.1 创建用户](#4.1 创建用户)
- [4.2 授予权限](#4.2 授予权限)
- [4.3 验证用户创建](#4.3 验证用户创建)
- 5.退出并测试连接
-
- [5.1 退出 Root 账号](#5.1 退出 Root 账号)
- [5.2 使用新账号登录测试](#5.2 使用新账号登录测试)
- [5.3 远程连接测试](#5.3 远程连接测试)
- 附录:一键初始化脚本
0.背景需求
我正在写一个项目后端 MySQL 数据库准备工作文档,包含以下步骤:
- 记录登录mysql的root账号密码,账号是
root,密码是root; - 先检查mysql数据库是否存在
zonesion用户、db_iHealthcare数据库。如果存在,则查看zonesion用户的密码和权限,如果不存在,则按后续步骤创建; - 创建一个
db_iHealthcare空数据库,检查数据库是否创建成功; - 创建mysql用户,用户
zonesion,密码123456,允许用户本地、远程任何IP访问,该用户拥有db_iHealthcare数据库所有权限,检查zonesion用户是否创建成功。
生产环境中安全警告:
- 密码强度:文档中使用的密码(如
root/123456)仅为开发/测试环境示例。生产环境严禁使用弱密码,请务必修改为高强度密码。 - 远程访问:开放
%(任意 IP) 访问权限存在安全风险,建议在生产环境中限制为特定应用服务器 IP - Root 账号:日常开发请勿使用
root账号连接应用,应使用分配的普通账号(如zonesion)。
1.环境准备与登录
1.1 确认 MySQL 服务状态
在执行以下操作前,请确保 MySQL 服务已启动。
bash
# Linux 系统
systemctl status mysqld
# 或
service mysql status
# Windows 系统
# 在服务管理器中查看 MySQL 服务是否运行
1.2 登录 MySQL
使用 root 账号登录数据库。
账号: root
密码: root
bash
mysql -u root -p
# 输入密码:root
2.检查现有资源
在创建之前,先检查数据库和用户是否已存在,避免报错或覆盖现有数据。
2.1 检查数据库是否存在
在 MySQL 命令行中执行:
bash
SHOW DATABASES LIKE 'db_iHealthcare';
- 如果结果为空:表示数据库不存在,继续执行后续创建步骤。
- 如果结果有值:表示数据库已存在。请确认数据是否可清空或是否需要备份。
2.2 检查用户是否存在及权限
sql
-- 检查用户是否存在 (MySQL 5.7+)
SELECT user, host FROM mysql.user WHERE user = 'zonesion';
-- 如果用户存在,查看其现有权限
SHOW GRANTS FOR 'zonesion'@'localhost';
SHOW GRANTS FOR 'zonesion'@'%';
- 注意 :数据库无法查看用户的明文密码。如果用户已存在但密码未知,建议直接重置密码。
- 决策:如果用户已存在且权限不符合要求,建议删除后重建,或修改密码和权限。
3.创建数据库
创建空数据库,并指定字符集为 utf8mb4(支持 Emoji 及生僻字,医疗项目推荐)。
sql
-- 创建数据库 (如果不存在)
CREATE DATABASE IF NOT EXISTS db_iHealthcare
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
-- 验证创建结果
SHOW DATABASES LIKE 'db_iHealthcare';
- 预期结果:应显示
db_iHealthcare。
4.创建用户与授权
为了满足"本地、远程任何 IP 访问 "的需求,建议分别创建 localhost 和 % 两个宿主的用户,以确保本地 socket 连接和远程 TCP 连接均正常。
4.1 创建用户
sql
-- 创建本地访问用户
CREATE USER IF NOT EXISTS 'zonesion'@'localhost' IDENTIFIED BY '123456';
-- 创建远程任意 IP 访问用户
CREATE USER IF NOT EXISTS 'zonesion'@'%' IDENTIFIED BY '123456';
- MySQL 8.0+ 注意:如果是 MySQL 8.0 以上版本,且旧版客户端连接报错
Authentication plugin 'caching_sha2_password' cannot be loaded,请使用以下命令兼容旧驱动:
sql
ALTER USER 'zonesion'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'zonesion'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
4.2 授予权限
sql
-- 授予 db_iHealthcare 数据库的所有权限
GRANT ALL PRIVILEGES ON db_iHealthcare.* TO 'zonesion'@'localhost';
GRANT ALL PRIVILEGES ON db_iHealthcare.* TO 'zonesion'@'%';
-- 刷新权限使配置立即生效
FLUSH PRIVILEGES;
4.3 验证用户创建
sql
-- 再次查询用户
SELECT user, host FROM mysql.user WHERE user = 'zonesion';
-- 查看权限
SHOW GRANTS FOR 'zonesion'@'%';
- 预期结果 :应看到两条
zonesion记录(host 分别为localhost和%),且权限包含db_iHealthcare.*。
5.退出并测试连接
仅在内部分配成功是不够的,必须验证应用能否实际连接。
5.1 退出 Root 账号
sql
EXIT;
5.2 使用新账号登录测试
bash
# 测试本地登录
mysql -u zonesion -p -h 127.0.0.1
# 输入密码:123456
# 测试指定数据库
USE db_iHealthcare;
- 成功标志 :能够成功登录并切换到
db_iHealthcare数据库,且没有Access denied错误。
5.3 远程连接测试
在另一台机器上尝试连接:
bash
mysql -u zonesion -p -h <数据库服务器 IP> -P 3306
- 如果连接超时:请检查服务器防火墙(Firewall/Security Group)是否放行了 3306 端口。
- Linux 防火墙示例:
firewall-cmd --zone=public --add-port=3306/tcp --permanent然后firewall-cmd --reload。
- Linux 防火墙示例:
附录:一键初始化脚本
如果需要重复执行,可以将以下 SQL 保存为 init.sql,然后通过命令行执行:
bash
mysql -u root -p < init.sql
init.sql 内容:
sql
-- 1. 创建数据库
CREATE DATABASE IF NOT EXISTS db_iHealthcare DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 2. 创建用户 (处理已存在情况)
-- 注意:MySQL 8.0+ 如果用户已存在,CREATE USER 会报错,需先删除或忽略
DROP USER IF EXISTS 'zonesion'@'localhost';
DROP USER IF EXISTS 'zonesion'@'%';
CREATE USER 'zonesion'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'zonesion'@'%' IDENTIFIED BY '123456';
-- 3. 授权
GRANT ALL PRIVILEGES ON db_iHealthcare.* TO 'zonesion'@'localhost';
GRANT ALL PRIVILEGES ON db_iHealthcare.* TO 'zonesion'@'%';
-- 4. 刷新
FLUSH PRIVILEGES;
欢迎点赞评论,指出不足,笔者由衷感谢!~