使用通配符的mysql导出表

时间:2013-06-19 22:02:18

标签: mysql

我想使用通配符导出以特定前缀开头的表列表。

理想情况下,我会这样做:

mysqldump -uroot -p mydb table_prefix_* > backup.sql

显然这不起作用。但是这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

如果它有前缀,请使用GRANT这样的用户选择具有select和lock权限的用户

GRANT SELECT, LOCK TABLES ON  `table\_prefix\_%` . * TO  'backup-user'@'localhost';

然后不是以root身份运行mysql dump,而是使用选项--all-databases

将其作为backup-user运行

由于备份用户只对这些表具有选择和锁定权限,因此它们是唯一存在的权限。

使用像这样的用户而不是root账号来更安全

答案 1 :(得分:0)

确定。这是一个使用Bash脚本的解决方案(我在Linux中测试过它)。

创建一个名为“ dumpTablesWithPrefix.script ”的文本文件并将其放入其中:

tableList=$(mysql -h $1 -u $2 -p$3 $4 -e"show tables" | grep "^$5.*" | sed ':a;N;$!ba;s/\n/ /g')
mysqldump -h $1 -u $2 -p$3 $4 $tableList

保存并使其可执行:

$ chmod +x dumpTablesWithPrefix.script

现在你可以运行它了:

$ ./dumpTablesWithPrefix.script host user pwd database tblPrefix > output.sql

现在让我解释一下:

命令行参数

Bash脚本在变量$1$2$3等中存储命令行参数。所以我需要告诉你的第一件事是你需要的参数的顺序:

  1. 主机(如果mysql服务器在您的机器中,请写localhost
  2. 您的用户
  3. 您的密码
  4. 数据库的名称
  5. 您要导出的表格的前缀
  6. 脚本的第一行

    我将这一行分为三部分:

    • mysql -h $1 -u $2 -p$3 $4 -e"show tables"

    这篇文章检索数据库的完整表列表,每行一个表。

    • | grep "^$5.*"

    此片段使用您指定的前缀过滤表格列表。

    • | sed ':a;N;$!ba;s/\n/ /g'

    最后一块(我在这里找到的一块宝石:How can I replace a newline (\n) using sed?)用空格替换所有“新行”字符。

    将这三个部分串在一起,抛出过滤后的表格列表并将其存储在tableList变量中。

    脚本的第二行

    • mysqldump -h $1 -u $2 -p$3 $4 $tableList

    这一行只是执行您需要的MySQL Dump命令。


    希望这有帮助