LOAD DATA FROM MASTER
この機能は終了しました。今後は使わないことを勧めます。MySQLの将来のバージョンでは取り除かれることもあります。
LOAD DATA FROM MASTER
と LOAD
TABLE FROM MASTER
の現在のインプリメンテーションがとても制限されているので、これらのステートメントは
MySQL のバージョン 4.1
以降では廃止予定です。今後のバージョンでは、さらに進歩した技術(「online
backup」 と呼ばれる物)
を紹介する予定です。その技術は、さらに多くのストレージ
エンジンと機能する更なる利点を持ちます。
MySQL 5.1 以前のバージョンで LOAD DATA FROM
MASTER
か LOAD TABLE FROM MASTER
を利用する為に推奨する代替方法は、mysqldump
か mysqlhotcopy
を利用する事です。後者は Perl と2つの Perl
モジュール(DBI
と
DBD:mysql
)を必要とし、MyISAM
と ARCHIVE
テーブルにだけ機能します。mysqldump
を利用すると、マスタ上に SQL
ダンプを作成でき、それらをスレーブ上の
mysql
クライアントにパイプ(またはコピー)できます。これは全てのストレージ
エンジンに機能するという利点を持ちますが、SELECT
を利用して機能する為スピードが大変遅いです。
このステートメントは、マスタのスナップショットを撮り、それをスレーブにコピーします。それは、スレーブが正しい位置から複製を始めるように
MASTER_LOG_FILE
と
MASTER_LOG_POS
の値を更新します。--replicate-*-do-*
と --replicate-*-ignore-*
オプションを利用して指定されたテーブルとデータベースの除外ルールは支持されています。マスタからテーブルをロードする時にスレーブを混乱させる
--replicate-rewrite-db="db1->db3"
と
--replicate-rewrite-db="db2->db3"
のような非固有マッピングを設定する為に、ユーザはこのオプションを利用できるので、--replicate-rewrite-db
は考慮に入れられて
いません。
このステートメントは次の条件に従い利用できます:
これは MyISAM
テーブルにしか機能しません。非
MyISAM
テーブルをロードしようとすると、次のエラーが起こります。
ERROR 1189 (08S01): Net error reading from master
それはスナップショットを撮っている間にグローバル リード ロックを取得し、それはロード作業中のマスタ上での更新を妨げます。
もし大きいテーブルをロードしていたら、マスタとスレーブの両方で
net_read_timeout
と
net_write_timeout
の値を増やす必要があるでしょう。詳しくは
項4.2.3. 「システム変数」
を参照してください。
LOAD DATA FROM MASTER
は
mysql
データベースから何もコピー
しない
事に注意してください。これは、マスタとスレーブ上で異なるユーザと権限を持つ事を簡単にします。
LOAD DATA FROM MASTER
を利用する為には、
マスタに接続する為に利用される複製アカウントはマスタ上に
RELOAD
と SUPER
権限を持ち、ロードしたい全てのマスタ
テーブルに SELECT
権限を持つ必要があります。ユーザが
SELECT
権限を持たない全てのマスタ テーブルは
LOAD DATA FROM MASTER
に無視されます。これは、マスタがユーザからそれらを隠す為に起こります。LOAD
DATA FROM MASTER
は、ロードするデータベースを知る為に
SHOW DATABASES
をコールしますが、SHOW DATABASES
はユーザが何かしらの権限を持つデータベースだけを返します。詳しくは
項12.5.4.11. 「SHOW DATABASES
構文」
を参照してください。スレーブ
サイドでは、LOAD DATA FROM MASTER
を発行するユーザはデータベースをドロップし作成する権限と、コピーされるテーブルを持つ必要があります。