前置条件:
1、 MySQL数据库正常运作,且记录以下信息:
a) Mysql my.cnf文件路径
b) 备份用户名及密码
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
c) Mysql socket文件路径
d) Mysql binlog文件路径
e) 存放备份副本的路径,建议使用NFS共享盘,比如NAS存储
2、 规划备份策略:
a) 备份频率,比如全备多久一次?binlog同步多久一次?
b) 保存周期,比如备份出来的数据保存在共享盘上多久?或者能恢复到什么时候的数据?
备份方式的选择:
针对MySQL数据的备份,通常我们可以通过以下方式来实现
• 直接复制数据库文件
• Mysqldump + Binlog 复制
• lvm2快照 + Binlog 复制
• xtrabackup备份
以上的几种解决方案分别针对于不同的场景
- 如果数据量较小, 可以使用第一种方式, 直接复制数据库文件
- 如果数据量还行, 可以使用第二种方式, 先使用mysqldump对数据库进行完全备份, 然后定期复制Binlog达到增量备份的效果
- 如果数据量一般, 而又不过分影响业务运行, 可以使用第三种方式, 使用lvm2的快照对数据文件进行备份, 而后定期复制Binlog达到增量备份的效果
- 如果数据量很大, 而又不过分影响业务运行, 可以使用第四种方式, 使用xtrabackup进行完全备份后, 定期使用xtrabackup进行增量备份或差异备份(公司采用定期复制Binlog达到增量备份的效果)
总结对比如下:
备份方法 | 备份速度 | 恢复速度 | 便捷性 | 功能 | 适用场景 |
---|---|---|---|---|---|
直接复制 | 快 | 快 | 一般、灵活性低 | 很弱 | 少量数据备份 |
mysqldump | 慢 | 慢 | 一般、可无视存储引擎的差异 | 一般 | 中小型数据量的备份 |
lvm2快照 | 快 | 快 | 一般、支持几乎热备、速度快 | 一般 | 中小型数据量的备份 |
xtrabackup | 较快 | 较快 | 实现innodb热备、对存储引擎有要求 | 强大 | 较大规模的备份 |
xtrabackup工作原理
支持MySQL版本
MySQL5.7、5.6、5.5
安装xtrabackup
官网下载 percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm :
https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
libev:
http://www.rpmfind.net/linux/epel/7/x86_64/Packages/l/libev-4.15-3.el7.x86_64.rpm
开始安装:
yum install -y perl-DBD-MySQL
yum install -y perl-Digest
yum install -yperl-Digest-MD5
rpm -ivh libev-4.15-3.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm
检查安装结果:
[root@jttimvuca02 soft]# yum list | grep percona
percona-xtrabackup-24.x86_64 2.4.15-1.el7 installed
配置备份脚本:
[root@jttimvuca02 app]# ./backup_db.sh
**********************************************
**** 1: For oracle database backup ****
**** 2: For mysql database backup ****
**********************************************
Please choose which database to backup :2
********************************************
You choose the 2: For mysql database backup
********************************************
输入MySQL的my.cnf绝对路径
Please enter the my.cnf path for mysql full backup :/etc/my.cnf
输入MySQL的备份用户
Please enter the Backup user for mysql full backup :backup
输入MySQL的备份用户的密码
Please enter the Backup user password for mysql full backup :Password
输入MySQL的socket文件绝对路径
Please enter the Mysql socket path for mysql full backup :/var/lib/mysql/mysql.sock
输入MySQL的binlog文件绝对路径
Please enter the binlog path for mysql binlog rsync :/tmp
输入MySQL的备份文件存放目标绝对路径
Please enter the destination path for mysql full backup :/app/backup
********************************************
Stript file ouput: For mysql database backup
********************************************
MySQL的备份脚本输出路径
Mysql inno full backup script file: /app/backup_mysql_inno.sh
Mysql binlog rsync script file: /app/rsync_mysql_binlog.sh
Mysql backup image clean script file: /app/clean_mysql_file.sh
********************************************
[root@jttimvuca02 app]# ll
total 20
drwxrwxr-x 5 root root 43 Jul 21 19:56 backup
-rwxrwxr-x 1 root root 7521 Jul 21 20:37 backup_db.sh
-rwxrwxr-x 1 root root 262 Jul 21 20:38 backup_mysql_inno.sh
-rwxrwxr-x 1 root root 125 Jul 21 20:38 clean_mysql_file.sh
-rwxrwxr-x 1 root root 116 Jul 21 20:38 rsync_mysql_binlog.sh
配置定时任务:
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
-
-
-
逗号(,):能够用逗号隔开的值指定一个列表范围,比如。“1,2,5,7,8,9”
中杠(-):能够用整数之间的中杠表示一个整数范围,比如“2-6”表示“2,3,4,5,6”
正斜线(/):能够用正斜线指定时间的间隔频率,比如“0-23/2”表示每两小时运行一次。同一时候正斜线能够和星号一起使用。比如*/10,假设用在minute字段,表示每十分钟运行一次。