2014年10月29日水曜日

innodb_file_format= AntelopeとBarracudaが混じっても特に問題がない

というか混じりようがない。

innodb_file_format はそもそも.ibdファイルだけに利くパラメーターであり、innodb_file_per_table が無効の場合は勝手にAntelope相当の状態にフォールバックされる。

mysql56> SET GLOBAL innodb_file_per_table= 0;
Query OK, 0 rows affected (0.05 sec)

mysql56> SET GLOBAL innodb_file_format= Barracuda;
Query OK, 0 rows affected (0.03 sec)

mysql56> CREATE TABLE t1 (num int) ROW_FORMAT= Dynamic;
Query OK, 0 rows affected, 2 warnings (0.59 sec)

mysql56> SHOW WARNINGS;
+---------+------+------------------------------------------------------------+
| Level   | Code | Message                                                    |
+---------+------+------------------------------------------------------------+
| Warning | 1478 | InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table. |
| Warning | 1478 | InnoDB: assuming ROW_FORMAT=COMPACT.                       |
+---------+------+------------------------------------------------------------+
2 rows in set (0.00 sec)

というわけで、
  • 1つのテーブルはAntelopeとBarracudaの両方の状態を持つことはできない(ROW_FORMATはテーブル属性で1つしかもてない)
  • 1つのBarracudaなテーブルは必ず.ibdファイルに格納される
  • Antelopeなテーブルはそのテーブルの.ibdファイルまたはibdata1に格納される
ので、運用中に混ぜても(それ自体は)全然問題ないです。
知らずにAntelopeのまま何年か運用してきたものを途中からSET GLOBALで乗り換えてALTER TABLE t1 ROW_FORMAT= Compressedとかも大丈夫(もちろんpt-online-schema-changeしますが)

もちろん逆も大丈夫、何らかの理由でBarracudaなテーブルをいくつか作ってからAntelopeに戻しても何の問題もない(やるとは思えないけど聞かれたのはそういうことだったんだ。。)

0 件のコメント :

コメントを投稿