centos8下给mysql设置密码

在CentOS8上安装MySQL8.0后,由于默认的密码认证插件更改,通过旧方法无法直接设置root密码。本文详细介绍了如何使用`ALTER USER`命令切换回`mysql_native_password`插件并设置新密码,以及验证新密码生效的过程。

centos8下给mysql设置密码

复制代码

(base) [root@localhost tushare]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.17 Source distribution

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

复制代码

 

修改root密码

在MySQL 8.04前,执行:SET PASSWORD=PASSWORD(‘[新密码]’);但是MySQL8.0.4开始,这样默认是不行的。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。

修改密码为123456(密码可以设置为任意值):

复制代码

mysql> use mysql;
use mysql;
^C
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

复制代码

 

用密码进入mysql命令行

复制代码

(base) [root@localhost tushare]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 8.0.17 Source distribution

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
<think>好的,用户现在在问如何在CentOS下跳过MySQL 8密码登录。首先,我需要回想一下MySQL 8的安全机制和跳过密码的方法。记得在MySQL 5.7之后,安全相关的设置有所变化,比如默认启用validate_password插件,可能影响到密码策略。 用户可能因为忘记了密码,或者需要临时绕过密码进行维护,但必须注意这样做会有安全风险,必须提醒用户仅在受控环境中使用,完成操作后立即恢复安全设置。 接下来,我需要考虑正确的步骤。首先,停止MySQL服务是必要的。然后修改配置文件,通常在/etc/my.cnf或/etc/my.cnf.d/mysql-server.cnf,添加skip-grant-tables选项,这样可以跳过权限验证。但要注意,MySQL 8可能在启动时仍然需要某些权限表的结构,所以可能需要同时添加skip-networking来禁止远程连接,避免安全漏洞。 启动服务后,连接到MySQL时可能不需要密码,但这时候可能无法直接修改用户密码,因为MySQL 8的授权表结构有变化。需要先执行flush privileges,然后使用新的ALTER USER语句来设置密码。这里要注意,MySQL 8密码存储方式可能默认使用caching_sha2_password,如果遇到问题,可能需要改用mysql_native_password插件。 另外,修改密码后,要记得移除配置文件中的skip-grant-tables和skip-networking选项,并重启服务,确保安全设置恢复。需要验证密码是否生效,防止出现配置未生效的情况。 还需要考虑用户可能遇到的常见问题,比如配置文件路径是否正确,权限问题是否导致无法修改配置,或者SELinux可能阻止服务启动。这时候可能需要检查日志文件,如/var/log/mysqld.log,查看具体的错误信息,并根据情况调整SELinux策略或文件权限。 最后,应该强调这种方法的风险,提醒用户仅在必要时使用,并尽快恢复安全措施。如果用户是在生产环境中操作,建议在维护窗口进行,并确保数据库在操作期间不可被外部访问,以减少被攻击的风险。</think>在CentOS系统中,**跳过MySQL 8密码验证**通常用于紧急修复账户权限或重置密码的场景。以下是具体操作步骤及注意事项: --- ### 一、操作步骤 #### 1. 停止MySQL服务 ```bash $ sudo systemctl stop mysqld ``` #### 2. 修改配置文件 编辑MySQL配置文件(路径根据安装方式不同可能有差异): ```bash $ sudo vim /etc/my.cnf # 或 /etc/my.cnf.d/mysql-server.cnf ``` 在`[mysqld]`段落后添加: ```ini skip-grant-tables # 跳过权限验证 skip-networking # 禁止远程连接(增强安全性) ``` #### 3. 启动MySQL服务 ```bash $ sudo systemctl start mysqld ``` #### 4. 免密登录MySQL ```bash $ mysql -u root # 无需密码直接登录 ``` #### 5. 修改密码(关键步骤) ```sql -- 刷新权限表(MySQL 8必须执行) FLUSH PRIVILEGES; -- 清空root密码8.0+需指定身份验证插件) ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; -- 或直接禁用密码验证(高风险!) UPDATE mysql.user SET authentication_string = '' WHERE user = 'root'; ``` #### 6. 恢复配置并重启 1. 删除配置文件中的`skip-grant-tables`和`skip-networking` 2. 重启服务: ```bash $ sudo systemctl restart mysqld ``` --- ### 二、风险与注意事项 1. **安全警告**: - `skip-grant-tables`模式下所有用户可无密码登录 - 操作完成后必须立即恢复配置并设置密码 2. **MySQL 8特性限制**: - 使用`ALTER USER`时必须指定身份验证插件(如`caching_sha2_password`或`mysql_native_password`) - 直接修改`mysql.user`表可能引发插件兼容性问题 3. **SELinux干扰**: ```bash # 若出现权限拒绝,临时关闭SELinux $ sudo setenforce 0 # 永久解决需修改策略 $ sudo semanage permissive -a mysqld_t ``` 4. **密码策略冲突**: - 若提示`Your password does not satisfy the current policy requirements`,需临时关闭密码策略: ```sql SET GLOBAL validate_password.policy = LOW; ``` --- ### 三、替代方案(推荐) #### 通过初始化文件重置密码 1. 创建密码文件: ```bash $ echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';" > /tmp/reset.sql ``` 2. 安全启动MySQL: ```bash $ sudo mysqld --init-file=/tmp/reset.sql --user=mysql --console ``` 3. 启动后删除临时文件 --- ### 四、验证流程 1. 检查密码生效: ```bash $ mysql -u root -p'新密码' -e "SELECT 1;" ``` 2. 查看插件状态: ```sql SELECT user, plugin FROM mysql.user; ``` --- ### 五、错误排查 1. **启动失败**: - 检查日志:`sudo journalctl -u mysqld` - 确认配置文件语法:`mysqld --validate-config` 2. **登录被拒**: ```bash # 检查socket文件权限 $ ls -l /var/lib/mysql/mysql.sock ``` --- ### 附:MySQL 8密码重置流程图 ```mermaid graph LR A[停止服务] --> B[添加skip-grant-tables] B --> C[启动服务] C --> D[免密登录] D --> E[FLUSH PRIVILEGES] E --> F[修改密码] F --> G[移除配置参数] G --> H[重启服务] ``` **注意**:此方法仅适用于本地环境,生产服务器建议使用`--init-file`方式重置密码
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值