0

我想实现一些 MySQL 命令在远程服务器上运行以从数据库中删除所有表。因此,我使用 SSH 连接(SSH 使用公钥登录)并运行 mysql 命令,所有这些都在 bash 脚本中:

#!/bin/bash
ssh user@example.com "mysql -uadmin -p\$(cat /etc/psa/.psa.shadow) exdb<<EOFMYSQL
SET FOREIGN_KEY_CHECKS = 0;
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
  FROM information_schema.tables 
  WHERE table_schema = 'exdb';

SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
EOFMYSQL"

MySQL 部分本身成功,当我通过 SSH 连接到我的远程服务器时,登录到 mysql 并发出命令。但是,在这个脚本中,我得到:

第 8 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“NULL”附近使用正确的语法

我认为这个错误与引用有关-p\$(cat /etc/psa/.psa.shadow),但是我不知道如何解决这个问题。

如果有人能指出问题所在,我会很高兴。

4

1 回答 1

1

您在数据库中没有表,因此您没有从 select 中获得任何结果,并且GROUP_CONCAT返回 NULL,并且DROP TABLEwith的 concat NULLis... NULL

使用NULLas a statement 准备语句会出错。

显示问题的 SQLfiddle

于 2013-05-15T17:30:10.280 回答