MySQL分库备份

1、需求概述

  • 每天00:00备份MySQL数据库数据;
  • 每一个库生成一个文件,使用gzip压缩,文件名:backup_库名_yyyymmdd.sql.gz,注意yyyymmdd需要是前一天;
  • 备份文件保存在/backup/mysql/下面,每天创建新的日备份数据目录yyyymmdd,注意是前一天
  • 日志保存在/backup/mysql/下面,命名方式为:yyyymmdd.log

2、环境准备

操作系统:CentOS release 6.5
MySQL数据:MySQL 5.1.73

3、脚本说明

  • 判断备份目录是否存在,如果不存在就创建;
  • 使用mysql命令获取全部数据库列表;
  • 遍历全部数据列表,使用mysqldump命令进行备份

4、脚本编写

 1 #!/bin/bash
 2 
 3 # log file name
 4 LOG=/backup/mysql/$(date +%Y%m%d -d -1day).log
 5 
 6 # create backup directory
 7 BACKUP_DIR=/backup/mysql/$(date +%Y%m%d -d -1day)
 8 
 9 if [ ! -d "${BACKUP_DIR}" ]; then
10         echo "create backup directory ${BACKUP_DIR}" >> $LOG
11         mkdir ${BACKUP_DIR}
12 fi
13 
14 
15 # backup db data
16 for i in `mysql -uroot -p123456 -e "show databases;"`
17 do
18 
19         if [ "$i" != "Database" ]; then
20                 echo "start backup $i" >> $LOG
21                 mysqldump -uroot -p123456 -B "$i" --flush-privileges --single-transaction --master-data=2 --flush-logs --triggers --routines --events --hex-blob | gzip > ${BACKUP_DIR}/backup_"$i"_$(date +%Y%m%d -d -1day).sql.gz
22                 echo "end backup $i" >> $LOG
23         fi
24 
25 done
26 
27 echo "end backup" >> $LOG

5、定时任务

1 [root@xugf-test mysql]# crontab -e
2 0 0 * * * /bin/sh /root/scripts/db_backup.sh >/dev/null 2>&1

需要把输出重定向到空

6、重点命令

前一天yyyymmdd

date +%Y%m%d -d -1day

gzip

cat install.log | gzip > install.log.gz

mysql命令查询所有库

mysql -uroot -p123456 -e "show databases;"

mysqldump命令备份数据库

mysqldump -uroot -p123456 -B test --flush-privileges --single-transaction --master-data=2 --flush-logs --triggers --routines --events --hex-blob | gzip > /backup/mysql/20180515/backup_test_20180515.sql.gz
原文地址:https://www.cnblogs.com/xugf/p/9073974.html