MyISAMテーブルのみを含む1つのmysqlデータベースを備えた1台のサーバーがあります。サーバーには他のデータベースはありません(もちろんシステムデータベースを除きます)。 mysql 5.7.27に移動したため、InnoDB関連のエラーが発生し、さらにはクラッシュします。ほとんどの構成は、Ubuntu 18.04パッケージに付属しているデフォルトの構成です。myisamバッファーとキャッシュを調整しただけです。 (今、私はinnodbプールサイズも増やしました、それがそれらのエラーがなくなることを願っています)
これらのエラーの原因は何ですか?それらを取り除く方法は?
エラーの例:
2019-09-19T04:39:34.464347Z 5169718 [警告] InnoDB:バッファプールで空きブロックを見つけるのは困難です(21回の検索の反復)!ページのフラッシュに21回失敗しました!バッファー・プールのサイズを増やすことを検討してください。 Unixバージョンでは、fsyncが非常に遅いか、OSカーネル内で完全にフリーズしている可能性もあります。次に、オペレーティングシステムの新しいバージョンにアップグレードすると役立つ場合があります。以下の診断情報でfsyncの数を確認してください。保留中のフラッシュ(fsync)ログ:0;バッファープール:0。22967494OSファイルの読み取り、55308825 OSファイルの書き込み、1252 OS fsync。 InnoDBモニターを起動して、さらなる診断を標準出力に出力します。
2019-09-20T08:27:30.209263Z 0 [エラー] [致命的] InnoDB:ページ[ページID:スペース= 45、ページ番号= 4551]まだ修正またはダーティ
2019-09-20 10:27:30 0x7f9350594740 InnoDB:ファイルut0ut.cc行910のスレッド140270684948288のアサーションエラー
Innodbテーブル:
+--------------------+---------------------------+
| table_schema | table_name |
+--------------------+---------------------------+
| information_schema | COLUMNS |
| information_schema | EVENTS |
| information_schema | OPTIMIZER_TRACE |
| information_schema | PARAMETERS |
| information_schema | PARTITIONS |
| information_schema | PLUGINS |
| information_schema | PROCESSLIST |
| information_schema | ROUTINES |
| information_schema | TRIGGERS |
| information_schema | VIEWS |
| mysql | engine_cost |
| mysql | gtid_executed |
| mysql | help_category |
| mysql | help_keyword |
| mysql | help_relation |
| mysql | help_topic |
| mysql | innodb_index_stats |
| mysql | innodb_table_stats |
| mysql | plugin |
| mysql | server_cost |
| mysql | servers |
| mysql | slave_master_info |
| mysql | slave_relay_log_info |
| mysql | slave_worker_info |
| mysql | time_zone |
| mysql | time_zone_leap_second |
| mysql | time_zone_name |
| mysql | time_zone_transition |
| mysql | time_zone_transition_type |
| sys | sys_config |
+--------------------+---------------------------+
バージョン
mysql> show global variables like '%version%';
+-------------------------+-------------------------+
| Variable_name | Value |
+-------------------------+-------------------------+
| innodb_version | 5.7.27 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1 |
| version | 5.7.27-0ubuntu0.18.04.1 |
| version_comment | (Ubuntu) |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+-------------------------+
あなたに迷惑なニュースがあります。 MySQL 5.7ではInnoDBが永続的に有効になっています。ドキュメントにあります :
重要
InnoDBを無効にすることはできません。 --skip-innodbオプションは非推奨であり、効果はなく、使用すると警告が表示されます。今後のMySQLリリースで削除される予定です。これは同義語にも適用されます(--innodb = OFF、-disable-innodbなど)。
InnoDBテーブルの数はバージョンごとに増加しています。
私はこれを述べましたApr 04, 2018
以前の投稿 XtraBackupをMySQL 5.6からMySQL 5.7に復元
MySQLスキーマファイル
MySQLスキーマのInnoDBテーブルの数もメジャーリリース間で変化します。
2017年12月9日に戻って、私は答えました エラー1031(HY000): 'proc'のテーブルストレージエンジンにはこのオプションがありません とInnoDBテーブルがMySQLスキーマで使用され始めたときに議論されました。
MySQL 5.6では、5つのテーブルでした。 MySQL 5.7では、19になりました。MySQL8.0では、31のテーブルすべてがInnoDBです。
以前の投稿から、MySQL 5.7にはmysql
スキーマに19のInnoDBテーブルがあると述べました。
InnoDBを適切に狩るために、これを実行します
SELECT table_schema,table_name
FROM information_schema.tables
WHERE engine='InnoDB';
mysql
スキーマの19個のテーブルが表示されます。追加のInnoDBテーブルがある場合は、それらのテーブルを削除するか再構築する必要があります。このクエリで19個のテーブルが表示されない場合は、これを修正する必要があります。
私はあなたがあなたの質問で言ったことに気づきました:Since it moved to mysql 5.7.27 there are InnoDB related errors and even crashes
システムテーブルを正しくアップグレードしなかった場合、mysqldはおそらくmysql
スキーマテーブルをInnoDBとして探しています。
MySQL 5.7 Docs on mysql_upgrade を読み、 -upgrade-system-tables を確認してください。 mysql
スキーマテーブルをMyISAMからInnoDBに変換する必要があります。
まずは事前にテスト環境で行ってください。
Niceチャットセッションの後、多くの一時テーブルが生成されていることがわかりました。すべての一時テーブルはInnoDBを使用しており、InnoDBバッファープールの482MBを消費していました。 InnoDBバッファープールはデフォルト(128M)でした。 512Mを超えると解決しました。
また、すべてをInnoDBに切り替えることをお勧めします。
MyISAMからInnoDBに切り替えます。これは、変換の違いと落とし穴をカバーします: http://mysql.rjweb.org/doc.php/myisam2innodb
設定については http://mysql.rjweb.org/doc.php/memory を参照してください。以下に要約します。
64 GBのRAMこれは主にMySQLで使用されている場合)、これらは最適に近い可能性があります。
MyISAMからInnoDBへの移行中:
key_buffer_size = 6G
innodb_buffer_pool_size = 20G
InnoDBへの変換後:
key_buffer_size = 40M
innodb_buffer_pool_size = 45G