MySQLのinnodb_data_file_pathパラメータを変更する際の注意事項

MySQLのinnodb_data_file_pathパラメータを変更する際の注意事項

序文

innodb_data_file_path は、innodb テーブルスペース ファイルを指定するために使用されます。My.cnf ファイルで innodb_data_home_dir と innodb_data_file_path を指定しない場合は、デフォルトで ibdata1 が datadir ディレクトリに innodb テーブルスペースとして作成されます。

例示する

テスト環境では、あまり詳細なパラメータを設定せずにサービスを初期化して起動しました。その後の最適化プロセスで、innodb_data_file_path が小さすぎることが判明しました。

root@node1 14:59: [(なし)]> '%innodb_data_file_path%' のような変数を表示します。
+----------------------+------------------------+
| 変数名 | 値 |
+----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:自動拡張 |
+----------------------+------------------------+
セット内の 1 行 (0.00 秒)

root@node1 14:59: [(なし)]>

innodb_data_file_pathが設定されていない場合、デフォルトのinnodb_data_file_path = ibdata1:12M:autoextend

[mysqld]
innodb_data_file_path = ibdata1:12M:自動拡張

1G に変更する必要がある場合、構成ファイルで ibdata1 を 1G に直接変更することはできません。

[mysqld]
innodb_data_file_path = ibdata1:1G:自動拡張

そうでない場合、サービスを開始した後、エラー ログに次のエラーが表示されます。

2019-03-29T06:47:32.044316Z 0 [エラー] InnoDB: 自動拡張 innodb_system データ ファイル './ibdata1' のサイズが、.cnf ファイルで指定されたサイズ (初期 65536 ページ、最大 0 ページ (ゼロ以外の場合は関連)) と異なる 768 ページ (MB に切り捨て) です。

一般的な意味は、ibdata1のサイズは65536page*16KB/1024KB=1Gではなく、 786page*16KB/1024KB=12Mあるということです。
(圧縮ページは使用されません)

方法1: 推奨

代わりに、次のように別の ibdata2:1G を追加します。

[mysqld]
innodb_data_file_path = ibdata1:12M;ibdata2:1G:自動拡張

データベースを再起動してください。

方法2: 推奨されません

以下のように直接変更

[mysqld]
innodb_data_file_path = ibdata1:1G:自動拡張

$mysql_datadir ディレクトリ内の ibdata1、ib_logfile0、および ib_logfile1 ファイルを削除できます。

rm -f ibdata* ib_logfile*

MySQL を起動することもできますが、MySQL エラー ログに次のエラーが報告されます。

2019-03-29T07:10:47.844560Z 0 [警告] max_open_files の数を 5000 以上に増やすことができませんでした (リクエスト: 65535)
2019-03-29T07:10:47.844686Z 0 [警告] 制限が変更されました: table_open_cache: 1983 (要求 2000)
2019-03-29T07:10:48.028262Z 0 [警告] 'NO_AUTO_CREATE_USER' SQL モードが設定されていません。
2019-03-29T07:10:48.147653Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/plugin を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
mysqld: テーブル 'mysql.plugin' が存在しません
2019-03-29T07:10:48.147775Z 0 [エラー] mysql.plugin テーブルを開けません。mysql_upgrade を実行して作成してください。
2019-03-29T07:10:48.163444Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/gtid_executed を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
mysqld: テーブル 'mysql.gtid_executed' が存在しません
2019-03-29T07:10:48.163502Z 0 [警告] Gtid テーブルは使用準備ができていません。テーブル 'mysql.gtid_executed' を開くことができません。
2019-03-29T07:10:48.163658Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/gtid_executed を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
mysqld: テーブル 'mysql.gtid_executed' が存在しません
2019-03-29T07:10:48.163711Z 0 [警告] Gtid テーブルは使用準備ができていません。テーブル 'mysql.gtid_executed' を開くことができません。
2019-03-29T07:10:48.164619Z 0 [警告] 次の SSL ライブラリ エラーのため、SSL の設定に失敗しました: 証明書と秘密鍵がないと SSL コンテキストは使用できません
2019-03-29T07:10:48.166805Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/server_cost を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.166891Z 0 [警告] オプティマイザコスト定数テーブルを開けませんでした

