【引言】 最近一个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 {} \;注意脚本最后使用了如下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 --forcefind命令还是很好用的,以下是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
【结语】
本文重点介绍了如何使用该工具编写一个生产环境使用的shell全备份脚本;脚本的重点在于一定要注意删除过期的备份集,否则磁盘空间多少都不够用。
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
如果大家觉得此文有帮助,欢迎关注个人微信公众号;
长按识别二维码或公众号搜索“一森咖记”