ファイルをコピーしてMySQLデータベースをコピーできますか?ファイルには正確に何が含まれていますか?


13

MySQLデータベースとUbuntu Linuxマシンを使用しています。

私のデータベースの名前はdb_test、パスの下に次のように、の/var/lib/mysql/db_test付いたファイルサフィックスがあることに気づきました。.frm.MYD.MYI

/var/lib/mysql/db_test# ls

cars.frm 
cars.MYD 
cars.MYI

customers.frm
customers.MYD
customers.MYI

departments.frm
departments.MYD
departments.MYI

... 

各思える.frm.MYD.MYIファイルグループは、データベース内のテーブルにマップされました。

次の2つの質問をします。

  1. 3つのファイルは正確に何をしていますか?

  2. /var/lib/mysql/と言うパスの下に新しいディレクトリを作成し、db_test_2すべてのファイルをdb_test_1ディレクトリからにコピーすると、とまったく同じ内容(テーブル)を持つdb_test_2新しいデータベースも作成さdb_test_2db_test_1ますか?

この物理的にデータベースファイルを移動するアクションは、次のコマンドラインアクションと同じ結果になりますか?

  1. データベースをダンプdb_test_1する

  2. 新しいデータベースを作成する db_test_2

  3. 次に、db_test_1データベースを新しいデータベースにダンプしますdb_test_2か?

その場合、ファイルの移動は、mysqldumpデータベースのコピー(またはMySQLのあるDBから別のDBへのデータのインポート)を使用するよりもはるかに高速です。これについての意見は?

回答:


5
  1. AFAIR、.frmはディスクリプションファイル(データベーステーブルの構造が記述されている)、. MYDはデータのあるファイル、.MYIはインデックスのあるファイルです。

  2. はい、コピーがはるかに速くなります。しかし、1つの問題があります。それはアトミックではありません。高負荷のもとでは、コピーされたファイルは不整合になり、場合によってはまったく破損することもあります。特に、InnoDBのような「スマート」エンジンを使用している場合はなおさらです。

編集: psこれらのファイルを安全にコピーできますが、その前にmysqlサーバーを停止する必要があります。


4

あなたはこれを正確に行うcmd-lineツールを持っています: mysqlhotcopy

これは、myisamテーブルで正常に機能しますが、InnoDbテーブルでは機能しません。

lvmを使用してサーバーを構成し、/ var / lib / mysqlを専用ボリュームに配置した場合、ここですべてのデータベースを非常に高速かつノンブロッキングでバックアップすることをお勧めします。

mysql -U root -p
  > flush tables with read lock;

これにより、すべてのテーブルがディスクにフラッシュされ、R / W操作がブロックされます

  > system "lvcreate -s -L 1G -n lvMysql_snap /dev/vg_myserver/lv_mysql" ;

構成に合わせる必要があります。これにより、データベースのファイルシステムのスナップショットが作成されます。時間はかかりません

  > unlock tables;

これが行われ、R / W操作が再開されます。

これで、/ dev / vg_myserver / lvMysql_snapをマウントして、データベースのtarアーカイブを作成できます。


これは、dbをバックアップする高速な方法のようです。しかし、そのスナップショットを元のデータベースに戻すために、スナップショットを元に戻すのはどうでしょうか?それは私が本当に心配している部分です。私はmysqldump2秒以内に私のdb をすることができます。復元には時間がかかり、5〜10分かかります。
Buttle Butkus

最近のディストリビューションでは、lvmスナップショットを元に戻すことができますが、データベースバックアップを管理するために必要なものではない可能性があります。
Olivier S

mysqlhotcopyに関して:「このユーティリティはMySQL 5.6.20で非推奨になり、MySQL 5.7で削除されます」From:[ dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html]
zeusstl

0

これはMyISAMでは機能しますが、InnoDBでは機能しません。https://serverfault.com/a/367321/57569を参照してください

その答えから、InnoDBについて:

.frmと.ibdファイルを単にコピーすることを考えているなら、あなたは傷つく世界に並ぶでしょう。InnoDBテーブルの.frmおよび.ibdファイルのコピーは、.ibdファイルのテーブルスペースIDがibdata1ファイルのmetdataのテーブルスペースIDエントリと正確に一致することが保証できる場合にのみ有効です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.