MYSQLのバックアップとリカバリ - 物理バックアップxrabackup

私の名前彼張、貪欲な欲望。資格LINUXの運用・保守エンジニアは、LINUXの勉強と研究に焦点を当て、仏教を愛し、実行している、中小企業のウェブサイトの運用・保守を担当していました。
個人ブログ:チュアンSongzhen
著者マイクロ手紙:zhanghe15069028807

percona-xtrabackupオープンソースのための無料サポートmysqlソフトウェア、ホットスタンバイは、増分、差分バックアップをサポートしています。

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、フルデータベースのバックアップとリカバリ

システムバージョン MySQLバージョン マウンティング
centos7 5.7 バイナリインストール

(1)環境の準備

[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)フルバックアップとリカバリのプロセス

[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、データベースの増分バックアップとリカバリ

増分バックアップまたは差分バックアップとリカバリのプロジェクトを行う前に、我々は、増分バックアップと差分バックアップの間に最初の明確な区別する必要があり、類推。

(1)増分および差分概要

それは、増分または差分バックアップであるかどうか、フルバックアップが基本であります

私たちは最初の幼稚園、小学校や中学校、そして高校、そして最終的に大学。高校は、大学の高校に基づいており、プライマリ、中学校に基づいており、現在の「トランザクション」に基づいており、我々は増分と呼ばれるものを、「取引」の前でステージに依存します。我々は最初の幼稚園のメモリ(全額)、その後、小学校、中学校、そして高校、大学および復元する必要があり、我々は今、記憶喪失に苦しんでいるとしましょう障害の順序は、その後、障害はメモリ間のインタフェースになる場合最後に、順序は、非常に重要です。

差分バックアップのアイデアは、より奇妙であり、我々は前のステージ、コントラストをバックアップするために、上記の増分バックアップに依存しているバックアップと差分バックアップは、前のステージにバックアップされていない、第1のコントラストが完璧です。最初の時間は完璧だった、バックアップは差のフルバックアップ一部のみとの比較をするために準備する二回目は、三回目は、比較、違いのバックアップ一部のみを行うには、完全な準備でバックアップされたときに同じで、というようになります。

バックアップするために比較されたデータのように結論、差分バックアップと増分バックアップより多くの量を作ることができます自分の足を考えてみますが、メリットは明白です、回復時間は製剤全体の違いや、最新のバックアップ、運用フェーズであります増分バックアップの簡単なより。

(2)増分バックアップとリカバリ

最初のステップ:データの準備

//周三的数据
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 |
+------+------

ステップ2:全体の物理的な装置を使用してください

[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

第三段階:木曜日、データは、すべての機器の完了後に挿入され続けます

[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

この操作は、上記の説明、「増分」増分手段を必要とします。上記のコマンドの意味は水曜日に行わ完全増分バックアップに基づいて、へ/ xtrabackupこのディレクトリの増分バックアップ、バックアップを使用することで、最終的にはソケットを指摘しました。

ステップ4:金曜日には、データを挿入し続け

[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

ステップ5:アナログ障害

[root@mysql02 ~]# /etc/init.d/mysqld stop    
[root@mysql02 ~]# rm -rf /soft/mysql/data/*

ステップ6:リピートオーダー

//恢复周三的全备数据
[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

注ファイルの順番間違いないという。

ステップ7:ロールバック

//恢复对应数据
[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、差分バックアップとデータベースを復元

システムバージョン MySQLバージョン マウンティング
centos7 MYSQL5.7 YUMのインストール

ステップ1:オープン水曜日バイナリログとデータを準備します

[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 |
+------+

ステップ2:水曜日豊か上の物理

[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

第三段階:木曜日は、データの増加を増加して行うための準備します

[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

ステップ4:金曜日には、データの増加を増加して行うことを準備

[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

四ステップ:土曜日は、データの増加を増加して行うための準備

[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

ステップ5:現在の時刻を維持し、モジュールの操作エラー

mysql> create database Linux;
mysql> drop database Linux;

ステップ6:スタート違いの回復

//停止数据库
[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                |
+--------------------+

ステップ7:元に戻すデータベース

//哪天删除的就查看哪天的二进制日志
[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、簡単な物理バックアップコマンド

あなたがバックアップする簡単なコマンドを使用すると、データの可用性を保証することはできません、あなたがサービス、注意を停止する必要があるかもしれません!

システムバージョン MySQLバージョン マウンティング
centos7 MYSQL5.7 YUMのインストール
//查看一下数据库的存放位置
[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、実際の生産環境

  • 実際の生産環境は、月曜日〜土曜日の設備を増加して、週末は完璧です通常です。
  • 一般的または使用の中小企業mysqldump、大企業がある一方で、大多数のxtrabakcup大多数、当然のことながら、いくつかの企業は、プロのバックアップ・ストレージ・デバイスを使用しています。

おすすめ

転載: www.cnblogs.com/yizhangheka/p/11961699.html