数据库自动备份脚本使用
备份
Linux
请先在测试环境进行测试
根据情况调整以下内容中的参数,并保存为backup.sh 并放置在数据库所在服务器上(位置无限制)
echo '##########################################'
echo '###### The database is automatically backed up at 03:00 am every day ######'
echo '##########################################'
db_user="username"
db_password="password"
db_name="test"
db_container_name="mysql"
backup_dir="/usr/local/db/backup"
time="$(date +"%Y%m%d")"
echo 'Get system date: ' $time
if [ ! -e "$backup_dir" ]; then
mkdir $backup_dir
fi
cd $backup_dir
echo ${backup_dir}
echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
docker exec ${db_container_name} mysqldump -u${db_user} -p${db_password} ${db_name} --quick --single-transaction > ${db_name}_${time}.sql
find ${backup_dir} -name ${db_name}"*.sql" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")
P.S. 执行失败时请检查Windows与Linux符号差异问题,并且避免以文本文档(.txt)来新建脚本
进入脚本所在目录并执行以下命令:
chmod u+x backup.sh
执行命令:
./backup.sh
观察控制台输出,并检查生成的SQL文件。
执行以下命令:
crontab -e
在文本中插入以下内容:
0 3 * * * /usr/local/db/backup.sh >> /usr/local/db/log/backup.log 2>&1
每天凌晨三点执行备份
> /usr/local/db/log/backup.log 2>&1 是将任务执行的日志输出到指定文件。如果不需要日志则可以去除这一段。
保存并退出,任务会自动运行。
导入备份数据
按普通SQL文件导入方式使用即可
注意:
有时,备份的SQL文件在开头会附带这一行:mysqldump: [Warning] Using a password on the command line interface can be insecure. 。如果有,则需要删除该行再执行导入操作。
- 出现
Got a packet bigger than 'max_allowed_packet' bytes 错误
打开数据库,执行以下查询:
SELECT @@max_allowed_packet / 1024 / 1024;
得到当前最大允许读取包大小,如果小于你要导入的SQL文件大小,则执行以下命令来提高该限制大小:
SET GLOBAL max_allowed_packet=1000000000;
P.S. 该设置在数据库重启后失效
导入的SQL文件大小,则执行以下命令来提高该限制大小:
SET GLOBAL max_allowed_packet=1000000000;
P.S. 该设置在数据库重启后失效
|