从mysql
(linux
)CentOS 7
运行以下terminal
代码时,以下命令似乎要求循环中的每个表的密码。有500多张桌子。输入密码500次以上是不合理的。如何修复下面的代码,以便它只要求密码几次?
mysql -u root -p -Nse 'show tables' DATABASE_NAME | while read table; do mysql -u root -p -e "SET FOREIGN_KEY_CHECKS = 0; truncate table $table" DATABASE_NAME; done;
编辑:
有没有办法在不必将密码放在命令行日志中的情况下执行此操作?
答案 0 :(得分:0)
将密码放在p(无空格)之后,说密码是PASSWORD
mysql -u root -pPASSWORD -Nse 'show tables' DATABASE_NAME | while read table; do mysql -u root -pPASSWORD -e "SET FOREIGN_KEY_CHECKS = 0; truncate table $table" DATABASE_NAME; done;
答案 1 :(得分:0)
考虑重写它,以便它只使用两个数据库会话。一个用于生成要执行到文件中的语句列表,另一个用于处理语句。第一次查询会话出现问题的可能性很大,所以我要小心将它们分成两个任务。
在第一个会话中,禁止格式化,并将stdout重定向到文件
SELECT 'set foreign_key_checks = 0;' AS stmt
SELECT CONCAT('TRUNCATE TABLE `',t.table_schema,'`.`',table_name,'`;') AS stmt
FROM information_schema.tables t
WHERE t.table_schema = 'mydatabase'
ORDER BY t.table_name ;
验证文件是否包含您想要的内容。
然后(另一个无用的cat)将该文件的内容传递给mysql
cat myfile | mysql -u me -p --database mydatabase