ホームページ  >  記事  >  データベース  >  MySQLのバックアップとリカバリの詳しい説明

MySQLのバックアップとリカバリの詳しい説明

青灯夜游
青灯夜游転載
2019-11-29 16:21:512241ブラウズ

MySQLのバックアップとリカバリの詳しい説明

1. MySQL の完全バックアップとリカバリ

バックアップの主な目的は災害復旧であり、バックアップは次のことも行うことができます。アプリケーションのテスト、データ変更のロールバック、履歴データのクエリ、監査などに使用されます。

1. データ バックアップの重要性

企業におけるデータの価値は非常に重要であり、データは企業の正常な運用を保証します。仕事。したがって、データのセキュリティとデータの信頼性は運用と保守の最優先事項であり、データの損失は企業に重大な影響を与える可能性があります。通常、データ損失の理由は次のとおりです。

プログラム エラー
人間の操作エラー
操作エラー
ディスク障害
災害 (火災、地震) および盗難
3. 一般的なバックアップ方法

2. データベース バックアップの種類

1. 物理バックアップと論理バックアップ観点:

データベースのバックアップは、物理バックアップと論理バックアップに分類できます。物理バックアップは、データベース オペレーティング システムの物理ファイル (データ ファイル、ログ ファイルなど) のバックアップです。このタイプのバックアップは、問題が発生した場合に迅速に復元する必要がある大規模で重要なデータベースに適しています。

物理バックアップは、コールド バックアップ (オフライン バックアップ)、ホット バックアップ (オンライン バックアップ)、およびウォーム バックアップに分類できます。

  • コールド バックアップ: データベースが閉じているときにバックアップ操作を実行します;
  • ホット バックアップ: データベースの実行中にバックアップ操作を実行します。この方法はデータベースのログ ファイルに依存します;

  • ウォーム バックアップ: データベースがテーブルをロックしたときにバックアップします (書き込みはできませんが、読み取りはできます);

論理的バックアップ データベースの論理コンポーネント (テーブルやその他のデータベース オブジェクトなど) のバックアップであり、論理データベース構造 (データベースの作成、テーブル ステートメントの作成) およびコンテンツ (挿入ステートメントまたは区切りテキスト ファイル) に関する情報として表現されます。 。このタイプのバックアップは、データ値やテーブル構造を編集したり、データを別のマシン アーキテクチャで再作成したりできる、少量のデータに使用されます。

#2. データベース バックアップ戦略の観点から:

データベース バックアップ戦略の観点から、データベース バックアップ完全バックアップ、差分バックアップ、増分バックアップに分けられます。このうち、完全バックアップは、差分バックアップと増分バックアップの基礎となります。

  • 完全バックアップ: 毎回データの完全なバックアップ、つまりデータベース全体のバックアップ。バックアップとリカバリの操作は非常に簡単ですが、データの重複が多く、大量のディスク領域を消費し、バックアップ時間も非常に長くなります。

  • 差分バックアップ: 最後の完全バックアップ以降に変更されたすべてのファイルをバックアップします。バックアップ時点は最後の完全バックアップからのものであり、バックアップ データはますます大きくなります。データを復元するときは、最後の完全バックアップと最新の差分バックアップのみを復元する必要があります。

  • 増分バックアップ: 最後の完全バックアップまたは増分バックアップの時刻を時点として、最後の完全バックアップまたは増分バックアップ後に変更されたファイルのみがバックアップされます。その間のデータ変更のみをバックアップするため、バックアップされるデータ量、スペースが小さく、バックアップ速度が速いですが、復元時には、最後の完全バックアップから最後の増分バックアップまでのすべての増分が必要になります。 . 順番に復元する. 途中のデータが壊れてしまうとデータが消えてしまいます。

3. 一般的なバックアップ方法

MySQL データベースは、直接パッケージ化するなど、さまざまな方法でバックアップできます。データベース ファイル (物理コールド バックアップ)、特殊なバックアップ ツール (mysqldump)、バイナリ ログの増分バックアップ、サードパーティ ツールのバックアップなど。

1. 物理コールド バックアップ

