如何使用Mysqldump备份多个表?

15

我该如何使用mysqldump来导出以相同前缀开头的表?

2个回答

27

嘿嘿,这有点像是一个技巧,但它有效(使用bash):

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

根据需要更改大写字母单词。


这个答案与另一个重复,但我认为它更加深入。https://dev59.com/SW435IYBdhLWcg3wtCSQ#5269543 - Dan Rosenstark
@unutbu 当我尝试实现这个时,我遇到了以下错误:“mysqldump: unknown option '-D'”。有什么想法吗?当我仅运行括号内的mysql部分时,它会输出我想要转储的表 - 但是当我尝试在mysqldump语句中使用它时,它会抛出错误。 - dayne
@dayne:我发布的命令使用了一个bash-ism:$(...)来在子进程中运行一个子命令。你收到的错误信息看起来像是mysqldump接收到了所有参数,甚至包括-D,这可能是因为$(...)没有被识别为指示一个子命令。也许你没有使用bash?如果是这样的话,你需要将$(...)转换成适合你的shell的正确语法。例如,你可能需要用反引号替换$(...) - unutbu
@unutbu 非常感谢您的回复。我刚刚读到CMD不支持子命令,所以我必须想出其他办法。 - dayne

0

您可以创建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

希望它有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接