2019-03-29T07:10:48.168072Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/time_zone_leap_second を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.168165Z 0 [警告] タイムゾーンテーブルを開いてロックできません: テーブル 'mysql.time_zone_leap_second' は存在しません。
2019-03-29T07:10:48.169454Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/servers を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.169527Z 0 [エラー] 権限テーブルを開いてロックできません: テーブル 'mysql.servers' が存在しません
2019-03-29T07:10:48.170042Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/slave_master_info を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.170617Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/slave_relay_log_info を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.170946Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/slave_master_info を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.171046Z 0 [警告] 情報テーブルを使用する準備ができていません。テーブル 'mysql.slave_master_info' を開くことができません。
2019-03-29T07:10:48.171272Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/slave_worker_info を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.171626Z 0 [警告] InnoDB: テーブルの .frm ファイルは存在しますが、InnoDB の内部データ ディクショナリからテーブル mysql/slave_relay_log_info を開くことができません。 問題を解決する方法については、http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html を参照してください。
2019-03-29T07:10:48.171688Z 0 [警告] 情報テーブルを使用する準備ができていません。テーブル 'mysql.slave_relay_log_info' を開くことができません。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL btree インデックスとハッシュ インデックスの違い
  • MySQL InnoDBとMyISAMの違いを簡単に理解する
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • MySQL Innodb ストレージ構造と Null 値の保存の詳細な説明
  • MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー
  • MySQL (InnoDB) がデッドロックを処理する方法の詳細な説明
  • MySQL エンジンを変更する方法 (InnoDB、MyISAM)
  • MySQLのパフォーマンスを向上させるInnoDB構成パラメータ
  • MySQL エラー: type=InnoDB ソリューションの近くで使用する正しい構文の MySQL サーバー バージョン
  • MySQL データベース InnoDB の起動失敗と再起動不能の解決策
  • MySQL innodb B+ツリーの高さを取得する方法

<<:  Vue命令の動作原理と実装方法

>>:  Centos での TCPWrappers アクセス制御の実装

推薦する

JavaScriptの構文とコード構造に関する深い理解

目次概要機能性と読みやすさ空白括弧セミコロンインデント身元大文字と小文字を区別予約キーワード概要すべ...

一時ファイルを作成できないために MySQL が起動できない問題を解決する方法

問題の説明最近、仕事中に問題が発生しました。MySQL が起動に失敗しました。エラー ログは次のとお...

MySQLでデータベースデータ保存ディレクトリを変更する方法

序文MySQL データベースのデフォルトのデータベース ファイルは /var/lib/mysql に...

ホバー生成の境界線によって生じる要素の移動を解決する方法

序文hover疑似クラスが要素に境界線を追加すると、要素内のコンテンツがずれることがあります。box...

MySQL 正規表現 (regexp と rlike) の検索機能の例分析

この記事では、例を使用して MySQL 正規表現 (regexp および rlike) の検索機能を...

MySQLインデックスとは何ですか?わからない場合は聞いてください

目次概要二分木からB+木へクラスター化インデックス非クラスター化インデックスジョイントインデックスと...

Tomcat10 Catalinaのログの文字化けの問題を解決する

実行環境、Idea2020バージョン、Tomcat10、実行時にTomcat CatalinaLog...

ネイティブ Js で実装されたシンプルなシームレス スクロール カルーセルのサンプル コード

シンプルなシームレススクロールカルーセルには多くの抜け穴があり、後から画像を追加するのは非常に不便で...

Mysql 更新マルチテーブル共同更新方法の概要

次に、2 つのテーブルを作成し、一連の SQL 文を実行します。SQL 文の実行後にテーブル内のデー...

Vueはミックスインを使用してコンポーネントを最適化します

目次ミックスインの実装フック関数のマージプロジェクト実践伸ばす要約するVue は mixins AP...

Vue のすべてのカプセル化方法の簡単な概要

目次1. カプセル化API 2. グローバルツールコンポーネントを登録する3. グローバル関数をカプ...

MySQLカバーインデックスの利点

一般的な提案は、WHERE 条件のインデックスを作成することですが、これは実際には一方的です。インデ...

MySQL の NULL と空の文字列

最近、MySQL に触れました。昨日、テーブル構造情報を格納するための新しいテーブルを作成しました。...

個人ブログシステムを構築するためのDockerの超シンプルな実装

Dockerをインストールするyumパッケージを最新バージョンに更新します: sudo yum up...

Vueはダイアログのカプセル化を実装します

目次Vue2 ライティングVue3プラグインのバージョンの記述Vue3 動的コンポーネントの記述書き...