#物理コールド バックアップでは、データベースの整合性を確保するためにデータベースを閉じる必要があります。物理コールドバックアップは通常、非コアサービスに使用されます。この種の業務は一般に中断が許容されます。物理コールドバックアップの特徴は、高速でリカバリが最も簡単であることです。

2. 特別なバックアップ ツール mysqldump または mysqlhotcopy

mysqldump プログラムと mysqlhotcopy の両方をバックアップに使用できます。 mysqqldump は、クライアント側で一般的に使用される論理バックアップ プログラムで、元のデータベース オブジェクト定義とテーブル データを再現するために実行される一連の SQL ステートメントを生成できます。 1 つまたは複数の MySQL データベースをダンプし、バックアップしたり、リモート SQL サーバーに転送したりできます。 mysqldump はさまざまなテーブルをバックアップできるため、より多用途です。 mysqlhotcopy は特定のストレージ エンジンでのみ動作します。

3. バイナリ ログを有効にすることによる増分バックアップ

MySQL は増分バックアップをサポートしており、増分バックアップを実行する場合はバイナリ ログを有効にする必要があります。バイナリ ログ ファイルは、バックアップ ポイントの実行後に行われたデータベースの変更を回復するために必要な情報のコピーをユーザーに提供します。増分バックアップ (最後の完全バックアップまたは増分バックアップ以降に発生したデータ変更を含む) を実行する場合は、バイナリ ログを更新する必要があります。

#4. データベース全体のバックアップ操作

1. バックアップ前の準備

[root@centos01 ~]# mysqladmin -u root password  <!--mysql数据库设置密码-->
New password:             <!--输入密码-->
Confirm new password:        <!--确认密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123    <!--登录MySQL数据库-->
mysql> create database benet;        <!--创建benet数据库-->
mysql> use benet;             <!--切换到benet数据库创建表-->
mysql> create table 一班学生成绩 (姓名 char(3),班级 char(5),学号 char(8),语文 char(3),
数学char(3),英语 char(3),理综 char(3), primary key (学号));  
<!--创建表,表名字为一班学生成绩,第一列名字是姓名,第二列名字为班级,第三列名字
为学号,第四列名字为语文,第五列名字为数学,第六列名字为英语,第七列名字为理综-->
mysql> insert into 一班学生成绩 value ('张三','一班','20170822','110','105','92','235');  
                   <!--表中插入数据-->
mysql>  insert into 一班学生成绩 value ('李四','一班','20170820','95','115','110','260');  
                   <!--表中插入数据-->
mysql> insert into 一班学生成绩 value ('王五','一班','20170818','95','103','108','270');  
                   <!--表中插入数据-->
mysql> insert into 一班学生成绩 value ('赵六','一班','20170816','100','109','112','265'); 
                   <!--表中插入数据-->
mysql> select * from benet.一班学生成绩;   <!--查看一班学生成绩表中所有数据-->

MySQLのバックアップとリカバリの詳しい説明

2. 物理コールド バックアップとリカバリ

物理コールド バックアップでは、通常、tar コマンドを使用してデータベース フォルダーを直接パッケージ化します。バックアップを実行する前に、「systemctl stop mysqld」コマンドを使用して mysql サービスをシャットダウンする必要があります。

1) データベースのバックアップ

バックアップ データの保存先パスとして /bak ディレクトリを作成し、tar を使用してバックアップ ファイルを作成します。データベース フォルダー全体のバックアップは完全バックアップです。

[root@centos01 ~]# systemctl stop mysqld  <!--停止mysql服务-->
[root@centos01 ~]mkdir /bak/   <!--创建存储备份目录-->
[root@centos01 ~]# tar zcf /bak/mysql_all-$(date +%F).mysql.gz /usr/local/mysql/data/    
                 <!--直接tar打包数据库文件-->
[root@centos01 ~]# ls /bak/     <!--查看备份的数据-->
-rw-r--r-- 1 root root 766598 10月 31 03:57 /bak/mysql_all-2019-10-31.mysql.gz

2) データベースを復元します

