table of Contents
My name He Zhang, greedy lust. A qualified LINUX operation and maintenance engineers, focusing on LINUX study and research, was responsible for the website operation and maintenance of a medium-sized enterprises, loving Buddhist and running.
Personal blog: Chuan Songzhen
author micro letter: zhanghe15069028807
percona-xtrabackup
Free support for open source mysql
software, hot standby, supports incremental, differential backup.
yum -y install https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0-8/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.8-1.el7.x86_64.rpm
[root@mysql02 ~]# rpm -ql percona-xtrabackup-80.x86_64
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/lib64/xtrabackup/plugin/keyring_file.so
/usr/lib64/xtrabackup/plugin/keyring_vault.so
/usr/share/doc/percona-xtrabackup-80-8.0.8
/usr/share/doc/percona-xtrabackup-80-8.0.8/LICENSE
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
1, a full database backup and recovery
system version | MYSQL version | Mounting |
---|---|---|
centos7 | 5.7 | Binary installation |
(1) Preparing the Environment
[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir=/soft/mysql
datadir=/soft/mysql/data
default_password_lifetime=0
socket=/tmp/mysql.sock
[root@mysql02 ~]# /etc/init.d/mysqld restart
[root@mysql02 ~]# mysql -uroot -pcba-123 -e "create database test1;"
[root@mysql02 ~]# mysql -uroot -pcba-123 -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 | #注意这里
+--------------------+
[root@mysql02 ~]#yum -y install
https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
[root@mysql02 ~]# innobackupex --user=root --password="cba-123" -S /tmp/mysql.sock /xtrabackup
[root@mysql02 ~]# ls /xtrabackup/
2019-11-29_08-53-04
(2) full backup and recovery process
[root@mysql02 ~]# /etc/init.d/mysqld stop
[root@mysql02 ~]# rm -rf /soft/mysql/data/*
[root@mysql02 ~]# innobackupex --apply-log /xtrabackup/2019-11-29_08-53-04/ #重演
[root@mysql02 ~]# innobackupex --copy-back /xtrabackup/2019-11-29_08-53-04/ #恢复
[root@mysql02 ~]# chown -R mysql:mysql /soft/mysql/data #恢复后加上权限
[root@mysql02 ~]# /etc/init.d/mysqld start
[root@mysql02 ~]# mysql -pcba-123 -e "show databases;" #test1库回来了
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
2, incremental database backup and recovery
Before doing an incremental or differential backup and recovery project, we must first clear distinction between incremental and differential backups, Analogy.
(1) incremental and differential overview
Whether it is an incremental or differential backup, full backup is the basis
We first kindergarten, primary school and junior high school, and then high school, and finally college. High school is based on the primary, junior high school is based on the university's high school is based on the current "transaction" depends on the stage in front of a "transaction", what we called increments. Let's say we are now suffering from amnesia, we must first restore the kindergarten (full amount) of memory, then elementary school, junior high school, and then high school, college and finally, the order is very important, if the order of disorder, then the disorder will be the interface between the memory .
The idea of differential backup is more strange, and we rely on the above-mentioned incremental backup to back up the previous stage, contrast and differential backups are not backed up the previous stage, is the first contrast is perfect. The first time was perfect, the second time the backup will prepare to make a comparison with the full backup only part of the difference, the third time will be the same when backed up with full preparation to do comparison, backup only part of the difference, and so on .
Think about their feet can make such a conclusion, differential backup and incremental backup larger amounts of data compared to back up, but the benefits are obvious, the recovery time is only a difference in the whole preparation and the most recent backup, the operation phase than the incremental backups simple.
(2) incremental backup and recovery
The first step: preparing data
//周三的数据
mysql> create database bgxdb;
mysql> use bgxdb;
mysql> create table t1(id int,name varchar(20));
mysql> insert into t1 values (3,'day3');
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 3 | day3 |
+------+------
Step 2: Use the whole physical apparatus
[root@mysql02 ~]# yum -y install https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir=/soft/mysql
datadir=/soft/mysql/data
default_password_lifetime=0
socket=/tmp/mysql.sock
server-id=241
log-bin=/log/mysql/bin_log
[root@mysql02 ~]# mkdir /log/mysql -p ; touch /log/mysql/bin_log ; chown -R mysql:mysql /log/mysql/
[root@mysql02 ~]# mkdir /xtrabackup ; chown -R mysql:mysql /xtrabackup
[root@mysql02 ~]# /etc/init.d/mysqld restart
[root@mysql02 ~]# innobackupex --username=root --password=cba-123 -S /tmp/mysql.sock /xtrabackup/
[root@mysql02 ~]# ls /xtrabackup/
2019-11-29_09-47-55
The third step: Thursday, data continues to be inserted after the completion of all equipment
[root@mysql02 ~]# date -s '2018-11-30'
[root@mysql02 ~]# mysql -pcba-123
mysql> insert into bgxdb.t1 values (4,'day4');
mysql> select * from bgxdb.t1;
+------+------+
| id | name |
+------+------+
| 3 | day3 |
| 4 | day4 |
+------+------+
//下面的操作关键了,是增量备份
[root@mysql02 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2019-11-29_09-47-55 -S /tmp/mysql.sock
This operation requires the above explanation, "incremental" incremental means. The meaning of the above command is to use incremental backups, backup to / xtrabackup this directory, based on the full incremental backup made on Wednesday, finally pointed out the socket.
Step four: Friday, continues to insert data
[root@mysql02 ~]# date -s '2019-12-01'
[root@mysql02 ~]# mysql -pcba-123
mysql> insert into bgxdb.t1 values (5,'da');
mysql> select * from bgxdb.t1;
+------+------+
| id | name |
+------+------+
| 3 | day3 |
| 4 | day4 |
| 5 | da |
+------+------+
//基于周四的基础上进行增备
[root@mysql02 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-11-30_00-06-20 -S /tmp/mysql.sock
[root@mysql02 ~]# cat /xtrabackup/2019-12-01_00-07-51/xtrabackup_binlog_info
bin_log.000001 668
Step five: analog fault
[root@mysql02 ~]# /etc/init.d/mysqld stop
[root@mysql02 ~]# rm -rf /soft/mysql/data/*
Step Six: repeat order
//恢复周三的全备数据
[root@mysql02 ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-11-29_09-47-55/
//恢复周三的增量数据
[root@mysql02 ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-11-29_09-47-55 --incremental-dir=/xtrabackup/2018-11-30_00-06-20
//恢复周五的增量数据
[root@mysql02 ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-11-29_09-47-55 --incremental-dir=/xtrabackup/2019-12-01_00-07-51
Note that the order of the files no mistake.
Step Seven: rollback
//恢复对应数据
[root@mysql02 ~]# innobackupex --copy-back /xtrabackup/'2019-11-29_09-47-55'
[root@mysql02 ~]# chown -R mysql:mysql /soft/mysql/data
[root@mysql02 ~]# /etc/init.d/mysqld restart
[root@mysql02 ~]# mysql -pcba-123 -e "select * from bgxdb.t1;"
+------+------+
| id | name |
+------+------+
| 3 | day3 |
| 4 | day4 |
| 5 | da |
+------+------+
3, differential backup and restore database
system version | MYSQL version | Mounting |
---|---|---|
centos7 | MYSQL5.7 | YUM installation |
Step one: Open Wednesday to prepare binary log and data
[root@mysql01 ~]# cat /etc/my.cnf
[mysqld]
datadir=/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
server-id = 240
log-bin=/log/mysql/bin_log
[root@mysql01 ~]# mkdir /log/mysql -p ; touch /log/mysql/bin_log ; chown -R mysql:mysql /log/mysql
[root@mysql01 ~]# systemctl restart mysqld
[root@mysql01 ~]# date -s '2018-05-08'
mysql> create database bgxdb;
mysql> use bgxdb;
mysql> create table t2(id int);
mysql> insert into t2 values(3);
mysql> select * from t2;
+------+
| id |
+------+
| 3 |
+------+
Step two: physical on Wednesday bountiful
[root@mysql01 ~]# mmkdir /xtrabackup ; chown -R mysql:mysql /xtrabackup
[root@mysql01 ~]# yum -y install https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
[root@mysql01 ~]# yum -y install ./percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' /xtrabackup
[root@mysql01 ~]# cat /xtrabackup/2018-05-08_00-00-10/xtrabackup_checkpoints
backup_type = full-backuped #全备
from_lsn = 0
to_lsn = 2671547
last_lsn = 2671556
compact = 0
recover_binlog_info = 0
The third step: Thursday increased data growth and prepare to do
[root@mysql01 ~]# date -s '2018-05-09'
[root@mysql01 ~]# mysql -uroot -pcba-123 -e "insert into bgxdb.t2 values(4);"
[root@mysql01 ~]# mysql -uroot -pcba-123 -e "select * from bgxdb.t2;"
+------+
| id |
+------+
| 3 |
| 4 |
+------+
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-05-08_00-00-10
[root@mysql01 ~]# ls /xtrabackup/ #多了一个9号的
2018-05-08_00-00-10 2018-05-09_00-03-43
Step Four: Friday increased data growth and prepare to do
[root@mysql01 ~]# date -s '2018-05-10'
[root@mysql01 ~]# mysql -u root -pcba-123 -e "insert into bgxdb.t2 values(5);"
[root@mysql01 ~]# mysql -u root -pcba-123 -e "select * from bgxdb.t2;"
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
+------+
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-05-08_00-00-10
[root@mysql01 ~]# ls /xtrabackup/
2018-05-08_00-00-10 2018-05-09_00-03-43 2018-05-10_00-00-23
Step Four: Saturday increased data growth and prepare to do
[root@mysql01 ~]# date -s "2018-05-11"
[root@mysql01 ~]# mysql -u root -pcba-123 -e "insert into bgxdb.t2 values(6);"
[root@mysql01 ~]# mysql -u root -pcba-123 -e "select * from bgxdb.t2;"
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
+------+
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-05-08_00-00-10
[root@mysql01 ~]# ls /xtrabackup/
2018-05-08_00-00-10 2018-05-09_00-03-43 2018-05-10_00-00-23 2018-05-11_00-07-25
Step five: keep the current time, the module operation error
mysql> create database Linux;
mysql> drop database Linux;
Step Six: Start differences recovery
//停止数据库
[root@mysql01 ~]# systemctl stop mysqld
//清理环境
[root@mysql01 ~]# ls /mysql/
auto.cnf ca.pem ib_buffer_pool ib_logfile1 private_key.pem server-key.pem
bgxdb client-cert.pem ibdata1 mysql public_key.pem sys
ca-key.pem client-key.pem ib_logfile0 performance_schema server-cert.pem
[root@mysql01 ~]# rm -rf /mysql/*
//重演回滚,将差异备份应用至完整备份上
[root@mysql01 ~]# innobackupex --apply-log --redo-only /xtrabackup/2018-05-08_00-00-10/
//重演回滚,将差异备份应用至完整备份上
[root@mysql01 ~]# innobackupex --apply-log --redo-only /xtrabackup/2018-05-08_00-00-10/ --incremental-dir=/xtrabackup/2018-05-11_00-07-25
//应用数据
[root@mysql01 ~]# innobackupex --copy-back /xtrabackup/2018-05-08_00-00-10/
//修改权限
[root@mysql01 ~]# chown -R mysql:mysql /mysql/
//启动数据库
[root@mysql01 ~]# systemctl start mysqld
//查看数据库
mysql> select * from bgxdb.t2;
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
+------+
mysql> show databases; #被删除的那个数据库依然没有找到
+--------------------+
| Database |
+--------------------+
| information_schema |
| bgxdb |
| mysql |
| performance_schema |
| sys |
+--------------------+
Step Seven: undelete database
//哪天删除的就查看哪天的二进制日志
[root@mysql01 ~]# cat /xtrabackup/2018-05-11_00-07-25/xtrabackup_binlog_info
bin_log.000001 654
[root@mysql01 ~]# mysqlbinlog --start-position=654 --base64-output="decode-rows" -v bin_log.000001 bin_log.000002 >db.sql
[root@mysql01 mysql]# mysqlbinlog --start-position=654 --stop-position=816 bin_log.000001 | mysql -uroot -p'cba-123'
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Linux |
| bgxdb |
| mysql |
| performance_schema |
| sys |
+--------------------+
4, a simple physical backup command
When you use simple commands to back up, can not guarantee the availability of data, you may need to stop the service, caution!
system version | MYSQL version | Mounting |
---|---|---|
centos7 | MYSQL5.7 | YUM installation |
//查看一下数据库的存放位置
[root@mysql01 ~]# cat /etc/my.cnf
[mysqld]
datadir=/mysql
socket=/var/lib/mysql/mysql.sock
//打包备份
[root@mysql01 ~]# tar -cf /backup/`date +%F`-mysql-all.tar /mysql
[root@mysql01 ~]# ls /backup
2019-11-30-mysql-all.tar
//停止数据库
[root@mysql01 ~]# systemctl stop mysqld
[root@mysql01 ~]# rm -rf /mysql/*
[root@mysql01 ~]# tar xf /backup/2019-11-30-mysql-all.tar -C /
[root@mysql01 ~]# ls /mysql
auto.cnf ca.pem ib_buffer_pool ib_logfile1 performance_schema server-cert.pem
bgx client-cert.pem ibdata1 ibtmp1 private_key.pem server-key.pem
ca-key.pem client-key.pem ib_logfile0 mysql public_key.pem sys
[root@mysql01 ~]# systemctl start mysqld;
5, the actual production environment
- The actual production environment is usually the weekend is perfect, Monday to Saturday is increasing equipment.
- SMEs in general or the use of
mysqldump
the majority, while large enterprises arextrabakcup
the majority, of course, some companies use the professional backup storage device.