2017-04-23 2 views
1

MyISAMからInnoBDに切り替えるとき、私はデフォルト設定を使用しました。最適化のヒントを読んだ後、私は各テーブルが別々のファイルで優れていることに気付きました。 1つのファイルから別のファイルにテーブルを転送するにはどうすればいいですか?既存のデータベースの "innodb_file_per_table"パラメータを "OFF"から "1"に変更するにはどうすればよいですか?

答えて

1

デフォルトではinnodb_file_per_table=1がデフォルト設定です。デフォルトを使用している限り、新しいInnoDBテーブルとMyISAMからInnoDBに変換されたテーブルは、すでに別のテーブルスペースを持っています。

MariaDB 5.5をご使用の場合は、デフォルトでinnodb_file_per_table=0です。個々の表領域の使用を開始するには、SET GLOBAL innodb_file_per_table = 1;を実行します。それ以来、サーバが再起動するまで、新しく作成され変更されたすべてのInnoDBテーブルがこのオプションを使用します。オプションを永続化するには、cnfファイルに追加します。

既存のInnoDBテーブルを個々のテーブルスペースに変換するには、 ALTER TABLE <tablename> ENGINE=InnoDBまたはALTER TABLE <tablename> FORCEを実行できます。変換の

+0

答えをありがとう。 – Dmitry

0

その他のヒント:http://mysql.rjweb.org/doc.php/myisam2innodb

あなたこれを実行する必要がある場合があります

SET GLOBAL innodb_file_per_table = 1; 
ALTER ... 

を私はfile_per_table大きなテーブルを持っていることを好むが、ibdata1との小さなもの。

+0

実際にこれを再接続する必要はありません。 GLOBALとSESSIONの両方のスコープを持つ変数(この場合はSESSION変数は接続時に初期化され、GLOBALの値を変更しても現在のセッションには影響しません)が必要です。再接続するか設定する必要がありますセッションとグローバルの両方。グローバルスコープのみを持つ変数への変更は、通常すぐに有効になります( 'innodb_file_per_table'もその1つです)。しかし、あまりにもあいまいな振る舞いを持つ変数がいくつかあるので、わからないときは安全である方が簡単です。 – elenst

+0

@elenst - ありがとう。私はおそらく矛盾によって燃え尽きたでしょう。 –

関連する問題