[root@centos01 ~]mkdir test  <!--创建恢复数据目录-->
[root@centos01 ~]# tar zxvf /bak/mysql_all-2019-10-31.mysql.gz  -C ./test/   
                <!--解压缩备份数据到恢复目录-->
[root@centos01 data]# cd /usr/local/mysql/data/  <!--进入数据原始位置-->
[root@centos01 data]# rm -rf ./*  <!--删除数据-->
[root@centos01 ~]# cd ./test/usr/local/mysql/data/  <!--切换到恢复目录-->
[root@centos01 date]#mv ./* /usr/local/mysql/data/    <!--将恢复目录数据恢复到原始位置-->
[root@centos01 ~]# systemctl start mysqld  <!--启动mysql服务-->

3. Mysqldump のバックアップとリカバリ

スルーmysqldump このコマンドは、指定されたライブラリ、テーブル、またはすべてのライブラリを SQL スクリプトとしてエクスポートできるため、このコマンドをさまざまなバージョンの MySQL サーバーで使用できます。

1) すべてのデータベースのバックアップと復元

[root@centos01 ~]# mysqldump -uroot -ppwd@123 --opt --all-databases > ./test/benet_databases.sql     <!--备份所有库,opt选项是优化执行速度-->
[root@centos01 ~]# mysql -uroot -p     <!--登录数据库-->
Enter password:          <!--数据密码-->
mysql> show databases;         <!--查看所有数据库-->
+--------------------+
| Database           |
+--------------------+
| information_schema |
| benet              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
mysql> drop database benet;  <!--删除benet数据库-->
mysql> show databases;      <!--查看数据库是否删除-->
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@centos01 ~]# mysql -u root -p 
mysql> show databases;     <!--查看数据库是否恢复-->
+--------------------+
| Database           |
+--------------------+
| information_schema |
| benet              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
mysql> source ./test/benet_databases.sql 
             <!--也可以通过这种方法恢复误删除的数据库-->

2) データベース内のテーブルのバックアップと復元

[root@centos01 ~]# mysqldump -uroo t -ppwd@123 benet 一班学生成绩 > ./test/benet_一班学生成绩.sql   
                         <!--备份数据库下的表-->
[root@centos01 ~]# mysql -uroot -p       <!--登录数据库-->
Enter password:        <!--输入密码-->
mysql> use benet;      <!--切换到benet数据库-->
mysql> drop table 一班学生成绩;      <!--删除一班学生成绩表-->
mysql> show tables;        <!--查看表是否删除--> 
Empty set (0.00 sec)
[root@centos01 ~]# mysql -uroot -p benet 
[root@centos01 ~]# mysql -uroot -p    <!--登录数据库-->
Enter password:           <!--输入密码-->
mysql> use benet;         <!--切换到benet数据库-->
Database changed
mysql> show tables;    <!--查看误删除的表是否恢复-->
+--------------------+
| Tables_in_benet    |
+--------------------+
| 一班学生成绩       |
+--------------------+
1 row in set (0.00 sec)

5. MySQL の増分バックアップとリカバリ

mysqldump を使用して完全バックアップを実行します。バックアップされたデータに重複データがあり、バックアップ時間とリカバリ時間がかかります。長すぎます。増分バックアップとは、前回のバックアップ以降に追加または変更されたファイルまたはコンテンツをバックアップすることです。

1. MySQL 増分バックアップの特徴

増分バックアップは完全バックアップとは異なり、重複データがなく、バックアップ容量が大きくありません。 、時間は短いですが、復元が面倒で、復元するには最後の完全バックアップと完全バックアップ以降のすべての増分バックアップが必要で、すべての増分バックアップを 1 つずつ復元する必要があります。増分バックアップは、MySQL が提供するバイナリ ログを通じて間接的に実行できます。

2. MySQL の増分バックアップとリカバリ

バイナリ ログには、データベースを更新する、または更新される可能性のあるすべての操作が保存されます。バイナリ ログは、MySQL サーバーの起動後に記録を開始し、ファイルがバイナリ ログで設定された最大値に達するか、フラッシュ ログ コマンドを受信すると、新しいログ ファイルを作成し、一連のバイナリ ファイルを生成し、これらのログを安全なストレージに保存します。場所に指定すると、一定期間の増分バックアップを完了できます。

