ホームページ  >  記事  >  データベース  >  物理的な方法で MySQL の単一テーブルを復元する方法を説明します

物理的な方法で MySQL の単一テーブルを復元する方法を説明します

藏色散人
藏色散人転載
2023-01-22 08:30:021835ブラウズ

この記事では、MySQL に関する関連知識を提供します。主に、物理的な方法を使用して MySQL 内の単一テーブルを迅速に復元する方法を紹介し、ステップごとに説明します。一緒に見てみましょう。皆さんのお役に立てれば幸いです。

物理的な方法で MySQL の単一テーブルを復元する方法を説明します

使用方法

1. まずテスト テーブル test1 を作成し、いくつかのデータを挿入します:

mysql> create table test1 (id int auto_increment primary key,name varchar(20));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into test1 (name) values ('张三'),('李四'),('王二');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
|  3 | 王二   |
+----+--------+
3 rows in set (0.00 sec)

2. ターゲットを作成します。テーブル test2:

mysql> create table test2 like test1;
Query OK, 0 rows affected (0.10 sec)
查看数据目录里面的ibd文件(test2.ibd、test1.ibd):
-rw-r-----. 1 * * 114688 Nov  2 16:20 test1.ibd
-rw-r-----. 1 * * 114688 Nov  2 16:23 test2.ibd

3. テーブル test2 の idb ファイルを変更テーブル破棄メソッドで破棄します (test1 のデータをコピーする次のステップに備えるため):

mysql> alter table test2 discard tablespace;   
Query OK, 0 rows affected (0.02 sec)

查看ibd文件情况,发现test2的ibd文件已经被删除

-rw-r----- 1 * * 114688 Nov  2 16:20 test1.ibd

4. 実行します。次のコマンド、次のように test1 の cfg ファイルを生成します:

mysql> flush table test1 for export; 
Query OK, 0 rows affected (0.00 sec)

生成了一个test1.cfg的cfg文件

-rw-r----- 1 * *    655 Nov  2 16:25 test1.cfg
-rw-r----- 1 * * 114688 Nov  2 16:20 test1.ibd

5. ソース テーブル test1 の cfg ファイルと ibd ファイルをターゲット テーブル test2 にコピーし、ファイルのアクセス許可を変更します:

cp test1.cfg test2.cfg
cp test1.ibd test2.ibd
chown -R mysql.mysql test2.*

6. コピーが完了したら、select コマンドを実行し、次のエラーを見つけます:

mysql> select * from test2;
ERROR 1100 (HY000): Table 'test2' was not locked with LOCK TABLES

7. テーブルのロックを解除し、ソース テーブルの test1.cfg ファイルを解放し、 ibd ファイル:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

并用alter table的方法为目标表test2导入这个ibd文件:

mysql> alter table test2 import tablespace; 
Query OK, 0 rows affected (0.03 sec)
1 row in set (0.00 sec)

8. select を再度実行すると、データがインポートされたことがわかります:

mysql> select * from test2;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
|  3 | 王二   |
+----+--------+
3 rows in set (0.00 sec)

物理コピー方法の紹介

上記の単一テーブルのコア物理copy メソッドは cp コマンドにあり、物理コピーであるため、コピーされるテーブルが非常に大きい場合は、物理コピーを使用した方が、select ステートメントへの挿入などの論理 SQL 書き込みよりもはるかに高速になります。

简单总结一下上述物理复制过程:
  • 1. Create table like 構文により、同じテーブル構造を持つ空のターゲット テーブルが作成されます
  • 2. ターゲット テーブルは alter table destroy を実行し、ibd ファイルを破棄します
  • 3. ソース テーブルでテーブルのエクスポート構文の変更を実行して、.cfg ファイルを生成し、テーブルをロックします。
  • 4. cp コマンドを使用して、ソース テーブルの cfg ファイルと ibd ファイルをターゲットにコピーします。 table
  • 5. テーブルのロックを解除すると、cfg ファイルとソース テーブルのロックが解放されます
  • 6. alter table import コマンドは、ターゲット テーブルの ibd データ ファイルをインポートします。

エクスポート構文の導入のためのテーブルの変更:

  • 1. このコマンドは、メモリ内のこのテーブルに関するデータをディスクに更新して、データを確実に更新できるようにします。 binlogged 記録済み;
  • 2. この操作にはテーブルのフラッシュまたはリロード権限が必要です;
  • 3. この操作は現在のテーブルの共有 MDL ロックを保持し、他のセッションがテーブル構造を変更できないようにします。 FOR EXPORT では、以前に取得した MDL ロックは操作が完了しても解放されないため、手動で解放する必要があります
  • 4. InnoDB はテーブルと同じデータベース ディレクトリに table_name.cfg という名前のファイルを生成します
  • 5 テーブルのコピーを処理した後、UNLO​​CK テーブルを使用してソース テーブルの MDL ロックを解放するか、接続を切断する必要があります。

注:

エクスポート用のテーブルの変更はテーブルをロックするため、この方法はスレーブ データベース上のレプリケーション関係を停止してからテーブル レプリケーション操作を実行する場合に適しています。現在のソーステーブルにビジネス操作がある場合は、慎重な検討が必要です。

推奨学習: 「MySQL ビデオ チュートリアル

以上が物理的な方法で MySQL の単一テーブルを復元する方法を説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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