note-taker:Ethan_Yang
recording time: 2019/07/18
number of docs:5
【引言】
《生产环境:mysqlbackup物理备份的一种shell脚本实现》
此文讲述了企业版MySQL使用mysqlbackup工具进行物理备份的一种shell脚本实现,简要温习下,其核心代码为:
############ Declare environment variables #########
record_log=/mysqldata/backup/
log_name=physical_fullback_record.log
backup_dir=/mysqldata/backup/back_images
metadata_dir=/mysqldata/backup/back_metadata
mysqlbackup --user=root --password=XXXXXX \
--socket=/mysqldata/tmp/mysql.sock --host=localhost \
--backup-image=$backup_dir/physical_fullback_`date '+%m-%d-%Y'`.mbi \
--backup-dir=$metadata_dir/fullback_info_`date '+%m-%d-%Y'` --compress-level=9 backup-to-image
此为物理备份的核心命令
### delete the physical_images and metadata_infor from 7 days ago ###
images_dir=/mysqldata/backup/back_images
find $images_dir -type f -name "physical_fullback_*.mbi" -mtime +7 -exec rm -rf {} \;
metadata_dir=/mysqldata/backup/back_metadata
find $metadata_dir -type d -name "fullback_info_*" -mtime +7 -exec rm -rf {} \;
删除7天以前的备份集镜像和备份元数据。
有朋友想问:逻辑备份的核心代码该怎么写?
其实也很简单,只要使用mysqldump命令替换掉上述两个核心部分的内容即可,今天在写了一个脚本,测试环境试运行无误后,也开始在生产环境下较小的库中开始了运行,脚本如下:
#######################################################
# $Name: mysql_logical_fullback.sh
# $Version: v1.0
# $Author: ethan_yang
# $Create Date: 2019-07-16
# $Description: MySQL full_backup all-databases
#######################################################
#!bin/bash
PATH=$PATH:$HOME/bin
export PATH=/mysqlsoft/mysql/bin:$PATH
backup_dir=/mysqldata/backup
backup_log=full_backup_dcm.log
echo "--------------------Full Backup Starting------------------" >> $backup_dir/$backup_log
date >> $backup_dir/$backup_log
/usr/local/mysql/bin/mysqldump --single-transaction --max_allowed_packet=1024M --master-data=2 \
--all-databases -E -R --triggers --set-gtid-purged=off --socket=/tmp/mysql.sock \
-uroot -pAirchina_869 > /mysql/backup/logical_fullbackup_`date '+%m-%d-%Y'`.sql
echo "--------------------Full Backup Ended------------------" >> $backup_dir/$backup_log
date >> $backup_dir/$backup_log
backup_log=/mysqldata/backup
find $backup_log -type f -name "logigal_fullDB_*.sql" -mtime +7 -exec rm -rf {} \;
每天凌晨开始进行逻辑全备份,定时脚本为:
[root@dcm-maindb ~]# crontab -l
0 0 * * * /mysqldata/backup/full_backup.sh >/dev/null 2>&1
真实环境验证逻辑备份和物理备份的时间各位多少,如下mysql库大小为约200G。
备份出来的文件大小:
[root@dcm~]# du -sh physical_fullback_07-18-2019.mbi \
logical_fullbackup_07-17-2019.sql
284G physical_fullback_07-18-2019.mbi
245G logical_fullbackup_07-17-2019.sql
逻辑备份备份时间为:
--------------------Logical Full Backup Starting------------------
2019年 07月 17日 星期三 16:48:59 CST
2019年 07月 17日 星期三 19:19:04 CST
--------------------Logical Full Backup Ended------------------
耗时:2小时31分钟
物理备份时间较长为:
--------------------physical Full Backup Starting------------------
2019年 07月 18日 星期四 07:37:06 CST
2019年 07月 18日 星期四 08:46:06 CST
--------------------physical Full Backup Ended------------------
耗时:1小时9分钟
上述逻辑备份和物理备份的耗时时间对比还是很明显。
【结语】
-
延续上一篇文章讲述mysqlbackup物理备份的文章,本文重点介绍了如何使用官方mysqldump逻辑备份工具,编写了一个生产环境使用的shell全备份脚本;
2.从结果上来看,物理备份比逻辑备份快一倍的速度,结果上还是比较满意;但随着库大小的增加,如果库大小到了近T级别,MySQL官方mysqlback物理备份方式的依旧不是很乐观,这时候就必须要考虑追加增量备份了;后续推文会追加增量备份,看下逻辑增量备和物理增量备的时间差比,以及各自的库恢复时间对比。
3.MySQL逻辑备份shell脚本已经上传至个人github上,有兴趣的朋友可以参考下。链接为:https://github.com/polestarYang/mysqlgit.git