データベースアプリケーション:MySQLインクリメンタルバックアップとリカバリ


前言:インクリメンタルバックアップとリカバリの方法は、完全なバックアップに基づいて、バックアップのファイルサイズを減らし、バックアップとリカバリの速度を速めることができます.
文書ディレクトリ
  • 一、MySQLインクリメンタルバックアップ
  • 1.インクリメンタル・バックアップの概念
  • 1)原因
  • 2)特徴

  • 二、MySQL増分回復
  • 1.インクリメンタルリカバリ方法
  • 1)インクリメンタルリカバリのステップ
  • 2)インクリメンタルリカバリ方式
  • 一般回復
  • ブレークポイントリカバリ


  • 三、詳細操作
  • 1.物理コールド・バックアップ
  • 2.バイナリログファイル
  • を開く
  • 3.作成とバックアップ
  • 4.操作
  • 5.表示
  • 6.シミュレーション障害
  • 7.リカバリ
  • 1)時点ベースのブレークポイントリカバリ
  • を使用する.
  • 2)位置ベースのブレークポイントリカバリ
  • を使用する.
  • まとめ

  • 一、MySQLインクリメンタルバックアップ
    1.インクリメンタルバックアップの概念
    1)原因
  • まず、フルバックアップには2つの方法があります.
  • tarを使用してデータファイル
  • をパッケージングする.
  • myqldumpによる完全バックアップ
  • 完全バックアップは毎回すべてのデータ内容をバックアップし、バックアップデータには大量の重複データがあり、完全バックアップの時間とリカバリの時間が長い
  • である.
  • インクリメンタルバックアップは、前回のバックアップ以降に追加または変更されたファイルまたはコンテンツをバックアップすることであり、完全バックアップに存在する問題を解決することができる
  • .
    2)特徴
  • の利点
  • 重複データがなく、バックアップ量が少なく、時間が短い
  • の欠点
  • 前回のフル・バックアップおよびフル・バックアップ後のすべてのインクリメンタル・バックアップが必要で、
  • をリカバリできます.
  • MySQLでは、直接的なインクリメンタルバックアップ方法は提供されていませんが、MySQLのバイナリによって間接的にインクリメンタルバックアップを実現できます.バイナリ・ログのバックアップの意味は次のとおりです.
  • バイナリ・ログには、すべての更新またはデータベースの更新が可能なアクション
  • が保存されています.
  • バイナリ・ログは、MySQLサーバの起動後に記録を開始し、ファイルがmax_に達したときに記録を開始します.binlog_sizeが設定したサイズまたはflush logsコマンドを受信した後に新しいログファイル
  • を再作成する
  • flush logsメソッドをタイミングよく実行して新しいログを再作成し、バイナリファイルシーケンスを生成し、これらのログを安全な場所に保存するだけで、1つの期間のインクリメンタルバックアップ
  • が完了します.

    二、MySQL増分回復
    1.インクリメンタル・リカバリの方法
    1)インクリメンタルリカバリの手順
  • データの追加–フル・バックアップの実行–新しいデータの入力–インクリメンタル・バックアップの実行–障害のシミュレーション–リカバリ・オペレーション
  • 2)増分回復方式
    一般的なリカバリ
    mysqlbinlog [--no-defaults]        | mysql -u     -p
    

    ブレークポイントリカバリ
  • 位置回復
  • に基づく
    //                   ,                    
    
             :
    mysqlbinlog --stop-position='  id'       |mysql -u     -p   
    
                :
    mysqlbinlog --start-position='  id'       |mysql -u     -p   
    
  • ポイント・イン・タイム・リカバリに基づく
  • //          ,                              ,             
    
                    :
    mysqlbinlog [--no-defaults] --stop-datetime=' - -    :  : '       |mysql -u     -p   
    
                  :
    mysqlbinlog [--no-defaults] --start-datetime=' - -    :  : '       |mysql -u     -p   
    
                   :
    mysqlbinlog [--no-defaults] --start-datetime=' - -    :  : ' --stop-datetime=' - -    :  : '       |mysql -u     -p   
    

    三、詳細操作
    1.物理コールドバックアップ
    [root@localhost ~]# tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data
    [root@localhost ~]# ls /opt
    mysql-2020-02-10.tar.xz  mysql-5.7.17  rh
    [root@localhost ~]# systemctl start mysqld   //    
    

    2.バイナリログファイルを開く
    [root@localhost ~]# vim /etc/my.cnf
    // [mysqld]       log-bin=mysql-bin
    [mysqld]
    user = mysql
    basedir = /usr/local/mysql
    datadir=/usr/local/mysql/data
    port = 3306
    character_set_server=utf8
    pid-file = /usr/local/mysql/mysqld.pid
    socket = /usr/local/mysql/mysql.sock
    server-id = 1
    log-bin=mysql-bin	   //    
    ...    
    [root@localhost ~]# systemctl restart mysqld	    //    
    [root@localhost ~]# ls /usr/local/mysql/data/
    ...    
    mysql-bin.000001	   //        ,    
    

    3.作成とバックアップ
  • ライブラリとテーブルを作成し、完全バックアップとインクリメンタルバックアップ
  • を行います.
    [root@localhost data]# mysql -uroot -p	
    Enter password: 	     //      
    mysql> create database ku;	   //   
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use ku;	   //   
    Database changed
    
    mysql> create table biao (id int(4) primary key,name char(10));	   //   
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into biao values(1,'wangwu'),(2,'zhaoliu');	   //    
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from biao;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 |zhaoliu   | 
    +----+----------+
    2 rows in set (0.00 sec)
    mysql>exit
    [root@localhost data]# mysqldump -uroot -p ku > /opt/ku.sql	    //      
    Enter password: 
    [root@localhost data]# mysqladmin -uroot -p flush-logs	   //      
    Enter password: 
    [root@localhost data]# cd /usr/local/mysql/data/
    [root@localhost data]# ls
     mysql-bin.000001   mysql-bin.000002    
     //              mysql-bin.000001 , mysql-bin.000002               
    

    4.操作
  • 通常動作とエラー動作を1回操作し、インクリメンタルバックアップ
  • を行う.
    mysql> insert into biao values(3,'tianqi');	  //    
    Query OK, 1 row affected (0.00 sec)
    
    mysql> delete from biao where name='tianqi';	      //    
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into biao values(4,'changzhi');	     //    
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from biao;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 | zhaoliu  |
    |  4 | changzhi |
    +----+----------+
    3 rows in set (0.00 sec)
    mysql>  exit
    Bye
    [root@localhost data]# mysqladmin -uroot -p flush-logs;	        //      
    Enter password: 
    [root@localhost data]# ls	  //              ysql-bin.000003
    mysql-bin.000001 mysql-bin.000002 mysql-bin.000003
     //                 mysql-bin.000002 
    

    5.表示
  • インクリメンタルバックアップファイルを表示
  • [root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 > /opt/bak.txt
    [root@localhost data]# vim /opt/bak.txt 	    //         
    ...      
    # at 343	   //       
    #200108  0:29:18 server id 1  end_log_pos 390 CRC32 0x9ada4ac9  Write_rows: table id 219 flags: STMT_END_F
    ### INSERT INTO `ku`.`biao`	
    ### SET
    ###   @1=3
    ###   @2='tianqi'
    # at 390
    。。      
    # at 558	 //      ,558           id,200108  0:29:56              ,           
    #200108  0:29:56 server id 1  end_log_pos 610 CRC32 0xb990c664  Table_map: `ku`.`biao` mapped to number 219
    # at 610	
    #200108  0:29:56 server id 1  end_log_pos 657 CRC32 0x1738ac5d  Delete_rows: table id 219 flags: STMT_END_F
    ### DELETE FROM `ku`.`biao`
    ### WHERE
    ###   @1=3
    ###   @2='tianqi'
    # at 657
    ...    
    # at 825	   //       ,825            id,200108  0:30:11               ,           
    #200108  0:30:11 server id 1  end_log_pos 877 CRC32 0x89f71cba  Table_map: `ku`.`biao` mapped to number 219
    # at 877	
    #200108  0:30:11 server id 1  end_log_pos 925 CRC32 0xae064160  Write_rows: table id 219 flags: STMT_END_F
    ### INSERT INTO `ku`.`biao`
    ### SET
    ###   @1=4
    ###   @2='changzhi'
    # at 925
    #200108  0:30:11 server id 1  end_log_pos 956 CRC32 0xe6213e68  Xid = 57
    ...      
    

    6.模擬故障
  • は、障害をシミュレートし、テーブルを削除し、
  • をリカバリします.
    [root@localhost data]# mysql -uroot -p 
    Enter password: 
    mysql> drop table biao;            //      
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> show tables;
    Empty set (0.00 sec)
    
    mysql> source /opt/ku.sql;	       //   
    
    mysql> show tables;	//   
    +----------------+
    | Tables_in_ku |
    +----------------+
    | biao         |                  //    
    +----------------+
    1 row in set (0.00 sec)
    
    mysql> select * from biao;	   //    
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 | zhaoliu  |
    +----+----------+
    2 rows in set (0.00 sec)
    

    7.回復
    1)ポイント・イン・タイム・ポイント・ベースのブレークポイント・リカバリの使用
    [root@localhost data]# mysqlbinlog --no-defaults --stop-datetime='2020-01-08  0:29:56' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p	
    //             2020-01-08  00:29:56,        ,           
    //   5           
    Enter password: 
    [root@localhost data]# mysql -u root -p
    Enter password: 
    mysql> use ku;
    mysql> select * from biao;	  //   ,    
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 | zhaoliu  |
    |  3 | tianqi   |
    +----+----------+
    3 rows in set (0.00 sec)
    [root@localhost data]# mysqlbinlog --no-defaults --start-datetime='2020-01-08  00:30:11' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p	
    //       ,     。             2020-01-08  00:30:11,        ,              
    //   5           
    Enter password: 
    [root@localhost data]# mysql -u root -p
    Enter password: 
    mysql> use ku;
    mysql> select * from biao;	   //   ,    
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 | zhaoliu  |
    |  3 | tianqi   |
    |  4 | changzhi |
    +----+----------+
    4 rows in set (0.00 sec)
    

    2)位置ベースのブレークポイント・リカバリの使用
    //             
    mysql> delete from biao where id=3;
    Query OK, 1 row affected (0.01 sec)
    
    mysql> delete from biao where id=4;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from biao;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 | zhaoliu  |
    +----+----------+
    2 rows in set (0.00 sec)
    mysql> exit
    [root@localhost data]# mysqlbinlog --no-defaults --stop-position='558' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p	
    //            558,   610,      558    
    //   5           
    Enter password: 
    [root@localhost data]# mysql -u root -p
    Enter password: 
    mysql> use ku;
    mysql> select * from biao;	//   ,    
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 | zhaoliu  |
    |  3 | tianqi   |
    +----+----------+
    3 rows in set (0.00 sec)
    [root@localhost data]# mysqlbinlog --no-defaults --start-position='825' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p	
    //            825,   877,      825    
    //   5           
    Enter password: 
    [root@localhost data]# mysql -u root -p
    Enter password: 
    mysql> use yiku;
    mysql> select * from yibiao;	  //   ,    
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangwu   |
    |  2 | zhaoliu  |
    |  3 | tianqi   |
    |  4 | changzhi |
    +----+----------+
    4 rows in set (0.00 sec)
    

    まとめ
  • MySQLでは、インクリメンタル・バックアップを直接提供するツールはありません.バイナリ・ログ・ファイルを使用して操作する必要があります.
  • ログ分割方式によるインクリメンタルバックアップ
  • インクリメンタル・リカバリは、ログ・ファイルの時間順に
  • を1つずつ実行する必要があります.
  • は、時間と位置に基づいて復元することにより、データ
  • をより正確に復元することができる.
  • 大企業は週に1回全備を行い、毎日1回増分バックアップを行うべきである.中小企業は1日に1回全備
  • を行うべきである.