专栏首页MySQL捉虫MySQL8.0使用skip-grant-tables
原创

MySQL8.0使用skip-grant-tables

在忘记MySQL密码的时候,会使用skip-grant-tables选项,下面记录一下在MySQL8.0环境中使用skip-grant-tables的情况。

mysqld程序使用skip-grant-tables选项启动

# ./bin/mysqld --skip-grant-tables --user=mysql

update修改密码

登录MySQL数据库,设置密码

由于mysql 8.0不在支持password函数

The PASSWORD() function. Additionally, PASSWORD() removal means that SET PASSWORD ... = PASSWORD('auth_string') syntax is no longer available.

因此如下命令无法执行,

mysql> update mysql.user set authentication_string=password('123456') where user='root';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('123456') where user='root'' at line 1

替代方法将密码字段设置为空

mysql> update mysql.user set authentication_string='' where user='root' and host='localhost';
mysql> flush privileges;

使用set password修改密码

# mysql -uroot --socket=/tmp/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.22-debug Source distribution
Copyright (c) 2000, 2020, 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> set password for 'root'@'localhost'='123456';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;
Query OK, 0 rows affected (0.13 sec)
mysql> set password for 'root'@'localhost'='123456';
Query OK, 0 rows affected (0.01 sec)

第一次执行执行set password命令失败,代码如下

int mysql_execute_command(THD *thd, bool first_level) {
...
 /* Check if the statement fulfill the requirements on ACL CACHE */
  if (!command_satisfy_acl_cache_requirement(lex->sql_command)) {
    my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--skip-grant-tables");
    goto error;
  }
...
}

command_satisfy_acl_cache_requirement函数会调用skip_grant_tables函数

bool skip_grant_tables(void) { return !initialized; }

由于使用了skip-grant-tables选项,initialized变量为false。

执行flush privileges命令会让MySQL实例重新读取授权表并将initialized变量设置为true,因此第二次的set password命令正常执行。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL的skip-grant-tables

    Windows下安装的MySQL 5.7,可以用如下指令,进行初始化、服务注册、启动服务,

    bisal
  • MySQL的skip-grant-tables

    Windows下安装的MySQL 5.7,可以用如下指令,进行初始化、服务注册、启动服务,

    bisal
  • CentOS7系统下修改mysql8.0版本密码

    忘记mysql登录密码是很常见的操作,今天讲一下Linux CentOS7下mysql8.0版本修改密码的方法。

    Tusi
  • MySQL 忘记密码,该怎么办?

    很久之前,小编在linux(centos7)服务器上安装了mysql5.7的数据库,但是很长时间没有使用过,也不知道里面是否有有用的数据库,密码也忘记了。

    纯洁的微笑
  • MySQL配置主从复制

    参考如下几篇博客:1:https://stackoverflow.com/questions/2995054/access-denied-for-user-ro...

    用户5927264
  • MySQL8.0几个有用的新特性

    今晚有点事情耽搁了,昨天下午测试了几个MySQL8.0的新特性,写在这里,希望对大家有所帮助。

    AsiaYe
  • Centos7安装MySQL8.0 - 操作手册

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!

    洗尽了浮华
  • linux忘记mysql密码,如何找回密码?

    今天我们主要是讲一下关于linux忘记mysql密码处理方法,下面提供了5种linux忘记mysql密码找回方法哦。

    C4rpeDime
  • MySQL 修改用户密码及重置root密码

        为数据库用户修改密码是DBA比较常见的工作之一。对于MySQL用户账户的密码修改,有几种不同的方式,推荐的方式使用加密函数来修改密码。本文主要描述了通过...

    Leshami
  • 解决SSH连接linux中文显示乱码问题

    添加windows下mysql服务 以管理员身份打开cmd,执行 mysqld –install net stop mysql 忘记密码找回 找到m...

    学到老
  • 解决SSH连接linux中文显示乱码问题

    添加windows下mysql服务 以管理员身份打开cmd,执行 mysqld –install net stop mysql

    学到老
  • mysql误删root用户恢复方法

    装完数据库清理一些默认账号的时候不小心把root删除了,flush privileges 之后的新 root 忘了grant任何权限,查看mysqld选项里面有...

    用户4988085
  • mysql8.0 安装 修改密码 允许远程连接

    mysql从5.7一下子跳跃到了8.0,其中的改变还是很大,有点这里就不说了,小伙伴们自己去百度了解一下,这里重点说一下,安装的事

    拓荒者
  • CentOS6.5安装mysql5.1.73

    架构师专栏
  • windows下mysql忘记root密码,如何重设密码

    添加windows下mysql服务 以管理员身份打开cmd,执行 mysqld --install net stop mysql # 忘记密码找回 找到mysq...

    学到老
  • windows下mysql8忘记root密码,如何重设密码,以及mysql驱动下载

    mysql各个版本的驱动下载:http://central.maven.org/maven2/mysql/mysql-connector-java/

    学到老
  • MySQL8.0新功能列表

    There are over 250 new features in MySQL 8.0. The MySQL Manual is very good, but...

    田帅萌
  • MySQL 5.7及8.0版本数据库的root密码遗忘的解决办法

    注:MySQL5.7破解root密码,跳过密码认证登录到数据库,直接修改表中的密码即可,但是MySQL 8.0则不可以这样修改root密码,需要跳过密码认证登录...

    小手冰凉
  • 【远程连接MySQL 】 云服务器mysql访问慢【速度较慢】

    使用java操作远程的mysql数据库的时候,第一次请求非常的慢,而且极其容易引起系统的崩溃报错连接超时

    韩旭051

扫码关注云+社区

领取腾讯云代金券