【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 服务已启动。

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

附录:一键初始化脚本

如果需要重复执行,可以将以下 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;

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

相关推荐
倔强的石头_36 分钟前
从 “存得下” 到 “算得快”:工业物联网需要新一代时序数据平台
数据库
TDengine (老段)2 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
GottdesKrieges2 小时前
OceanBase数据库备份配置
数据库·oceanbase
SPC的存折3 小时前
MySQL 8组复制完全指南
linux·运维·服务器·数据库·mysql
运维行者_3 小时前
OpManager MSP NetFlow Analyzer集成解决方案,应对多客户端网络流量监控挑战
大数据·运维·服务器·网络·数据库·自动化·运维开发
炸炸鱼.4 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
softshow10264 小时前
Etsy 把 1000 个 MySQL 分片迁进 Vitess
数据库·mysql
Ronaldinho Gaúch4 小时前
MySQL基础
数据库·mysql
不剪发的Tony老师5 小时前
Noir:一款键盘驱动的现代化数据库管理工具
数据库·sql
.柒宇.6 小时前
MySQL双主同步
linux·数据库·mysql·docker