导读:本期聚焦于台湾程序员创作的《mysql安装后如何创建初始数据库和用户?详细配置方法分享》,敬请观看详情。MySQL装好之后直接拿来就用,安全隐患其实不小。root账户使用默认配置、没有独立的业务数据库、权限分配混乱,这些问题在项目上线后往往会变成麻烦。本文围绕安装完成后的第一步展开,讲解如何登录MySQL、创建项目的初始数据库、新建专用用户并授权,同时介绍设置密码策略、限制远程访问范围、刷新权限等细节操作,还会对比CREATE USER与GRANT语句的演变,帮助你把数据库的权限体系一次性配置规范,避免后续踩坑。

MySQL安装完成后,很多人直接用root账户连接业务程序就开始开发了,这种做法在小项目里看不出问题,一旦部署到线上,权限失控带来的风险就会暴露出来。规范的流程应该是:装好数据库后先创建独立的业务数据库,再新建专用用户并授予最小必要权限,业务程序只用这个账号连接。本文以MySQL 5.7和8.0为例,完整演示这套初始配置的操作过程。

mysql安装后如何创建初始数据库和用户?详细配置方法分享

一、登录MySQL并确认安装状态

安装完成后第一步是确认服务正常、能成功登录。Linux下如果是yum或apt安装的MySQL,可以用systemctl status mysqld查看服务状态。首次登录的密码通常在日志文件里,CentOS下执行grep 'temporary password' /var/log/mysqld.log就能找到root的临时密码。Windows安装包方式则在安装向导中设置过root密码。

拿到临时密码后,用mysql -u root -p登录,第一次进去建议立刻改密码。这里有个常见的坑:MySQL 5.7之后默认开启了密码强度校验插件validate_password,密码必须包含大小写字母、数字和特殊字符,否则会报错ERROR 1819。如果只是本地测试想用简单密码,可以先执行SET GLOBAL validate_password_policy=0;降低策略再修改。

-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass_2024!';

-- 查看当前版本和用户
SELECT VERSION();
SELECT user, host FROM mysql.user;

执行SELECT user, host FROM mysql.user;这条语句时留意一下host列,如果出现host为百分号%的匿名用户或多余账户,建议直接删除,避免留下安全隐患。

二、创建初始数据库并指定字符集

创建数据库的关键点不是CREATE DATABASE这条语句本身,而是字符集的选择。中文环境下推荐统一使用utf8mb4而不是utf8,因为MySQL中的utf8实际上是阉割版,最多支持三个字节的Unicode字符,遇到emoji表情或生僻字会直接报错或存成问号。utf8mb4才是完整的UTF-8实现。同时建议显式指定排序规则为utf8mb4_general_ci或utf8mb4_unicode_ci,前者比较速度快,后者排序更符合语言习惯。

-- 创建业务数据库,显式指定字符集和排序规则
CREATE DATABASE IF NOT EXISTS shop_db
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_general_ci;

-- 查看数据库确认
SHOW CREATE DATABASE shop_db;

-- 进入数据库
USE shop_db;

IF NOT EXISTS的作用是让脚本可以重复执行而不报错,在自动化部署脚本中特别有用。另外要注意,数据库级别的字符集只是默认值,每张表还可以单独覆盖,但为了维护方便,建议整个项目保持统一,避免出现同一库里混杂多种字符集的情况。

三、新建专用用户并授权

业务程序不应该使用root账户,这是数据库安全的基本原则。正确做法是为每个应用创建独立用户,只授予它在特定数据库上的权限。用户由用户名和主机两部分组成,'app_user'@'localhost'和'app_user'@'192.168.1.%'是两个不同的账户,这一点初学者经常混淆。

这里有一个版本差异必须说明。在MySQL 5.7及之前,可以用GRANT直接创建用户并授权,一条语句搞定。但MySQL 8.0移除了这个特性,必须先CREATE USER再GRANT,分两步执行,否则会报语法错误。为了兼容性和习惯统一,建议无论哪个版本都按两步来写。

-- 创建用户,限制只能从192.168.1网段连接
CREATE USER 'app_user'@'192.168.1.%'
  IDENTIFIED BY 'AppUser_Pass_88';

-- 授予shop_db库的全部权限
GRANT ALL PRIVILEGES ON shop_db.* TO 'app_user'@'192.168.1.%';

-- 如果只需要读写,不需要建表删表,权限可以更细
GRANT SELECT, INSERT, UPDATE, DELETE ON shop_db.* TO 'app_user'@'192.168.1.%';

-- 刷新权限(修改user表后需要,GRANT本身可省略)
FLUSH PRIVILEGES;

授权粒度可以精确到表甚至列,通配符shop_db.*表示整个库,*. *(写作*.*时注意中间不能有空格)表示全局权限。host部分尽量避免直接写百分号%,也就是允许任意主机连接,除非确实有分布式访问需求。生产环境更稳妥的方式是写具体网段或开启SSH隧道访问。MySQL 8.0默认的认证插件是caching_sha2_password,如果客户端驱动较老连接不上,可以在创建用户时加IDENTIFIED WITH mysql_native_password BY '密码'来兼容。

四、验证配置并做收尾工作

配置完成后不要急着投入使用,先用新账号实际连接一次验证权限是否符合预期。在命令行执行mysql -u app_user -p -h 数据库IP,登录后尝试SHOW DATABASES;,正常情况下只能看到shop_db和information_schema,看不到其他库,这说明权限隔离生效了。再试着对其他库执行查询,收到ACCESS DENIED就说明配置正确。

-- 查看当前用户
SELECT CURRENT_USER();

-- 查看自己的权限
SHOW GRANTS;

-- 用root查看指定用户权限
SHOW GRANTS FOR 'app_user'@'192.168.1.%';

最后还有几件收尾的事值得做。检查my.cnf配置文件中的bind-address,如果只允许本机访问就保持127.0.0.1,需要远程连接则改为服务器内网IP;确认防火墙只对可信网段开放3306端口;对于不再使用的账户及时用DROP USER清理。这些初始配置花不了十分钟,却能让整个项目的数据库权限体系从一开始就走上正轨,比出问题后再补救省心得多。

mysql创建数据库mysql用户管理mysql初始配置修改时间:2026-09-12 13:46:32

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260912/55365.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。