将 MYSQL 数据库转储到单独的文件中

将 MYSQL 数据库转储到单独的文件中

有没有人有一个一行程序(命令行)将所有数据库转储到单独的转储文件中,例如

forumdb.dump
wikidb.dump
etc.

答案1

为什么不呢,尽管这仍然是一个很长的句子:)

mkdir mysql-all-dumps ; for x in `mysql -u root -pXXXXXXXX -e "SHOW DATABASES;" | tr -d "| " | grep -vE '(Database|information_schema)'` ; do mysqldump -v -u root -pXXXXXXXXX $x > mysql-all-dumps/$x.sql ; done

确保用正确的 mysql 根密码替换 XXXX,并且 mysqldump 中的详细选项也是可选的。

答案2

我不认为有好的单行代码,但这里有一个脚本片段。你也许可以根据自己的使用情况进行调整。如果你想对数据库列表进行硬编码,你可能可以将其简化为一行代码。但我需要一些能够处理数据库添加和删除的东西。

OPTIONS="--verbose --lock-tables --flush-logs"

BACKUPDATE=`date +"%y%m%d%H"`

DBSQL="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA where SCHEMA_NAME!='information_schema' \
       AND SCHEMA_NAME!='performance_schema' order by SCHEMA_NAME"

# retrieve list of databases
DBS=`/usr/bin/mysql --defaults-extra-file=/etc/mysql/credentials.cnf --batch \
                                  --skip-column-names --execute "$DBSQL"`
# cleat it up a bit
DBS=`echo $DBS | tr -d '\n' | sed -e "s/ \+/ /g"`

# backup each database into a separate file
for DB in $DBS; do
  /usr/bin/mysqldump --defaults-extra-file=/etc/mysql/credentials.cnf ${OPTIONS} $DB > /backup_${DB}_${BACKUPDATE}
done

答案3

可以做到这一点

cd mysql_data_dir ; for d in $(ls -d */ | xargs basename) ; do mysqldump $d > /path/to/dumps/$d.dump; done

基本上列出数据目录中的所有目录,然后直接转储它们。如果我没有设置作业来备份单个文件,我就会临时执行上述操作。

相关内容