centos 如何从终端循环而不需要过多密码请求

6pp0gazn  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(121)

当从Linux(CentOS 7)终端运行下面的MySQL代码时,下面的命令似乎要求输入循环中每个表的密码。有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;

编辑

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

ngynwnxp

ngynwnxp1#

把密码放在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;
slsn1g29

slsn1g292#

考虑重新编写此语句,使其只使用两个数据库会话。一个会话生成要执行的语句列表并写入文件,第二个(单个)会话处理这些语句。第一个查询会话可能会出错,因此我会小心地将它们分成两个任务。
在第一个会话中,取消格式设置,并将标准输出重定向到文件

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

相关问题