【问题标题】:Mysqldump more than one table?mysqldump 多张表?
【发布时间】:2010-06-01 11:29:07
【问题描述】:

如何使用mysqldump 转储某些以公共前缀开头的表?

【问题讨论】:

    标签: mysql mysqldump


    【解决方案1】:

    呵呵,这是一种 hack,但它可以工作(使用 bash):

    mysqldump -u USER -p DATABASE $(mysql -u USER -p -D DATABASE -Bse "show tables like 'PREFIX%'") > /tmp/DATABASE.out
    

    根据需要更改 ALLCAPS 单词。

    【讨论】:

    • this other answer是一个骗局,但我认为它更深入一点。 stackoverflow.com/a/5269543/8047
    • @unutbu 我在尝试实现此功能时收到以下错误:“mysqldump: unknown option '-D'”。有什么想法吗?当我只运行括号内的 mysql 部分时,它会输出我想要转储的表 - 但是当我尝试在 mysqldump 语句中使用它时它会抛出错误。
    • @dayne:我发布的命令使用 bash-ism:$(...) 在子进程中运行子命令。您收到的错误消息看起来像mysqldump 已发送所有 参数——甚至高达-D,这可能是因为$(...) 未被识别为指示子命令。也许您没有使用bash?如果是这种情况,您需要将$(...) 转换为您的shell 的正确语法。例如,您可能需要将 $(...) 替换为反引号。
    • @unutbu 非常感谢您的回复。我刚刚读到 CMD 不支持子命令 - 所以我必须找出其他东西。
    【解决方案2】:

    您可以创建 backup.sh 脚本:

    BACKUP_DIR="/path/to/backups"
    
    DB_HOST="domain.com"
    DB_USER="user"
    DB_PASS="pass"
    
    PREFIX="phpbb"
    
    TMP_LIST = mysql --host=$DB_HOST --user=$DB_USER --password=$DB_PASS -e "show databases;" | grep $PREFIX
    
    # just get to database name column (may be $1, don't remember)
    TMP_LIST = cat $TMP_LIST | awk '{print $2}'
    
    # Getting dbs
    mkdir $BACKUP_DIR/tmp
    for db in $TMP_LIST ; do
        mysqldump --host=$DB_HOST --user=$DB_USER --password=$DB_PASS --opt $db > $BACKUP_DIR/tmp/$db.sql
        zip -mj $BACKUP_DIR/tmp/$db.sql.zip $BACKUP_DIR/tmp/$db.sql 2>&1
    done
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2011-05-23
      • 1970-01-01
      • 2016-10-18
      • 2012-04-04
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多