このセクションでは,データ型または文字セットの処理方法に関するMySQLの変更後の,テーブルの再構築方法を説明します。たとえば,照合順序のエラーが修正され、その照合順序を使用する文字カラムのインデックスを更新するためにテーブルの再構築が必要になることがあります。(例については、セクション2.11.3 "テブルまたはンデックスの再構築が必要かどうかのチェック"を参照してください。)检查表
、mysqlcheck,またはmysql_upgradeによって実行されるようなテーブルチェック操作によって示されるように,テーブルを修復またはアップグレードする必要がある場合があります。
テブルを再構築する方法には,テドする方法や,ALTER TABLE
または修理表
を使用する方法があります。修理表
はMyISAM
、存档
,およびCSV
の各テブルのみに適用されます。
バイナリ(インプレース)アップグレードまたはダウングレード後に,MySQLの異なるバージョンがテーブルを処理しないためにテーブルを再構築する場合は,ダンプしてリロードする方法を使用する必要があります。アップグレドまたはダウングレドの前に,元のバジョンのMySQLを使用してテブルをダンプします。次に,アップグレドまたはダウングレドのあとに,テブルをリロドします。
インデックスを再構築する目的のためだけにダンプしてリロードする方法を使ってテーブルを再構築する場合は,アップグレードまたはダウングレードの前でもあとでもダンプを実行できます。その場合でも,リロドはあとで行う必要があります。
テブルをダンプしてリロドすることによって再構築するには,, mysqldumpを使用してダンプファルを作成し,mysqlでファ邮箱ルをリロ邮箱ドします。
壳>,mysqldumpdb_namet1 >转储。sql壳> mysqldb_name< dump.sql
単独のデータベース内のテーブルをすべて再構築する場合は,データベース名を,そのあとにテーブル名なしで指定します。
壳>,mysqldumpdb_name>转储。sql壳> mysqldb_name< dump.sql
すべてのデタベス内のすべてのテブルをリロドするには,——所有数据库
オプションを使用してください。
Shell > mysqldump——所有数据库>转储。SQL shell> mysql < dump.sql
ALTER TABLE
でテブルを再構築する場合は,「零」変更を使用します。すなわ,すでに使用しているストレジエンジンを使用するように,テブルを「変更」するALTER TABLE
ステトメントです。たとえば,t1
がInnoDB
テブルである場合,次のステトメントを利用します。
ALTER TABLE t1 ENGINE = InnoDB;
ALTER TABLE
ステトメントで指定するストレジエンジンがわからない場合は,显示创建表
を使用してテブル定義を表示します。
检查表
操作でテブルのアップグレドが必要であることが示されるためにInnoDB
テブルを再構築する必要がある場合は,前述のように, mysqldumpを使用してダンプファルを作成し,mysqlでファ邮箱ルをリロ邮箱ドします。检查表
操作で,破損があることが示されたりInnoDB
が失敗したりする場合は,innodb_force_recovery
オプションを使用してInnoDB
を再起動する方法にいて,セクション14.19.2 " InnoDBのリカバリの強制的な実行"を参照してください。检查表
が遭遇している問題のタプを理解するには,セクション13.7.2.2“检查表構文”のInnoDB
に関する注記を参照してください。
MyISAM
、存档
,またはCSV
テーブルについては,テーブルチェック操作で破損があることやアップグレードが必要なことが示された場合は,修理表
を使用できます。たとえば,MyISAM
テブルを修復するには,次のステトメントを使用します。
mysql>表t1;
mysqlcheck——修复は,コマンド行で修理表
ステトメントへのアクセスを提供します。——数据库
オプションまたは——所有数据库
オプションをそれぞれ使用して,特定のデータベースまたはすべてのデータベースのすべてのテーブルを修復できるため,テーブル修復の方法として,より便利な場合があります。
Shell > mysqlcheck—repair—databasesdb_name...Shell > mysqlcheck——repair——all-databases
MySQL 5.1.24で,Bug #27877に対する修正(utf8_general_ci
およびucs2_general_ci
照合順序を修正しました)によって導入された非互換性については,MySQL 5.1.62, 5.5.21,および5.6.5で回避策が実装されています。これらのいずれかのバージョンにアップグレードしてから,影響を受ける各テーブルを次の方法のいずれかを使用して変換します。どの場合も,回避策には,影響されるカラムをutf8_general_mysql500_ci
およびucs2_general_mysql500_ci
照合順序を使用するように変更することが含まれます。この照合順序では,元の5.1.24より前のutf8_general_ci
およびucs2_general_ci
の順序付けを維持します。
テーブルファイルをそのまま残すバイナリアップグレード後に,影響を受けるテーブルを変換するには,新しい照合順序を使用するようにテーブルを変更します。テーブル
t1
に1または複数の問題のあるuse utf8
カラムがあるとします。テーブルをテーブルレベルで変換するには、次のようなステートメントを使用します。将表t1转换为字符集utf8;
カラム固有ベスで変更を適用するには,次のようなステトメントを使用します(
核对
句を除き,最初に指定されていたカラム定義を必ず繰り返します)。ALTER TABLE t1 MODIFY c1 CHAR(N) CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;
ダンプしてリロドする手順を使用してテブルをアップグレドする場合は,, mysqldumpを使用してテブルをダンプし,ダンプファル内の
创建表
ステトメントを新しい照合順序を使用するように変更して,テドします。
適切な変更を行うと,检查表
はエラをレポトしないはずです。