备份 MySQL 数据库和 gzip

Tim*_*ers 2 mysql gzip

我试图从我的 MySQL 备份中获得更多的用处。当我的备份从 cron 作业完成时,我想对其进行 gzip。这是我迄今为止进行备份的脚本。

#!/bin/sh
date=`date -Iminutes`
mysqldump --all-databases > /var/sqlbackup/sqlbackup-$date.sql -pmypassword
find /var/sqlbackup/ -mtime 3 | xargs rm
Run Code Online (Sandbox Code Playgroud)

任何帮助都是有益的,即使它是关于如何做得更好的指针。

and*_*hky 10

这是我使用的备份/维护脚本:

#!/usr/bin/sh
#backup all mysql databases
# list MySQL databases and dump each
DIR=
DATESTAMP=$(date +%Y%m%d)
DB_USER=
DB_PASS=

# remove old backups
find ${DIR} -type f -mtime +5 -exec rm -rf {} \;


DB_LIST=`mysql -u $DB_USER -p"$DB_PASS" -e'show databases;'`
DB_LIST=${DB_LIST##Database}
for DB in $DB_LIST;
do
  FILENAME=${DIR}${DB}-${DATESTAMP}.sql.gz
  mysqldump -u $DB_USER -p"$DB_PASS" --opt --flush-logs $DB | gzip > $FILENAME
done

mysqlcheck -u $DB_USER -p"$DB_PASS" --all-databases > /root/mysql_backups/check_errors-${DATESTAMP}.log
Run Code Online (Sandbox Code Playgroud)

该脚本为每个数据库生成单独的 gzipped 备份,这样如果一个数据库出现问题,您就不必恢复整个服务器的数据库。它还包括一些 mysql 检查健全性并找到旧的数据库备份并删除它们。

根据要求恢复:

我不得不恢复几次。它发生了。

gunzip backup_file.sql.gz
mysql -u <username> -p  <database_name> < backup_file.sql 
Run Code Online (Sandbox Code Playgroud)

可能有一种更“单行”的方式来做这件事……但这就是它对我有用的方式。