【MySQL】项目后端 MySQL 数据库初始化步骤

本文来自我正在开发平台后端的README操作指南。经过整理,我保留了核心步骤,补充了具体的 SQL 执行命令系统命令,并增加了字符集设置、权限刷新、连接测试以及安全警告



0.背景需求

我正在写一个项目后端 MySQL 数据库准备工作文档,包含以下步骤:

  1. 记录登录mysql的root账号密码,账号是root,密码是root
  2. 先检查mysql数据库是否存在zonesion用户、db_iHealthcare数据库。如果存在,则查看zonesion用户的密码和权限,如果不存在,则按后续步骤创建;
  3. 创建一个db_iHealthcare空数据库,检查数据库是否创建成功;
  4. 创建mysql用户,用户zonesion,密码123456,允许用户本地、远程任何IP访问,该用户拥有db_iHealthcare数据库所有权限,检查zonesion用户是否创建成功。

生产环境中安全警告

  • 密码强度:文档中使用的密码(如 root/123456)仅为开发/测试环境示例。生产环境严禁使用弱密码,请务必修改为高强度密码。
  • 远程访问:开放 % (任意 IP) 访问权限存在安全风险,建议在生产环境中限制为特定应用服务器 IP
  • Root 账号:日常开发请勿使用 root 账号连接应用,应使用分配的普通账号(如 zonesion)。

1.环境准备与登录

1.1 确认 MySQL 服务状态

在执行以下操作前,请确保 MySQL 服务已启动。

# Linux 系统
systemctl status mysqld
# 或
service mysql status

# Windows 系统
# 在服务管理器中查看 MySQL 服务是否运行

1.2 登录 MySQL

使用 root 账号登录数据库。
账号: root
密码: root

mysql -u root -p
# 输入密码:root

2.检查现有资源

在创建之前,先检查数据库和用户是否已存在,避免报错或覆盖现有数据。

2.1 检查数据库是否存在

在 MySQL 命令行中执行:

SHOW DATABASES LIKE 'db_iHealthcare';
  • 如果结果为空:表示数据库不存在,继续执行后续创建步骤。
  • 如果结果有值:表示数据库已存在。请确认数据是否可清空或是否需要备份。

2.2 检查用户是否存在及权限

-- 检查用户是否存在 (MySQL 5.7+)
SELECT user, host FROM mysql.user WHERE user = 'zonesion';

-- 如果用户存在,查看其现有权限
SHOW GRANTS FOR 'zonesion'@'localhost';
SHOW GRANTS FOR 'zonesion'@'%';
  • 注意:数据库无法查看用户的明文密码。如果用户已存在但密码未知,建议直接重置密码。
  • 决策:如果用户已存在且权限不符合要求,建议删除后重建,或修改密码和权限。

3.创建数据库

创建空数据库,并指定字符集为 utf8mb4(支持 Emoji 及生僻字,医疗项目推荐)。

-- 创建数据库 (如果不存在)
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 创建用户

-- 创建本地访问用户
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,请使用以下命令兼容旧驱动:
ALTER USER 'zonesion'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'zonesion'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

4.2 授予权限

-- 授予 db_iHealthcare 数据库的所有权限
GRANT ALL PRIVILEGES ON db_iHealthcare.* TO 'zonesion'@'localhost';
GRANT ALL PRIVILEGES ON db_iHealthcare.* TO 'zonesion'@'%';

-- 刷新权限使配置立即生效
FLUSH PRIVILEGES;

4.3 验证用户创建

-- 再次查询用户
SELECT user, host FROM mysql.user WHERE user = 'zonesion';

-- 查看权限
SHOW GRANTS FOR 'zonesion'@'%';
  • 预期结果:应看到两条 zonesion 记录(host 分别为 localhost%),且权限包含 db_iHealthcare.*

5.退出并测试连接

仅在内部分配成功是不够的,必须验证应用能否实际连接。

5.1 退出 Root 账号

EXIT;

5.2 使用新账号登录测试

# 测试本地登录
mysql -u zonesion -p -h 127.0.0.1
# 输入密码:123456

# 测试指定数据库
USE db_iHealthcare;
  • 成功标志:能够成功登录并切换到 db_iHealthcare 数据库,且没有 Access denied 错误。

5.3 远程连接测试

在另一台机器上尝试连接:

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

附录:一键初始化脚本

如果需要重复执行,可以将以下 SQL 保存为 init.sql,然后通过命令行执行:

mysql -u root -p < init.sql

init.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;

欢迎点赞评论,指出不足,笔者由衷感谢!~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值