【问题标题】:mysql export tables using wildcardmysql 使用通配符导出表
【发布时间】:2013-06-19 22:02:17
【问题描述】:

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

理想情况下我会这样做:

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

显然这行不通。但是这样做的正确方法是什么?

【问题讨论】:

  • 我认为你不能单独使用mysqldump 来做到这一点,但你可以编写一个脚本来做到这一点。您使用的是什么操作系统? (我正在寻找linux中的解决方案)
  • 另外,您可能想阅读这篇文章:stackoverflow.com/questions/5268936/…

标签: mysql


【解决方案1】:

如果它有前缀,则使用这样的 GRANT 使用户具有对表的选择和锁定权限

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

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

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

使用这样的用户而不是 root 帐户也更安全

【讨论】:

    【解决方案2】:

    好的。这是一个使用 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. 要导出的表的前缀

    脚本的第一行

    我将这条线分成三部分:

    • 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 命令。


    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 2020-09-25
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2013-05-30
      相关资源
      最近更新 更多