在CentOS 7上,在安装MySQL的时候,默认会安装MariaDB,安装完成后终端中直接键入MySQL即可进入数据库,但是此时的数据库是没有密码的,非常的不安全,而且完成不了一些其他软件对数据库的操作。
MariaDB 初次登录密码设置 + 安全配置完整指南(CentOS7)
⚠️ 和 MySQL 5.7 不一样:MariaDB 通过 yum 安装后,root@localhost 默认没有临时密码,而是通过
unix_socket插件认证 —— 只要你是系统 root 用户执行mysql -u root就能直接进。 所以 “初次登录” 不是找临时密码,而是首次登录后必须立刻改密码 + 跑安全脚本。
一、安装与启动
# 安装MariaDB(CentOS7 base源自带)
yum install mariadb-server -y
# 启动并设开机自启
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
二、首次登录(无密码直接进)
mysql -u root
注意:必须用系统 root 账号执行(sudo 或直接 root 登录),普通用户执行
mysql -u root会报 Access denied,这是 unix_socket 认证机制,不是 bug。
三、方式 1:手动修改 root 密码
登录后执行:
-- MariaDB 10.4+ 推荐语法
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrong@Pass2026';
-- 老版本或兼容写法
-- SET PASSWORD FOR 'root'@'localhost' = PASSWORD('YourStrong@Pass2026');
FLUSH PRIVILEGES;
EXIT;
改完后下次登录就要密码了:
mysql -u root -p
如果你想让 root 用密码而不是 socket 认证(推荐)
默认改完密码后,root 仍然是 unix_socket 认证插件,系统 root 直接进、输密码反而报错。要切换成密码认证:
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('YourStrong@Pass2026');
FLUSH PRIVILEGES;
验证:退出后 mysql -u root -p 必须输密码才能进。
四、方式 2:官方安全脚本(强烈推荐,一键加固)
mysql_secure_installation
交互式问答逐行说明:
Enter current password for root (enter for none):
# 初次直接回车(没密码)
Set root password? [Y/n] y
New password:
Re-enter new password:
# 设置root强密码
Remove anonymous users? [Y/n] y
# 删除匿名用户,必选
Disallow root login remotely? [Y/n] y
# 禁止root远程登录,必选
Remove test database and access to it? [Y/n] y
# 删除test库,必选
Reload privilege tables now? [Y/n] y
# 刷新权限,必选
五、验证配置是否生效
# 1. 用密码登录
mysql -u root -p
登录后检查:
-- 查看当前用户
SELECT User, Host, plugin FROM mysql.user;
-- 应看到:
-- root localhost mysql_native_password(或 unix_socket,二选一)
-- 无匿名用户(空用户名)
-- 无 test 库
SHOW DATABASES;
六、生产环境推荐:新建管理账号,不开放 root 远程
-- 创建管理员,允许本机
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Admin@StrongPass2026';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
-- 如需远程,限定来源IP(不要用 %)
CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY 'Admin@StrongPass2026';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
防火墙:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
云服务器:安全组只放行可信 IP 的 3306,不要对全网开放。
七、可选:密码复杂度插件(生产建议)
MariaDB 有 simple_password_check 或 cracklib_password_check 插件:
INSTALL SONAME 'simple_password_check';
-- 查看策略
SHOW VARIABLES LIKE 'password%';
八、忘记 root 密码重置
# 1. 停止服务
systemctl stop mariadb
# 2. 跳过权限启动
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 无密码登录
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('NewPass@2026');
EXIT;
# 4. 正常重启
systemctl restart mariadb
务必确认
skip-grant-tables没留在配置文件里,否则任何人无密码都能登录。
九、安全检查清单
- root 密码已设置,不是空密码
- root 远程登录已禁用
- 匿名用户已删除
- test 库已删除
- 应用使用最小权限的专用账号,不用 root
- 3306 端口只对可信 IP 开放
- 配置文件
/etc/my.cnf不包含明文敏感信息 - 定期备份
/var/lib/mysql
十、常见问题
ERROR 1045 (28000): Access denied for user 'root'@'localhost'→ 你不是用系统 root 执行的;或已改密码但用了旧密码。加sudo或输正确密码。- 改了密码,但
mysql -u root还是不用密码 → root 还是unix_socket插件认证,用第四节命令切成mysql_native_password。 mysql_secure_installation提示 enter current password 进不去 → 用系统 root 直接跑脚本,不要加 sudo 到普通用户;或先手动mysql -u root进去 ALTER 一次。- 远程连接拒绝 → 检查
GRANT里 host 是否包含你来源 IP;防火墙 / 安全组;bind-address是否绑了 127.0.0.1(生产应绑内网网卡或 0.0.0.0 并加防火墙限制)。 - MariaDB 版本不同语法差异 → MariaDB 10.4+ 默认
unix_socket;老版本用SET PASSWORD ... = PASSWORD('xxx')。先mysql -V看版本。
十一、与 MySQL 5.7 对照
表格
| 项目 | MySQL 5.7 | MariaDB |
|---|---|---|
| 初始密码 | 日志里自动生成临时密码 | 无密码,unix_socket 直登 |
| 找密码 | grep 'temporary password' /var/log/mysqld.log | 不需要 |
| 安全脚本 | mysql_secure_installation | 同名 |
| 改密码语法 | ALTER USER ... IDENTIFIED BY '...' | 相同,但注意 plugin |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











暂无评论内容