MySQL の増分バックアップを実行するには、まずバイナリ ログ機能を有効にする必要があります。MySQL のバイナリ ログ機能を有効にする実装方法は次のとおりです:

[root@centos01 ~]# vim /etc/my.cnf       <!--进入MySQL配置文件-->
.......    <!--此处省略部分内容-->
log-bin=mysql-bin      <!--开启二进制日志功能-->
[root@centos01 ~]# systemctl restart mysqld   <!--重启MySQL服务-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/
......             <!--此处省略部分内容-->
-rw-rw---- 1 mysql mysql    27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql  1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql     1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql   507535 11月  1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql   507229 11月  1 09:40 mysql-bin.000005
-rw-rw---- 1 mysql mysql       95 11月  1 09:37 mysql-bin.index
drwx------ 2 mysql mysql     4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql       20 10月 30 23:56 test

1) 増分バックアップ

[root@centos01 ~]# mysqladmin -uroot -ppwd@123 flush-logs  <!--刷新二进制日志-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/     <!--查看二进制日志文件-->
......   <!--此处省略部分内容-->
-rw-rw---- 1 mysql mysql    27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql  1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql     1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql   507535 11月  1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql   507272 11月  1 09:49 mysql-bin.000005
-rw-rw---- 1 mysql mysql      107 11月  1 09:49 mysql-bin.000006
-rw-rw---- 1 mysql mysql      114 11月  1 09:49 mysql-bin.index
drwx------ 2 mysql mysql     4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql       20 10月 30 23:56 test
[root@centos01 ~]# mysql -uroot -ppwd@123  <!--登录mysql数据库-->
mysql> use benet;           <!--切换到benet数据库-->
mysql> insert into 一班学生成绩 value ('李宁','二班','20170824','92','98','105','235');            
                    <!--录入新的数据-->
Query OK, 1 row affected (0.01 sec)
mysql> insert into 一班学生成绩 value ('陈铭','二班','20170826','111','107','96','204');           
                    <!--录入新的数据-->
Query OK, 1 row affected (0.00 sec)
mysql> select *from 一班学生成绩;    <!--查看新数据是否录入-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+
6 rows in set (0.00 sec)
[root@centos01 ~]# mysqladmin -uroot -ppwd@123 flush-logs  
                          <!--刷新二进制日志-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/    
                               <!--查看二进制日志文件-->
......          <!--此处省略部分内容-->
-rw-rw---- 1 mysql mysql    27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql  1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql     1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql   507535 11月  1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql   507272 11月  1 09:49 mysql-bin.000005
-rw-rw---- 1 mysql mysql      649 11月  1 09:58 mysql-bin.000006
-rw-rw---- 1 mysql mysql      107 11月  1 09:58 mysql-bin.000007
-rw-rw---- 1 mysql mysql      133 11月  1 09:58 mysql-bin.index
drwx------ 2 mysql mysql     4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql       20 10月 30 23:56 test
[root@centos01 ~]# cp /usr/local/mysql/data/mysql-bin.000006 /root/test/   
                            <!--复制二进制日志-->

2) 生徒の成績表のクラスの誤って削除をシミュレートします

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'       
                    <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'   
                      <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist

3) 誤って削除された表を復元します

