生产环境:mysqlbackup物理备份的一种shell脚本实现

																					note-taker:Ethan_Yang 
																					recording time: 2019/07/18 
																							number of docs:5

在这里插入图片描述
【引言】
最近一个MySQL需求,当库的数据量上去了后,在>100G的时候,使用MySQL自带的逻辑备份工具mysqldump大概需要1个小时时间。当数据库达到500G以上时,备份时间往往变得不可忍受,如果再加上库恢复时间,则整个业务中断时长将变得不可忍受。那有什么好的好方法能够缩短T级别以下的MySQL库的备份?我们首先想到的是使用物理备份。

物理备份方式有很多,常用的有:Percona xtrabackup、mysqlbackup。这里简单介绍下大家使用比较广泛的第三方开源工具xtrabackup,想具体了解的同学请想看【参考3】链接。

在这里插入图片描述
因公司使用的是企业版(MySQL Enterprise Server - Commercial);故,本文将要介绍物理备份工具使用mysqlbackup,重点是如何使用该工具编写一个生产环境使用的shell全备份脚本。

对于物理备份和逻辑备份,如下有简介,想了解的朋友可以看下官方解释

在这里插入图片描述
以下是本人编写的可使用于生产的一个shell全备份脚本;

[root@mysql-01 backup]# cat  mysql_physical_fullback.sh
#!/bin/bash
#######################################################
# $Name: mysql_physical_fullback.sh
# $Version: v1.0
# $Author: ethan_yang
# $Create Date: 2019-07-16
# $Description: MySQL full_backup all-databases
#######################################################
 
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=/usr/local/mysql/bin:$PATH:$HOME/bin
export PATH
 
###################   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
 
echo "--------------------Full Backup Starting------------------"  >> $record_log/$log_name
date >> $record_log/$log_name
 
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'` backup-to-image
 
date >> $record_log/$log_name
echo "--------------------Full Backup Ended------------------"  >> $record_log/$log_name
 
##########  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 {} \;

设置定时任务,为每周1,3,5的22点整开始备份

[root@mysql-01 ~]# crontab -l
0 22 * * 1,3,5 /mysqldata/backup/mysql_physical_fullback.sh >/dev/null 2>&1 

注意脚本最后使用了如下shell命令,来删除7天以前的备份镜像和备份元数据信,即备份集只保留7天内的镜像文件。
在这里插入图片描述
其中,-type f为找出符合条件的文件,-type d 为找出符合条件的目录,并传递给rm进行删除。

物理恢复命令如下:

mysqlbackup --defaults-file=/etc/my.cnf --datadir=/mysqldata/data --backup-image=/mysqldata/backup/back_images/physical_fullback_16-07-2019.mbi --backup-dir=/mysql/tmp1 copy-back-and-apply-log --force

find命令还是很好用的,以下是find命令的几种常用方式:

根据文件类型进行搜索

find . -type 类型参数

类型参数列表:

Ø f 普通文件

Ø l 符号连接

Ø d 目录

Ø c 字符设备

Ø b 块设备

Ø s 套接字

Ø p Fifo

UNIX/Linux文件系统每个文件都有三种时间戳:

Ø 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。

Ø 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。

Ø 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

搜索最近七天内被访问过的所有文件

Ø find . -type f -atime -7

Ø 搜索恰好在七天前被访问过的所有文件

Ø find . -type f -atime 7

Ø 搜索超过七天内被访问过的所有文件

Ø find . -type f -atime +7

Ø 搜索访问时间超过10分钟的所有文件

Ø find . -type f -amin +10

Ø 找出比file.log修改时间更长的所有文件

Ø find . -type f -newer file.log

Ø 根据文件大小进行匹配

find . -type f -size 文件大小单元

Ø 文件大小单元:

Ø b —— 块(512字节)

Ø c —— 字节

Ø w —— 字(2字节)

Ø k —— 千字节

Ø M —— 兆字节

Ø G —— 吉字节

搜索大于10KB的文件

Ø find . -type f -size +10k

Ø 搜索小于10KB的文件

Ø find . -type f -size -10k

Ø 搜索等于10KB的文件

Ø find . -type f -size 10k

【结语】

  1. 本文重点介绍了如何使用该工具编写一个生产环境使用的shell全备份脚本;脚本的重点在于一定要注意删除过期的备份集,否则磁盘空间多少都不够用。

  2. MySQL也是一直在学习中,该脚本已经上传至github上,有兴趣的朋友可以参考下。链接为:

    https://github.com/polestarYang/mysqlgit
    在这里插入图片描述
    【参考1】

https://www.cnblogs.com/jiftle/p/9707518.html

【参考2】

https://www.csdn.net/gather_2a/MtTaIg3sNDM1NC1ibG9n.html

【参考3】

https://blog.51cto.com/xsboke/1925641

如果大家觉得此文有帮助,欢迎关注个人微信公众号;

长按识别二维码或公众号搜索“一森咖记”

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值