問題の調査中に、このエラーに遭遇しました。
30503 [エラー] InnoDB:以前に開いたテーブルスペースを開こうとしました。以前のテーブルスペースmysql/innodb_index_statsは、ファイルパス:./mysql/innodb_index_stats.ibdでスペースID:2を使用します。ファイルパスのスペースID:2を使用するテーブルスペースMydb/be_command_logを開けません:./Mydb/be_command_log.ibd
この問題について少し読んだ後、これが MySQLの既知の問題 であることを知りました。
しかし、私の問題は、表領域が実際にどのように機能するかについてあまり知らないことです。それらはどのように役立ちますか? この定義 と読みましたが、すべての情報を提供しているわけではありません。
誰かがテーブルスペースとは何か、どのように機能するかについての詳細な情報を共有できますか?
1つ以上のInnoDBテーブルおよび関連するインデックスのデータを保持できるデータファイル。
テーブルごとの情報クラビングの設定に基づいて、多くのタイプのテーブルスペースがあります。これらは、
a。システム表領域b。表領域ごとのファイルc。一般的なテーブルスペース
システムテーブルスペースに含まれる、
これとは別に、それも含まれています、
関連ファイルは.idbdata1
innodb_file_per_tableオプションは、MySQL 5.6以降でデフォルトで有効になっているため、テーブルごとに個別のデータファイルを使用して、テーブルごとのファイルテーブルスペースにテーブルを作成できます。 innodb_file_per_tableオプションを有効にすると、テーブル圧縮やトランスポータブルテーブルスペースなどの他のMySQL機能が利用可能になります。
関連ファイルは.idbd
InnoDBは一般的なテーブルスペースを導入しました MySQL 5.7.6。一般的なテーブルスペースは、CREATE TABLESPACE構文を使用して作成された共有テーブルスペースです。 MySQLデータディレクトリの外部で作成でき、複数のテーブルを保持でき、すべての行形式のテーブルをサポートします。
デフォルトでは、InnoDBには、識別子が0であるシステムテーブルスペースと呼ばれるテーブルスペースが1つだけ含まれています。innodb_file_per_table構成パラメーターを使用して、間接的にさらにテーブルスペースを作成できます。表領域は、一連のファイルで構成されています。ファイルのサイズは、データベースのブロックサイズで割り切れる必要はありません。なぜなら、最後の不完全なブロックを未使用のままにしておくことができるからです。新しいファイルが表領域に追加されると、ファイルの最大サイズも指定されます。現時点では、ファイルの作成時に既にファイルを最大サイズに拡張することをお勧めします。これは、テーブルスペースにさらにスペースが必要な場合にファイルを動的に拡張することを回避できるためです。データファイルは動的に拡張されますが、REDOログファイルは事前に割り当てられています。また、すでに前述したように、システムテーブルスペースのみが複数のデータファイルを持つことができます。また、表領域には複数のファイルを含めることができますが、それらは1つの大きなファイルが連結されていると見なされることも明確に述べられています。したがって、表領域内のファイルの順序は重要です。
から https://blogs.Oracle.com/mysqlinnodb/entry/data_organization_in_innodb
MySQL Innodb TableSpace は、dataディレクトリと呼ばれるディスク内のデータが存在する場所です(デフォルトでは"system tablespace")。例:
「/ var/lib/mysql」
MySQLバージョン5.6.6から、ユーザーはデータを保存するテーブルスペースを作成および指定でき、データ操作およびリカバリプロセスのスループットが可能になります。 InnoDBのfile-per-table機能は、各テーブルに個別の一般的なテーブルスペースを表す個別の。ibdデータインデックスファイルを提供します。データベース内の各テーブルが指すことができるように データディレクトリのさまざまな場所 。
例:
/home/{user}/test/data/{dbName}/{tableName}.ibd
/home/{user}/work/data/{dbName}/{tableName}.ibd
File-per-tableテーブルスペースの詳細については、この mysql documentation を参照してください。
sqlクライアントはsqlオブジェクトのみを使用し、データベースサーバーがその情報を物理的に保存する場所を気にしません。
それが表領域の概念が必要な理由です。テーブルデータのようなsqlオブジェクトは、sqlクライアントの観点からテーブルスペースに入ります。
Dbサーバーの管理者は、物理的に移動したい場所にテーブルスペースを物理的に自由に配置できるようになりました。SQLクライアントプログラムは引き続き機能します。