[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'        
                        <!--查看完全备份数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
+--------+--------+----------+--------+--------+--------+--------+
[root@centos01 ~]# mysqlbinlog --no-defaults /root/test/mysql-bin.000006 |mysql -u root -p 
                   <!--恢复增量备份-->
Enter password:       <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'      
                     <!--查看增量恢复数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+

3. 位置ベースのリカバリ

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'   
                <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'  
                 <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'     
               <!--查看完全备份是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
+--------+--------+----------+--------+--------+--------+--------+
[root@centos01 ~]# mysqlbinlog --no-defaults /root/test/mysql-bin.000006       
                <!--查看二进制日志文件确认恢复的位置或时间点-->
......         <!--此处省略部分内容-->
# at 176                  <!--at就是我们称之为操作ID,下面紧跟的是时间标记-->
#191101  9:55:33 server id 1  end_log_pos 329   Query   thread_id=9 exec_time=0 error_code=0
use benet/*!*/;
SET TIMESTAMP=1572573333/*!*/;
insert into 一班学生成绩 value ('李宁','二班','20170824','92','98','105','235')
/*!*/;
# at 329
#191101  9:55:33 server id 1  end_log_pos 356   Xid = 278
COMMIT/*!*/;
# at 356
#191101  9:55:43 server id 1  end_log_pos 425   Query   thread_id=9 exec_time=0 error_code=0
SET TIMESTAMP=1572573343/*!*/;
BEGIN
/*!*/;
# at 425       <!--at就是我们称之为操作ID,下面紧跟的是时间标记-->
#191101  9:55:43 server id 1  end_log_pos 579   Query   thread_id=9 exec_time=0 error_code=0
SET TIMESTAMP=1572573343/*!*/;
insert into 一班学生成绩 value ('陈铭','二班','20170826','111','107','96','204')
/*!*/;
[root@centos01 ~]# mysqlbinlog --no-defaults --stop-position='425' /root/test/mysql-bin.000006 |mysql -uroot -p       <!--基于ID恢复增量备份-->
Enter password:       <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
               <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
+--------+--------+----------+--------+--------+--------+--------+

上記のコマンドの「--stop-position」 「Chen Ming」の情報を復元し、「Li Ning」の情報復元をスキップする場合のみ、「--start-position」オプションを使用してデータ復元を開始する位置を指定できます。このとき回復されるデータは、指定された位置からバイナリログファイルの末尾までです。 #

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'    
                   <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'  
                  <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysqlbinlog --no-defaults --start-position='425' /root/test/mysql-bin.000006 |mysql -uroot -p       <!--基于ID恢复增量备份-->
Enter password:        <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                 <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+

#4. ポイント イン タイムに基づくリカバリ##ポイント イン タイムに基づいてデータをリカバリするために使用されるオプションが "--stop-datetime" の場合、指定された時刻もバイナリ ログをクエリすることによって取得されます。以下の操作を行うと、9:55:43以前のデータのみ復元でき、「Chen Ming」の情報は復元されません。

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;' 
                      <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'  
                 <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysqlbinlog --no-defaults --stop-datetime='2019-11-01  9:55:43' /root/test/mysql-bin.000006 |mysql -uroot -p     
                         <!--基于时间点恢复增量备份-->
Enter password:       <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                           <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 李宁   | 二班   | 20170824 | 92     | 98     | 105    | 235    |
+--------+--------+----------+--------+--------+--------+--------+
「Chen Ming」の情報のみを復元し、「Li Ning」の情報の復元をスキップするには、次の操作を実行します。

[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班学生成绩;'   
                      <!--删除一班学生成绩表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                 <!--查看表是否删除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班学生成绩' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 
[root@centos01 ~]# mysqlbinlog --no-defaults --start-datetime='2019-11-01 9:55:43'
/root/test/mysql-bin.000006 |mysql -uroot -p      
                      <!--基于时间恢复增量备份-->
Enter password:        <!--输入密码-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班学生成绩;'    
                       <!--查看数据是否恢复-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名   | 班级   | 学号     | 语文   | 数学   | 英语   | 理综   |
+--------+--------+----------+--------+--------+--------+--------+
| 赵六   | 一班   | 20170816 | 100    | 109    | 112    | 265    |
| 王五   | 一班   | 20170818 | 95     | 103    | 108    | 270    |
| 李四   | 一班   | 20170820 | 95     | 115    | 110    | 260    |
| 张三   | 一班   | 20170822 | 110    | 105    | 92     | 235    |
| 陈铭   | 二班   | 20170826 | 111    | 107    | 96     | 204    |
+--------+--------+----------+--------+--------+--------+--------+
——— ——— — この記事は終わりです。お読みいただきありがとうございました ————— 推奨される学習:

MySQL チュートリアル

#

以上がMySQLのバックアップとリカバリの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。