回答:
MyISAMのコピーは非常に簡単で、InnoDBを使用すると完全に100%リスク(自殺に近い)になります。
あなたの質問から、あなたは育てました
cp /db1/mytable.frm /db2/mytable.frm
これは問題ありません。ただし、.frmだけを移動することはできません。すべてのコンポーネントを移動する必要があります。質問から、db1.mytableというテーブルを見てみましょう。通常のインストールでは、テーブルは/ var / lib / mysql / db1にあります。テーブルを構成する3つのファイルがあります。
1つのテーブルを移動するには、3つのファイルすべてを移動する必要があります。すべてのテーブルがMyISAMストレージエンジンを使用している場合、mysqlをシャットダウンしてコピーすることができます。テーブルのコピーを作成して別のデータベースに配置するだけの場合は、SQLを使用してそれを行う必要があります。
たとえば、db1.mytableをデータベースdb2にコピーする場合は、次のようにします。
CREATE TABLE db2.mytable LIKE db1.mytable;
ALTER TABLE db2.mytable DISABLE KEYS;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
ALTER TABLE db2.mytable ENABLE KEYS;
これで、テーブルをdb1からdb2に移動するだけで、これを実行できます。
ALTER TABLE db1.mytable RENAME db2.mytable;
InnoDBが動作するインフラストラクチャのため、コピーは非常に危険です。2つの基本的なインフラストラクチャがあります。1)innodb_file_per_tableが無効、2)innodb_file_per_tableが有効
InnoDBのアキレス腱は、ibdata1として知られるシステムテーブルスペースファイルです(通常は/ var / lib / mysqlにあります)。そのファイルには何が含まれていますか?
innodb_file_per_tableを無効にすると、これらすべてのタイプのInnoDB情報がibdata1内に存在します。ibdata1の外部にあるInnoDBテーブルの唯一の症状は、InnoDBテーブルの.frmファイルです。すべてのInnoDBデータを一度にコピーするには、/ var / lib / mysqlのすべてをコピーする必要があります。
個々のInnoDBテーブルをコピーすることは完全に不可能です。データの論理表現とそれに対応するインデックス定義としてテーブルのダンプを抽出するには、mysqldumpを実行する必要があります。次に、そのダンプを同じサーバーまたは別のサーバー上の別のデータベースにロードします。
innodb_file_per_tableを有効にすると、テーブルデータとそのインデックスが.frmファイルの横のデータベースフォルダーに格納されます。たとえば、テーブルdb1.mytableの場合、ibdata1の外部にあるそのInnoDBテーブルの明示は次のようになります。
db1.mytableのすべてのメタデータは依然としてibdata1にあり、それを回避する方法はまったくありません。REDOログとMVCCデータもibdata1で引き続き使用できます。
.frmと.ibdファイルを単にコピーすることを考えているなら、あなたは傷つく世界に並ぶでしょう。InnoDBテーブルの.frmおよび.ibdファイルのコピーは、.ibdファイルのテーブルスペースIDがibdata1ファイルのmetdataのテーブルスペースIDエントリと正確に一致することが保証できる場合にのみ有効です。
このテーブルスペースIDの概念について、DBA StackExchangeで2つの投稿を書きました
テーブルスペースIDが一致しない場合に.ibdファイルをibdata1に再アタッチする方法に関する優れたリンクは次のとおりです。http ://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file 。これを読んだ後、私が自殺の近くで言った理由がわかるはずです。
InnoDBの場合、必要なのはこれだけです
CREATE TABLE db2.mytable LIKE db1.mytable;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
InnoDBテーブルのコピーを作成します。別のDBサーバーに移行する場合は、mysqldumpを使用します。
.frm
、.MYD
および.MYI
。
MySQL datadir全体をコピーすることは、MySQLサービスが停止していて、データベースサーバー全体をコピーしたいという前提で、実用的な手法です。
これは、大きなインデックスを持つデータベースをシフトするための便利なテクニックです。mysqlダンプには、インポート時に再生成する必要があるインデックスが含まれません。MySQLスレーブを設定するときにこのテクニックが役立つことがわかりました。
個々のファイルのコピーは、使用中のテーブルスキーマによって異なりますが、ほとんどの場合、適切なソリューションではありません。
使用xtrabackup / OW W / O innobackupexラッパーwが、あなたはMyISAMテーブルとInnoDBのデータベースの両方の罰金になります。なお、innodbデータベースの復元は、xtrabackupを使用しても、単にファイルをコピーするだけではありません。さらに情報が必要かどうかを教えてください