mysql - 使用 shell 脚本删除多个 mysql 数据库

标签 mysql linux shell

我正在将一个包含所有数据库的大型 SQL 文件从服务器 A 迁移到服务器 B。在导入该文件之前,我需要删除将在服务器 B 上导入时重新创建的所有数据库。

如何使用 shell 脚本以编程方式删除多个 mySQL 数据库,同时保留特定数据库,例如 information_schema .

最佳答案

以下内容选择您的 mySQL 用户可用的所有数据库。然后,它使用 grep 过滤出您想要保留的数据库。

DBUSER='user'
DBPASS='password'
SQLFILE='/path/to/file/databases.sql'

echo '* Dropping ALL databases'

DBS="$(mysql -u$DBUSER -p$DBPASS -Bse 'show databases' |
       grep -v -e '[dD]atabase' -e mysql -e information_schema -e test)"

for db in $DBS; do
    echo "Deleting $db"
    mysql -u$DBUSER -p$DBPASS -Bse "drop database $db; select sleep(0.1);"
done

有一些部分答案,但我希望这会节省一些人的时间。

提示:您可以使用 $ echo $DBS 进行测试,以查看在键入第一个命令后将选择删除哪些数据库。 DBS="$(mysql -u$DBUSER -p$DBPASS -Bse '显示数据库' | grep -v DatabaseToFilter)"

关于mysql - 使用 shell 脚本删除多个 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261085/

相关文章:

Javascript 选择开关选择更改

linux - 如何使用 CGI 和 Perl 的 Net::OpenSSH 模块在远程 Linux 服务器上执行系统命令?

bash - 将 stdout 和 stderr 管道传输到 shell 脚本中的两个不同进程?

bash - 在多行上编写 SSH 命令

mysql - 为什么 MySQL 不优化这个简单的查询并从缓存中提供结果?

php - 插入新值时 MySQL/CodeIgniter PHP 出现数据库错误

linux - 查找特定文件夹,然后在其中的特定文件中搜索一个词

python - 如何仅过滤 Bash(linux)或 Python 文件中的可打印字符?

string - 如果字符串包含 case 语句

java - JPQL - 计算时间戳之间的差异