ubuntu系统上MySQL8密码修改root

文章讲述了如何解决root用户authentication_string为空导致的MySQL登录问题,包括检查默认凭证、修改plugin模式、设置新密码并刷新权限,最后重启服务。

1.查询root用户authentication_string字段是否为空。

2.authentication_string字段是空,那么可以直接设置。

上述方法可能不生效,root用户无法登录MySQL可以用以下方案。

1.MySQL安装会有个默认的用户名和密码保存在/etc/msyql/debian.cf文件中

su root
cat /etc/mysql/debian.cnf

2.使用默认用户名密码登录进入MySQL数据

mysql -u debian-sys-maint -p

3.更新root用户的plugin模式为mysql_native_password

use mysql
update user set plugin='mysql_native_password' where user='root';

4.查看是否更新成功

select user,plugin from user;

5.设置root密码

alter user 'root'@'loacalhost' identified by '12345678';

6.刷新

flush privileges;

7.重启mysql

systemctl restart mysql

<think>我们正在处理一个关于在Ubuntu 22.04上修改MySQL 8root密码的问题。 根据引用[1]和[3],我们知道在安装MySQL时设置了root密码,并且可以通过一些安全脚本来修改。但是,用户现在需要修改已经安装好的MySQL 8root密码。 在MySQL 8.0中,修改root密码的步骤与旧版本有所不同,因为默认的身份验证插件是`caching_sha2_password`,而之前可能是`mysql_native_password`。另外,在Ubuntu上,MySQL默认使用auth_socket插件来管理root用户的认证,这允许通过sudo权限无密码登录。因此,我们需要先以特权方式登录,然后修改密码。 步骤概述: 1. 停止MySQL服务(可选,但有时在修改认证插件时可能需要)。 2. 以跳过权限表的方式启动MySQL(如果忘记了root密码,需要重置的情况)。但这里我们假设用户知道当前root密码,或者可以通过sudo权限登录。 3. 登录到MySQL服务器。 4. 修改root用户的密码和认证插件(如果需要的话)。 但是,根据用户的问题,他是在Ubuntu 22.04上修改MySQL 8root密码。我们可以分两种情况: 情况一:知道当前root密码,想要修改为新密码。 情况二:忘记了root密码,需要重置。 由于问题中没有说明是否记得当前密码,我们将分别介绍两种方法。 方法一:知道当前密码,直接修改 1. 使用当前密码登录: ```bash sudo mysql -u root -p ``` 输入当前密码。 2. 在MySQL提示符下,执行以下命令修改密码(假设新密码为'new_password'): ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` 注意:在MySQL 8.0中,默认的身份验证插件是`caching_sha2_password`,如果你需要保持与旧版本兼容,可以改为`mysql_native_password`,但这不是必须的: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; ``` 3. 退出MySQL: ```sql EXIT; ``` 方法二:忘记root密码,需要重置 1. 停止MySQL服务: ```bash sudo systemctl stop mysql ``` 2. 跳过权限表启动MySQL服务: ```bash sudo mysqld_safe --skip-grant-tables --skip-networking & ``` 注意:在MySQL 8.0中,`mysqld_safe`已经被移除,我们可以使用以下方式: ```bash sudo mysqld --skip-grant-tables --skip-networking & ``` 但是,在Ubuntu中,我们可能需要使用`systemctl`来启动,但这样会读取配置文件。我们可以通过编辑配置文件来设置,或者使用以下替代方法: 实际上,我们可以创建一个临时的配置文件,然后启动MySQL服务。但为了简单,我们使用以下方法: - 先停止服务 - 然后手动启动MySQL并跳过权限表 然而,在较新的MySQL版本中,推荐使用以下步骤: 2.1 停止服务: ```bash sudo systemctl stop mysql ``` 2.2 创建一个启动配置文件(例如`/etc/mysql/conf.d/skip-grant-tables.cnf`): ```bash echo "skip-grant-tables" | sudo tee /etc/mysql/conf.d/skip-grant-tables.cnf ``` 2.3 启动服务: ```bash sudo systemctl start mysql ``` 3. 现在,我们可以无密码登录: ```bash sudo mysql -u root ``` 4. 在MySQL提示符下,先刷新权限: ```sql FLUSH PRIVILEGES; ``` 5. 修改root密码MySQL 8.0中,密码存储机制有变化,不能直接用`UPDATE`语句修改`mysql.user`表,因为密码字段是`authentication_string`,而且可能包含插件信息。推荐使用`ALTER USER`,但此时因为跳过了权限表,我们可以先清空密码,然后再设置): ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` 如果执行`ALTER USER`报错,可能是因为权限表没有加载,我们可以先加载: ```sql FLUSH PRIVILEGES; ``` 然后再执行`ALTER USER`。 6. 修改完成后,退出MySQL。 7. 停止MySQL服务,并删除之前添加的配置文件: ```bash sudo systemctl stop mysql sudo rm /etc/mysql/conf.d/skip-grant-tables.cnf ``` 8. 启动MySQL服务: ```bash sudo systemctl start mysql ``` 注意:在方法二中,如果使用配置文件跳过权限表,在修改密码后一定要移除该配置,否则会存在安全风险。 另外,在MySQL 8.0中,如果使用`ALTER USER`修改密码,它会自动处理插件和密码加密方式。 但是,在Ubuntu系统中,默认的root用户可能使用`auth_socket`插件,这允许通过sudo权限无密码登录。如果你想改为密码验证,可以修改插件: 在MySQL中执行: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password'; ``` 或者 ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; ``` 然后,需要确保在配置文件中没有设置`skip-grant-tables`,并重启服务。 根据引用[2]和[3],在安装过程中设置密码使用了`debconf-set-selections`,但修改密码不需要这个。 因此,我们给出两种方法的步骤,用户可以根据自己的情况选择。 最后,为了安全,建议运行`mysql_secure_installation`来加固MySQL安装(引用[3]提到)。 注意:在修改密码后,可能需要更新使用旧密码的应用程序。 总结: 如果知道当前密码,使用方法一;如果不知道,使用方法二。 请根据实际情况谨慎操作。</think>### 在Ubuntu 22.04上修改MySQL 8root密码 #### 方法一:通过MySQL命令行修改(需知道当前密码) 1. **登录MySQL**: ```bash sudo mysql -u root -p ``` 输入当前密码进入MySQL命令行[^2] 2. **修改密码**: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '您的新密码'; FLUSH PRIVILEGES; ``` 示例:`ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass123!';` 3. **退出**: ```sql EXIT; ``` #### 方法二:使用mysqladmin(需知道当前密码) ```bash sudo mysqladmin -u root -p password "您的新密码" ``` 输入当前密码后,密码将被更新[^1] #### 方法三:忘记密码时重置(安全模式) 1. **停止MySQL服务**: ```bash sudo systemctl stop mysql ``` 2. **启动无验证模式**: ```bash sudo mysqld_safe --skip-grant-tables --skip-networking & ``` 3. **无密码登录**: ```bash sudo mysql -u root ``` 4. **清除root密码**: ```sql FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '您的新密码'; -- MySQL 8可能需要额外执行: UPDATE mysql.user SET authentication_string=null WHERE User='root'; ``` 5. **重启服务**: ```bash sudo systemctl restart mysql ``` #### 重要说明: 1. MySQL 8默认使用`caching_sha2_password`插件,如需兼容旧客户端可修改: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '您的新密码'; ``` 2. 操作完成后建议运行安全脚本: ```bash sudo mysql_secure_installation ``` 可移除测试数据库和匿名用户[^3] 3. 修改后测试连接: ```bash mysql -u root -p ``` --- ### 常见问题解决 1. **出现`ERROR 1396 (HY000)`**: - 尝试使用`ALTER USER 'root'@'%'`替代localhost - 执行`FLUSH PRIVILEGES`后重试 2. **密码策略限制**: ```sql SHOW VARIABLES LIKE 'validate_password%'; SET GLOBAL validate_password.policy=LOW; ``` 3. **修改后仍无法登录**: ```bash sudo systemctl stop mysql sudo rm /var/lib/mysql/mysql.sock # 删除套接字文件 sudo systemctl start mysql ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值