截断所有表(除了所需的表)不起作用

时间:2017-03-30 09:20:52

标签: mysql

我正在尝试在终端中编写一个命令,它会截断数据库中的所有表,除非不截断指定的那些表。这是我的命令

// create tmp database
mysql -h localhost -u root -proot -e "create database testDb;"
// create tmp user and grant all PRIVILEGES for testDb
mysql -h localhost -u root -proot -e "GRANT ALL PRIVILEGES ON testDb.* TO tmpUser@localhost IDENTIFIED BY 'tmpPass'; FLUSH PRIVILEGES;"
// truncate all tables except table1 and table2
mysql -u tmpUser -ptmpPass -e "SET FOREIGN_KEY_CHECKS=0; SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, '; ') FROM information_schema.tables WHERE table_schema = 'testDb' AND table_name NOT IN ('table1', 'table2');"

终端输出

+-----------------------------------------------------------------------+
| CONCAT('TRUNCATE TABLE ', TABLE_NAME, '; ')                           |
+-----------------------------------------------------------------------+
| TRUNCATE TABLE tableX;                                                |
| TRUNCATE TABLE tableY;                                                |
| TRUNCATE TABLE tableZ;                                                |
+-----------------------------------------------------------------------+

这没关系,因为基于日志所有表都得到TRUNCATED,除了table1和table2,但问题是当我在数据库中检查表是否被截断时,数据仍然存在。因此,如果我检查tableX,tableY或tableZ,它仍然有记录。

所以问题是:我的TRUNCATE TABLES命令有问题吗?我可以以某种方式检查是否有一些未完成的mysql进程可能。如何调试? 我正在研究Vagrant机器(只是告诉它是否可能是一个案例)。

如果您需要任何其他信息,请告诉我,我会提供。谢谢!

1 个答案:

答案 0 :(得分:1)

我用一些shell脚本解决了这个问题...就像这样

diff