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 件のコメント :
コメントを投稿