我已经安排了一个 cron 作业来备份 ubuntu9.10 上的 mysql 数据库。我在 cron 文件中使用了以下条目。
37 4 * * * root /usr/bin/mysqldump -u root -p<mysql-password> --all-databases > /usr/backup/mysqlbkup/all-databases.sql
它将所有数据库备份到一个名为“all-databases.sql”的文件中。这就是我想要的。但如果我想恢复单个数据库,我将不得不恢复所有数据库。有什么技巧可以将所有 mysql 数据库单独备份到具有其数据库名称的目录中吗?
答案1
我建议你阅读:http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
您可以使用以下方法转储不同的数据库:mysqldump [options] --databases DB1 [DB2 DB3...]
您只需为每个数据库添加一个 cronjob:
37 4 * * * root /usr/bin/mysqldump -u root -p<mysql-password> --databases database1 > /usr/backup/mysqlbkup/databases1.sql
38 4 * * * root /usr/bin/mysqldump -u root -p<mysql-password> --databases database2 database3 > /usr/backup/mysqlbkup/databases2_3.sql
当然,您可以为所有不同的数据库创建一个 bash 脚本,然后从 crontab 运行该脚本。我还会将其 gzip 压缩。
祝你好运
答案2
就在这里。
对于拥有多个数据库(比如说 50 - 100 个)的人来说,一个接一个地输入将是一件痛苦的事情
您必须创建一个 bash/shell 文件,即带有“.sh”扩展名的文件,然后通过将其更改为可执行文件
chmod 777 <file_name>.sh
然后输入上面的代码并进行以下几处修改;
我们在这里做的是查询 mysql 以获取数据库列表,并将输出放入每个回合的循环中
database=`mysql --user=<enter username> --password=<enter password> -e "SHOW DATABASES"`
for db in $database; do
echo "$db"
mysqldump --user="<enter username>" --password="<enter password>" --databases "$db" > <path_to_store_your_database>/"$db".sql
gzip "$db"
done
最后,您将添加文件crontab
并安排备份时间。您也可以通过键入以下内容手动运行该命令:
bash <name of the file>.sh
或者
sh <name of the file>.sh