MySQL Error 1698(28000)是指在使用MySQL命令行进行登录或创建新用户时出现的一个权限验证错误。这个错误通常发生在新的安装或升级MySQL版本之后。下面是解决这个问题的完整攻略:
1. 原因分析
在MySQL 5.7版本之后,对于每个MySQL Root账户都有了角色管理功能,新安装的MySQL 8.0版本默认启用了角色管理。因此,使用Root账户登录MySQL时需要使用sudo命令或者以管理员身份运行才行。否则,你会得到类似于下面的错误提示:
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
2. 解决方法
方法一:修改Root账户的验证方式
第一种方法是修改root账户的验证方式,使其变为旧的验证方式。这种方法要求你有超级管理员权限,可以通过以下步骤来实现:
- 停止mysqld服务:
$ sudo systemctl stop mysql
- 启动mysqld服务,并加上
--skip-grant-tables
参数,这将使mysqld启动时跳过用户验证,从而允许你以root账户登录:
$ sudo mysqld_safe --skip-grant-tables&
- 进入mysql shell:
$ mysql -u root
- 将root账户的验证方式更改为mysql_native_password:
mysql> use mysql;
mysql> update user set plugin='mysql_native_password' where User='root';
mysql> flush privileges;
mysql> quit;
- 停止mysqld服务:
$ sudo systemctl stop mysql
- 启动mysqld服务,此时root账户的验证方式已经更改完成:
$ sudo systemctl start mysql
现在,你就可以使用root账户以及其密码成功登录MySQL了。
方法二:创建一个新的管理员账户
第二种方法是创建一个新的管理员账户,使用这个新账户来管理MySQL数据库。这种方法也要求你有超级管理员权限,可以通过以下步骤来实现:
- 使用root账户(原有的或是通过第一种方法创建的)登录MySQL,并创建一个新的管理员账户:
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
这段代码中,admin
是新的管理员账户名,password
是密码。
- 退出MySQL:
mysql> quit
- 检查新账户是否能够成功登录MySQL:
$ mysql -u admin -p
现在,你已经成功创建一个新的管理员账户,并使用这个账户成功登录MySQL了。如果你需要进行一些管理员的操作,就可以使用这个新账户来完成了。
3. 总结
在本文中,我们讨论了MySQL Error 1698(28000)产生的原因,并提供了两种解决方法。第一种方法是修改MySQL Root账户的密码验证方式,使其变为旧的方式;第二种方法是创建一个新的管理员账户,使用这个账户来管理MySQL数据库。两种方法都需要你有超级管理员权限。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySql Error 1698(28000)问题的解决方法 - Python技术站