首页 > 问答 > 关键词 > MySQL最新资讯 > 正文

MySQL的user表被删除了怎么办 user表被清空解决办法

2020-07-01 11:08 · 稿源:数据库干货铺
文章目录

近期就有人遇到user表内容被清空的情况。如果发生了此情况,千万不要慌,更不能隐瞒问题(今天这位朋友就比较惨,别人删了也没敢告知,结果binlog已经清理了),这样有利于恢复。现在针对几种情况,进行恢复操作的演示。

1.  user表内容被清空

如果有权限的同学误执行了情况mysql.user表内容的情况,如果是delete的方式还是相对容易恢复的(binlog存在的情况)

1.1  模拟误删除

/* 当前user表的内容 */mysql> select user,host from mysql.user;+---------------+--------------+| user          | host         |+---------------+--------------+| repl          | 192.168.28.% || mysql.session | localhost    || mysql.sys     | localhost    || root          | localhost    |+---------------+--------------+4 rows in set (0.00 sec)
mysql> select now();+---------------------+| now()               |+---------------------+| 2020-04-16 06:37:07 |+---------------------+1 row in set (0.00 sec)

现在执行误删除

mysql> delete from  mysql.user;
Query OK, 4 rows affected (0.01 sec)
mysql>

1.2   恢复

当前情况下,如开启了binlog(生产环境一般都是开启了的),则可以从binlog恢复

注意如果有全部及其之后的binlog 则可以通过恢复备份并追加binlog的方式恢复数据(后续其他文章再专题介绍),本文基于无全备,仅有最近的日志情况下恢复(主要是为了使用binlog2sql工具)

1.2.1 先恢复root账号

因为删除后,其他用户无法重新连接数据库了,需要紧急恢复root账号,再做后续其他账号的恢复,恢复步骤为:

修改为跳过授权的模式,即在配置文件my.cnf文件中添加 skip-grant-tables 

重启数据库

