简易的 MySQL 数据全量日备

备份脚本

首先确定下目录

1
2
3
4
5
6
## 总目录
/mnt/data/backups
## 内容
- mysql-back.list 指定备份数据库名
- mysql_backups.sh 备份脚本
- mysqldump.log 备份日志

mysql-back.list

1
2
3
## 备份数据库名
test_db
test_db2

mysql_backups.sh

备份前推20天内的db数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
#This replication for Ali RDS
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin
export PATH

DAT=`date +%m%d`
HOR=`date +%H`
begin=`date +%F" "%T`
DIR=/mnt/data/backups/db

if [[ ! -d $DIR/$DAT ]];then
mkdir $DIR/$DAT
fi

for i in `cat /mnt/data/backups/mysql-back.list`
do
/bin/mysqldump -uroot -p密码 $i > $DIR/$DAT/$i-$DAT$HOR.sql
done
find /mnt/data/backups/db/* -mtime +20 -exec rm -rf {} \;
end=`date +%F" "%T`

echo "$begin dump mysql -------> $end has done" >> /mnt/data/backups/mysqldump.log

脚本执行

定时任务

vim /etc/crontab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
01 11 * * * root sh /mnt/data/backups/mysql_backups.sh
手动执行

bash /mnt/data/backups/mysql_backups.sh

Docker 安装的MySQL修改点

mysql-backup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

DAT=`date +%m%d`
HOR=`date +%H`
begin=`date +%F" "%T`
PARENT_DIR=/mnt/data/mysql/backups
DIR=$PARENT_DIR/db

if [[ ! -d $DIR/$DAT ]];then
mkdir $DIR/$DAT
fi

for i in `cat $PARENT_DIR/mysql-back.list`
do
docker exec mysql容器名 mysqldump -uroot -p数据库密码 $i > $DIR/$DAT/$i-$DAT$HOR.sql
done
find $DIR/* -mtime +20 -exec rm -rf {} \;
end=`date +%F" "%T`

echo "$begin dump mysql -------> $end has done" >> $PARENT_DIR/mysqldump.log

/etc/crontab 每天 2:00 备份

1
0 2  * * * sh /mnt/data/mysql/backups/mysql-backup.sh >>/mnt/data/mysql/backups/checkES.log 2>&1