Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


17.4.1.27 サーバー側ヘルプテーブルのレプリケーション

サーバーは、HELP ステートメントの情報を格納するテーブルを mysql データベース内で保持します (セクション13.8.3「HELP 構文」を参照してください)。これらのテーブルは、セクション5.1.10「サーバー側のヘルプ」で説明したとおり、手動でロードできます。

ヘルプテーブル内容は MySQL リファレンスマニュアルから抽出されます。各 MySQL リリースシリーズに固有のマニュアルバージョンがあるため、ヘルプの内容も各シリーズに固有です。一般的には、サーバーバージョンに一致するバージョンのヘルプ内容をロードしてください。これはレプリケーションに密接な関係があります。たとえば、MySQL 5.5 マスターサーバーには MySQL 5.5 ヘルプ内容をロードしますが、5.6 ヘルプ内容がより適している MySQL 5.6 スレーブサーバーには必ずしもその内容を複製する必要はありません。

このセクションでは、サーバーがレプリケーションに参加するときに、ヘルプテーブル内容の更新をどのように管理するかについて説明します。サーバーバージョンがこのタスクの 1 つの要因です。もう 1 つは、ヘルプテーブル構造がマスターとスレーブで異なる場合があることです。

ヘルプ内容が fill_help_tables.sql という名前のファイルに格納されているとします。MySQL 配布では、このファイルは share または share/mysql ディレクトリの下にあり、最新版はいつでも https://dev.mysql.com/doc/index-other.htmlからダウンロードできます。

ヘルプテーブルをアップグレードするには、次の手順を使用ます。ここで説明する mysql コマンドの接続パラメータは示されていません。どのような場合でも、mysql データベース内のテーブルを変更するための権限を持つ、root などのアカウントを使用してサーバーに接続してください。

  1. mysql_upgrade をまずスレーブ上で実行してからマスター上で実行することで、サーバーをアップグレードします。スレーブを最初にアップグレードするというのが一般原則です。

  2. ヘルプテーブル内容をマスターからそのスレーブに複製するかどうかを決めます。しない場合は、マスターと各スレーブに個別に内容をロードします。または、マスターおよびそのスレーブ上のヘルプテーブル構造の非互換を確認し、ある場合は解決してから、内容をマスターにロードしてそこからスレーブに複製します。

    ヘルプテーブル内容をロードするためのこれらの 2 つの方法をこれから詳しく説明します。

スレーブへのレプリケーションなしでヘルプテーブル内容をロードする

ヘルプテーブル内容をレプリケーションなしでロードするには、サーバーバージョンに適した内容を含む fill_help_tables.sql ファイルを使用して、マスターおよび各スレーブで個々に次のコマンドを実行します (コマンドは 1 行に入力します)。

mysql --init-command="SET sql_log_bin=0"
  mysql < fill_help_tables.sql

レプリケーショントポロジ内でスレーブがほかのスレーブのマスターとしても動作している場合は、各サーバー (スレーブを含む) に --init-command オプションを使用します。SET ステートメントはバイナリロギングを抑止します。アップグレードする各サーバーでコマンドが実行されると、完了です。

スレーブへのレプリケーションありでヘルプテーブル内容をロードする

ヘルプテーブル内容を複製しない場合は、マスターとそのスレーブ間のヘルプテーブル非互換を確認します。help_category および help_topic テーブル内の url カラムは、最初は CHAR(128) でしたが、長い URL に対応するために新しい MySQL バージョンでは TEXT です。ヘルプテーブル構造を確認するには、次のステートメントを使用します。

SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'mysql'
AND COLUMN_NAME = 'url';

古い構造のテーブルの場合、ステートメントは次の結果を返します。

+---------------+-------------+-------------+
| TABLE_NAME    | COLUMN_NAME | COLUMN_TYPE |
+---------------+-------------+-------------+
| help_category | url         | char(128)   |
| help_topic    | url         | char(128)   |
+---------------+-------------+-------------+

新しい構造のテーブルの場合、ステートメントは次の結果を返します。

+---------------+-------------+-------------+
| TABLE_NAME    | COLUMN_NAME | COLUMN_TYPE |
+---------------+-------------+-------------+
| help_category | url         | text        |
| help_topic    | url         | text        |
+---------------+-------------+-------------+

マスターとスレーブの両方が古い構造の場合、または両方が新しい構造の場合は、互換であるため、マスターで次のコマンドを実行することでヘルプテーブル内容を複製できます。

mysql mysql < fill_help_tables.sql

テーブル内容はマスターにロードされてから、スレーブに複製されます。

マスターとスレーブのヘルプテーブルが非互換の場合は (一方のサーバーが古い構造で、もう一方が新しい構造)、ヘルプテーブル内容を最終的に複製しないか、または内容を複製できるようにテーブル構造を互換にするかを選択できます。

  • 最終的に内容を複製しないことを決めた場合、すでに説明したように、--init-command オプション付きの mysql を使用してマスターとスレーブを個々にアップグレードします。

  • そうではなく、テーブル構造に互換することを決めた場合は、サーバー上の古い構造のテーブルをアップグレードします。マスターサーバーのテーブル構造が古いとします。次のステートメントを実行することで、テーブルを新しい構造に手動でアップグレードします (すでに新しい構造のスレーブに変更が複製されることを回避するために、ここではバイナリロギングが無効になっています)。

    SET sql_log_bin=0;
    ALTER TABLE mysql.help_category ALTER COLUMN url TEXT;
    ALTER TABLE mysql.help_topic ALTER COLUMN url TEXT;

    次に、マスターで次のコマンドを実行します。

    mysql mysql < fill_help_tables.sql

    テーブル内容はマスターにロードされてから、スレーブに複製されます。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.