如何从终端循环而没有过多的密码请求(how do i loop from terminal with

2019-10-21 14:31发布

当运行下面mysql从一个码linuxCentOS 7terminal ,下面的命令似乎是要求输入密码在循环的每个表。 有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;  

编辑:

有没有办法做到这一点,而不必把密码在命令行日志?

Answer 1:

把密码的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;


Answer 2:

考虑重新写这一点,所以它仅使用两个数据库会话。 之一,以产生语句列表以执行到一个文件中,和第二(单)来处理的语句。 有潜力的东西出问题与第一查询会话,所以我要小心他们分成两个任务。

在第一个环节,抑制格式和标准输出重定向到一个文件

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 ;

验证该文件包含了你想要的东西。

然后,(其它无用的使用猫)管道将文件的内容到MySQL

cat myfile | mysql -u me -p --database mydatabase


文章来源: how do i loop from terminal without excessive password requests