mysql ddl不阻塞dml_修复mysql.db系统表不能DDL/DML的问题

本文介绍了如何解决mysql.db系统表损坏导致不能执行DDL/DML操作的问题。通过mysqldump导出数据,删除并重建系统表,手动更新MySQL系统,以及恢复用户权限,最终成功修复了问题。
摘要由CSDN通过智能技术生成

eb4a1d6d51b50ca6c54698bf8100ffed.png

修复 mysql.db 表相关问题(问题如下)

描述问题:系统表已经损坏,不能 DDL/DML

[uniapply@DBA0001 ~]$ sudo /use/sbin/mysql -uroot -p'**********'

mysql> create user 'biller'@'134.77.19.107' identified by '^B$WEF0Brqo%PZhI';

ERROR 1728 (HY000): Cannot load from mysql.db. The table is probably corrupted

mysql> quit;

[uniapply@DBA0001 ~]$

一、解决问题(思路)

[uniapply@DBA0001 ~]$ sudo /use/bin/mysqldump --all-databases --set-gtid-purged=OFF -uroot -p'**********' > /tmp/all.sql

[uniapply@DBA0001 ~]$ sudo /use/bin/mysqldump mysql user --set-gtid-purged=OFF -uroot -p'**********' > /tmp/mysql-user.sql

[root@itpuxdb01 ~]#

二、查看创建表的 DDL 语句

[uniapply@DBA0001 ~]$ sudo /use/sbin/mysql -uroot -p'**********'

mysql> show create table mysql.db;

mysql> drop table mysql.db;

mysql> commit;

mysql> quit;

[uniapply@DBA0001 ~]$

三、创建系统表 And 修复系统表

[uniapply@DBA0001 ~]$ sudo /use/sbin/mysql -uroot -p'**********'

CREATE TABLE `mysql`.`db (

-> `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',

-> `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',

-> `User` char(16) 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',

-> `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',

-> `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',

-> `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',

-> `Execute_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',

-> PRIMARY KEY (`Host`,`Db`,`User`) USING BTREE,

-> KEY `User` (`User`) USING BTREE

-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Database privileges';

Query OK, 0 rows affected (0.00 sec)

mysql> REPAIR TABLE mysql.db;

mysql> flush privileges;

mysql> quit;

[uniapply@DBA0001 ~]$

四、手动更新 MySQL 系统相关

[uniapply@DBA0001 ~]$ sudo /use/sbin/mysql_upgrade -uroot -p'*********'

五、备份恢复

[uniapply@DBA0001 ~]$ cd /tmp/

[uniapply@DBA0001 tmp]$ sudo cat mysql-user.sql | grep INSERT > /tmp/111.sql

[uniapply@DBA0001 tmp]$ sudo /use/sbin/mysql -uroot -p'**********'

mysql> source /tmp/111.sql

mysql> commit;

mysql> quit;

[uniapply@DBA0001 tmp]$

六、到此全部处理完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值