MYSQL backup and recovery - physical backup xrabackup

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-xtrabackupFree support for open source mysqlsoftware, 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 mysqldumpthe majority, while large enterprises are xtrabakcupthe majority, of course, some companies use the professional backup storage device.

Guess you like

Origin www.cnblogs.com/yizhangheka/p/11961699.html