我正在尝试在终端中编写一个命令,它会截断数据库中的所有表,除非不截断指定的那些表。这是我的命令
// 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机器(只是告诉它是否可能是一个案例)。
如果您需要任何其他信息,请告诉我,我会提供。谢谢!
答案 0 :(得分:1)
我用一些shell脚本解决了这个问题...就像这样
diff