検索
ホームページデータベースmysql チュートリアルMySQLのバックアップとリカバリの詳しい説明

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で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQL:世界で最も人気のあるデータベースの紹介MySQL:世界で最も人気のあるデータベースの紹介Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLの重要性:データストレージと管理MySQLの重要性:データストレージと管理Apr 12, 2025 am 12:18 AM

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

なぜMySQLを使用するのですか?利点と利点なぜMySQLを使用するのですか?利点と利点Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

InnoDBロックメカニズム(共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロック)を説明します。InnoDBロックメカニズム(共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロック)を説明します。Apr 12, 2025 am 12:16 AM

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。

貧弱なMySQLクエリパフォーマンスの一般的な原因は何ですか?貧弱なMySQLクエリパフォーマンスの一般的な原因は何ですか?Apr 12, 2025 am 12:11 AM

MySQLクエリのパフォーマンスが低いことの主な理由には、インデックスの使用、クエリオプティマイザーによる誤った実行計画の選択、不合理なテーブルデザイン、過剰なデータボリューム、ロック競争などがあります。 1.インデックスがゆっくりとクエリを引き起こし、インデックスを追加するとパフォーマンスが大幅に向上する可能性があります。 2。説明コマンドを使用してクエリ計画を分析し、オプティマイザーエラーを見つけます。 3.テーブル構造の再構築と結合条件を最適化すると、テーブルの設計上の問題が改善されます。 4.データボリュームが大きい場合、パーティション化とテーブル分割戦略が採用されます。 5.高い並行性環境では、トランザクションの最適化とロック戦略は、ロック競争を減らすことができます。

複数の単一列インデックスに対して複合インデックスをいつ使用する必要がありますか?複数の単一列インデックスに対して複合インデックスをいつ使用する必要がありますか?Apr 11, 2025 am 12:06 AM

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLでスロークエリを識別して最適化する方法は? (スロークエリログ、Performance_schema)MySQLでスロークエリを識別して最適化する方法は? (スロークエリログ、Performance_schema)Apr 10, 2025 am 09:36 AM

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLおよびSQL:開発者にとって不可欠なスキルMySQLおよびSQL:開発者にとって不可欠なスキルApr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール