有没有人有一个一行程序(命令行)将所有数据库转储到单独的转储文件中,例如
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
基本上列出数据目录中的所有目录,然后直接转储它们。如果我没有设置作业来备份单个文件,我就会临时执行上述操作。