web-dev-qa-db-ja.com

MySQLがmysqldumpのロード後にinnodb_file_formatを保持しなかった理由

今日遭遇したとき、私はmysqlダンプをロードしていました

ERROR 1118 (42000) at line 279: Row size too large (> 8126)

私が行圧縮をオンにし、そのサーバーでバラクーダを使用していたことを知っているので、私は奇妙だと思いました。また、本番データベースでその問題に遭遇していないことも知っていました。

私は本番データベースを確認しました

show variables like "%innodb_file%";
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_file_format       | Barracuda |
| innodb_file_format_check | ON        |
| innodb_file_format_max   | Barracuda |
| innodb_file_per_table    | ON        |
+--------------------------+-----------+

しかし、ダンプをロードするサーバーでは、file_format変数は次のように設定されます。

mysql> show variables like "%innodb_file%";
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_file_format       | Antelope  |
| innodb_file_format_check | ON        |
| innodb_file_format_max   | Antelope  |
| innodb_file_per_table    | ON        |
+--------------------------+-----------+

MySQLダンプは次のようになります

Sudo mysqldump -u mysqlbackups --databases limbo | gzip > /local_backup_directory'+%m-%d-%Y'.sql.gz

Innodb_file_format変数とformat_max変数がダンプされなかったのはなぜですか? mysqldumpにfile_format変数およびformat_max変数をダンプするように指示するにはどうすればよいですか?

3
AlexLordThorsen

上のMySQLドキュメントによると

innodb_file_format

新しいInnoDBテーブルに使用するファイル形式。現在、アンテロープとバラクーダがサポートされています。これは、独自のテーブルスペースを持つテーブルにのみ適用されるため、それを有効にするには、innodb_file_per_tableを有効にする必要があります。バラクーダファイル形式は、テーブル圧縮などの特定のInnoDB機能に必要です。

innodb_file_format_max

サーバーの起動時に、InnoDBはこの変数の値をシステムテーブルスペース(AntelopeやBarracudaなど)のファイル形式タグに設定します。サーバーが「より高い」ファイル形式でテーブルを作成または開くと、innodb_file_format_maxの値がその形式に設定されます。

これらはデータではなくmy.cnfに属しているため、mysqldumpに関する限り、InnoDBのフォーマットは不可知論です。すべてをオンザフライでバラクーダにシフトしたい場合は、2つの方法があります(開発サーバーとステージングサーバーで提案する方法をテストしてください)。

テクニック#1:mysqldumpにバラクーダオプションを付加する

Mysqldumpファイルの名前がmydump.sqlであるとします。これを行う:

echo "SET GLOBAL innodb_file_format = 'Barracuda';" > mynewdump.sql
cat mydump.sql >> mynewdump.sql

さて、ダンプをロードしてください

mysql -uroot -p < mynewdump.sql

テクニック#2:ダンプをロードする前にバラクーダオプションを設定する

root@localhostとしてmysqlにログインし、mysqlプロンプトからこれを実行します

mysql> SET GLOBAL innodb_file_format = 'Barracuda';
mysql> source mynewdump.sql

警告

開発およびステージングサーバーで提案をテストしてください

試してみる !!!

3
RolandoMySQLDBA