如何在没有过多密码请求的情况下从终端循环

时间:2015-01-14 00:11:41

标签: mysql sql linux terminal centos

mysqllinuxCentOS 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;  

编辑:

有没有办法在不必将密码放在命令行日志中的情况下执行此操作?

2 个答案:

答案 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