登录数据库,添加root@'localhost'账号(可以从相同版本数据库中导出一个root账号的sql语句恢复

/usr/local/mysql5.7/bin/mysqldump -uroot -p'123456'  -t --socket=/data/mysql3307/tmp/mysql.sock mysql user --where " 1=1 anduser='root' and host='localhost'" >1.sql

恢复数据

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> INSERT INTO `user` VALUES ('localhost','root','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password',password('123456'),'N',now(),NULL,'N');
Query OK, 1 row affected (0.01 sec)

改为授权模式: 将配置文件里的 skip-grant-tables 注释或删除

再次重启数据库即可用刚恢复的root账号登录了

mysql> select user,host from mysql.user;+------+-----------+| user | host      |+------+-----------+| root | localhost |+------+-----------+1 row in set (0.00 sec)

: 如果清空数据或后续说的删除了user表后没有退出当前会话,就无需之前的修改参数及重启数据库了,可以直接先从其他实例中先恢复root账号。

1.2.2 安装binlog2sql

binlog2sql依赖python2. 7 及以上版本,且依赖包通过pip安装,对于python的升级及pip的安装可参考历史文章

升级python,就是这么简单

一分钟搞定pip安装

yum install -y git wget
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

 1.2.3 使用binlog2sql工具恢复数据

使用binlog2sql的闪回工具将删除解析处理生成一个insert的sql脚本

python binlog2sql.py --flashback  -h localhost -u root -p 123456 -d mysql -t user --start-file='mysql-bin.000002' --start-datetime='2020-04-16 06:37:07' --stop-datetime='2020-04-16 06:40:00' >mysql.sql

将数据导入mysql.user表即可。

注: 其他用法请参考https://github.com/danfengcao/binlog2sql

2.  user 表被drop

2.1  模拟user 表被drop

mysql> drop table mysql.user;
Query OK, 0 rows affected (0.01 sec)

2.2 恢复

2.2.1 恢复表结构

表结构的恢复比较简单,可以从其他相同版本的数据库里复制user表的建表语句,然后导入即可

CREATE TABLE `user` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
`ssl_cipher` blob NOT NULL,
`x509_issuer` blob NOT NULL,
`x509_subject` blob NOT NULL,
`max_questions` int(11) unsigned NOT NULL DEFAULT '0',
`max_updates` int(11) unsigned NOT NULL DEFAULT '0',
`max_connections` int(11) unsigned NOT NULL DEFAULT '0',
`max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
`plugin` char(64) COLLATE utf8_bin NOT NULL DEFAULT 'mysql_native_password',
`authentication_string` text COLLATE utf8_bin,
`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`password_last_changed` timestamp NULL DEFAULT NULL,
`password_lifetime` smallint(5) unsigned DEFAULT NULL,
`account_locked` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'

2.2.2 恢复数据

drop的方式删除数据后无法直接通过之前的binlog闪回恢复了,需要依赖于全备来恢复,关于备份恢复可以参考以下文章来恢复,此处不再赘述

mysql备份及恢复1

mysql物理备份及还原

3. 小结

对于删除表后的恢复其实不止以上这些方式,另外还可以通过操作系统级别进行恢复,但各种恢复方式均和实际场景有关,希望大家也自行探索或多参与技术交流,提高自己的技能水平。

本文转载自微信公众号【数据库干货铺】。

网友热搜:

  • 相关推荐
  • 大家在看
  • MySQL怎么删除#sql开头的临时表

    巡检时发现服务器磁盘空间不足,通过查看大文件进行筛选是发现有几个#sql开头的文件,且存在超过100G及10G以上的文件。

  • 云计算核心技术Docker教程:pause/unpause命令详解

    在docker客户端命令行中我们可以使用pause暂停容器中所有的进程,使用unpause恢复容器中所有的进程。使用pause/unpause命令暂停正在运行的镜像容器其用途是在各个容器之间调试时使用。示例docker pause :暂停容器中所有的进程。语法docker pause [OPTIONS] CONTAINER [CONTAINER...]例如,暂停nginx容器里面的进程,命令如下:$ docker pause mynginx示例docker unpause :恢复容器中所有的进程。语法docker unpause [OPTIONS] CON

  • 为避免种族歧视,MySQL宣布删除黑名单白名单等术语

    MySQL数据库的开发人员日前宣布,计划在数据库源代码和文档中停止使用并替换 master、 slave、 blacklist(黑名单)和whitelist(白名单)等术语。

  • 黑名单、白名单完全不能用了!MySQL、Twitter等纷纷删除

    作为全球第二大流行数据库,MySQL也受到了众所周知事件的影响,不得不做出一些调整。MySQL开发人员今天宣布,计划在数据库源文件、文档中停止使用master(主)、slave(从)、blacklist(黑名单)、

  • MySQL怎么连接 全部连接方式汇总

    1. 连接方式1.1 方式1 /usr/local/mysql5.7/bin/mysql -p此方法默认采用root@localhost用户登录,1.2 方式2/usr/local/mysql5.7/bin/mysql -uroot -p -S /app/data/mysql3307/tmp/mysql.sock1.3 方式3/usr/local/mysql5.7/bin/mysql -uroot -p -h 127.0.0.1 -P3307此方式的用户和方式 2 的不同,如下 root@localhost 和root@127.0.0.1是不同的用户1.4 方式4 /usr/local/mysql5.7/bin/mysql -uroot -p -h localhost -P3307此方式和?

  • MySQL一直自动重启解决办法

    近期,测试环境出现了一次MySQL数据库不断自动重启的问题,导致的原因是强行kill -9 杀掉数据库进程导致,报错信息如下:2019-07-24T01:14:53.769512Z 0 [Note] Executing SELECT * FROM INFORMATION_SCHEMA.TABLES; to get a list of tables using the deprecated partition engine. You may use the startup option --disable-partition-engine-check to skip this check.2019-07-24T01:14:53.769516Z 0 [Note] Beginning of

  • 快手发布3款洛阳地标AR魔表,打造“AR魔表+景区+短视频”新模式

    “栾川老君山AR特效,太酷啦”“老君山最新特效紫气东来”“看到这个要走运了”……近日,前往洛阳老君山游玩的快手用户被景区专属的地标AR魔法表情所吸引,发布快手短视频与网友们分享福气。快手打造打造“AR魔表+景区+短视频”新模式,用AI技术赋能游客、景区和传统文化传播。在这些作品中可以看到,老君山景点之一的金殿之下仙气腾腾,而大殿周围则环绕着金光闪闪的“道可道,非常道;名可名,非常名。无名天地之始,有名万物之?

  • MYSQL的ibtmp1文件太大怎么处理

    1. 啥情况呀测试环境机器磁盘空间不足的告警打破了下午的沉寂,一群人开始忙活着删数据。但是,不久前刚清理了一波数据,测试环境在没做压测的情况下不至于短短一个月不到就涨了200G数据,于是,我悄悄的进入数据目录下,发现一个不寻常的点,ibtmp1 文件有192G ll -hibtmp1 -rw-r----- 1 mysql mysql 192G Aug 12 16:20 ibtmp12. 怎么处理2.1 简单说明ibtmp1 是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_pat

  • MySQL忘记密码怎么办 密码重置详细教程

    如果忘记密码,对于MySQL而言处理起来也相对比较简单。但需要修改配置,重启数据库。可以按照如下步骤处理。

  • MySQL敏感数据怎么加密 数据加密解密教程

    大数据时代的到来,数据成为企业最重要的资产之一,数据加密的也是保护数据资产的重要手段。本文主要在结合学习通过MySQL函数及Python加密方法来演示数据加密的一些简单方式。

  • 天王表服务:坚守岗位,贴心服务

    自新型冠状病毒感染的肺炎疫情发生以来,天王表公司统一部署,各柜台高度重视客户服务工作。柜员们坚守岗位,共同应战疫情,应对危机,在门店全力保障每一位客户权益,做到了天王表服务一直到位,客户体验从不掉线。病毒隔离,服务不隔离。柜台服务首先最重要的就是提高对本行业的思想认识水平,要把本企业的工作摆在全国一盘棋的大格局中,只有切实提高了思想认识水平,天王表服务才能准确定位,服务质量才能经得起时间和业主的检

  • MySQL传统点位复制在线转为GTID模式复制

    1. GTID优缺点MySQL传统点位复制在5. 7 版本前是主要的主从复制模式,而随着MySQL5. 6 版本引入GTID,并且MySQL5. 7 进行各方面的优化以后,在mySQL5.7(尤其是MySQL5.7.6)版本后GTID模式的主从复制方式成为一个新的选择方式。要使用GTID模式,首先也需知其优缺点,其主要的优缺点如下:1.1 优点a) 更简单的实现failover,无需找log_file和log_Pos。b) 更简单的搭建主从复制。c) 复制集群有一个统一的方式识别复制位置,给集群管理

  • 腕间温情时光,东方双狮为你“表”露心意!

    \ 礼物 \ 的选择也是对个人审美的一次小小考验,纵观各种礼物选择,腕表可谓是最不容易出错,也最能表达心意的礼物了。无论是情侣、朋友、家人,一块小小的腕表,可以承载浓厚的情谊。东方双狮手表是诞生于 1950 年的日本手表品牌,旗下拥有「东方双狮」和「东方星」两个独立品牌。东方双狮表具有悠久的制表历史、高质量产品、丰富的设计元素以及合理的售价优势,在近 70 年的发展中受到全球超过 70 个国家和地区的消费者和钟表鉴?

  • MySQL数据备份及恢复教程 巧用xtrabackup工具备份恢复

    本文将通过应用更为普遍的物理备份工具xtrabackup来演示数据备份及恢复的第二篇内容。

  • 奇迹暖暖梦境归途活动全攻略 永昼迷境爬塔属性权重表

    ​奇迹暖暖在31日开启了梦境归途的爬塔活动,很多玩家还不清楚怎么玩这个活动,下面就来为大家详细的介绍一下奇迹暖暖梦境归途活动全攻略。

  • 纯白之烁 怦然星动 盛时携手Rado瑞士雷达表 推出十二星座限量版腕表

    感受十二星座不同的风格和姿态,敢于呈现个体的不同之美。2020年,全球知名钟表零售商盛时携手Rado瑞士雷达表,推出全新十二星座限量版腕表专享礼盒套装,将“Feel It 感不同,敢不同“的品牌理念,与不同星座的神秘融合,幻化为腕间的纯白之烁,致敬独立与个性之美。盛时×Rado瑞士雷达表十二星座限量版腕表套装此次,盛时与Rado瑞士雷达表的强强联手,是双方对时间之美的真切表达。该全新系列是品牌继成功推出True真系列十二星座

  • 三星Galaxy Watch3手表将搭载摔倒检测功能,减少意外事故发生

    ​外媒称,三星的未来将发布的智能手表Galaxy Watch 3 将搭载“摔倒检测”功能。“摔倒检测”是指在用户摔到之后,手表将鸣响警告一分钟,如果用户没有反馈,手表将自动将地址和 5 秒录音发给紧急联系人。

  • 2020央视315晚会直播入口 7月16日直播时间表

    2020年央视315晚会将会在7月16日晚上举行,根据央视的介绍,今年315晚会的主题是“凝聚力量、共筑美好”,晚会将在7月16日晚上20:00开始直播,以下是本次晚会的具体直播地址。

  • 2020上海国际电影节排片表 上海电影节门票购买渠道汇总

    7月17日,上海国际电影节官方宣布,第二十三届2020年上海国际电影节于 7 月 25 日至 8 月 2 日举办,第二十六届上海电视节于 8 月 3 日至 8 月 7 日举办,官方还公布了电影节排片表发布时间以及购票方式,以下我们来看下如何购买上海电影节的影票。

  • 微信聊天记录怎么彻底删除?不这样删除,很容易被恢复!!

    微信聊天记录怎么彻底删除?现在科技越来越发达了,广大用户很少再用打电话发短信的形式来联系,微信已成为大家日常最常使用的社交软件了。频繁的使用,难免会在微信上留下大量的聊天记录,那么如何才能将隐私记录彻底清除干净呢?今天小编分享几个小方法,让你不需要再为个人隐私被窥视而烦恼! 分享方法一:打开微信设置,点击通用,打开存储空间,选择清理缓存。 如果你想删除所有微信聊天记录,最好的方法不是一个一个去删除,而是直接选择?

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议
  • 热门标签