既存データを運用中のサーバーAと新規にMySQLをインストールしたサーバーBとで、
運用中のサーバーAをマスターに、新規のサーバーBをスレーブにしたレプリケーションを行おうとしていますが、うまくできません。
どなたか、教えてください。
スレーブ上でマスター情報登録するCHANGE MASTER TOコマンドを実行すると、
ERROR 1201 (HY000): Could not initialize master info structures; more error
messages can be found in the MySQL error log
となって、レプリケーションが有効になりません。
なお、サーバーAはマスターとして動いているようです。
現在の環境と実行した結果は以下の通りです。(長文です)
<作業環境>
1.サーバーA:マスターの環境
OS:Windows 7 Professional SP1(32bit)
PC:DELL Vostro(Intel Core 2 Duo,CPU E7500 2.93GHz) RAM 2.00GB
MySQLサーバ:バージョン5.5.25
(mysql-5.5.25-win32.msi)
Workbench:バージョン5.2.39CE Revision 8757
(mysql-workbench-gpl-5.2.39-win32.msi)
コンフィグレーション
Configuration File: C:\Program Files\MySQL\MySQL Server 5.5\my.ini
<iniファイルの内容>
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server
5.5/Data/"
2.サーバーB:スレーブの環境
サーバマシンと同じ構成のPC
コンフィグレーション
Configuration File: C:\ProgramData\MySQL\MySQL Server
5.5\data\my.ini
<iniファイルの内容>
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server
5.5/Data/"
<行った手順>
0.(マスター)(スレーブ) MySQL起動
1.(マスター)レプリケーション専用ユーザの登録
1-1.マスター上のMySQLに、スレーブからアクセスするレプリケーション用ユーザー(repli)を登録。
Workbench/Admin/Users and Privileges/
Server Access Management/Administrative
Rolesタブで ReplicationAdmin権限を設定
Schema Privileges/ ですべてのスキーマに対してすべての権限を設定
1-2.(スレーブ)スレーブから1-1.で作成したアカウントでマスターへの接続確認
Workbench/New Connectionで
Hostname = マスターのIPアドレス
Port = 3306
Username = repli
Password = 1-1.でrepliに対して設定したパスワード
Default Schema = Nullのまま
として「Test Connection」ボタンを押したところ、
「Connection parameters are correct.」
となり接続成功。
2.(マスター)コンフィギュレーション設定
2-1.マスター上のMySQLを停止
マスターのレプリケーション設定を行うためにマスター上のMySQLを停止
2-2.マスターのmy.iniファイル編集(WorkBench使用)
[mysqld]
log-bin = mysql-bin
binlog-format = MIXED
general-log
auto_increment_increment = 1
server-id = 4
log-error = log-error
show-slave-auth-info
auto_increment_offset = 1
general_log_file = host_name.log
sync_binlog = 1
log-bin-index =
iniファイルが設定どおり更新されているか確認した。
3.(スレーブ)コンフィギュレーション設定
3-1.スレーブ上のMySQLを停止
スレーブの設定を行うためにスレーブ上のMySQLを停止
3-2.スレーブのmy.iniファイル編集(WorkBench使用)
[mysqld]
sync_binlog = 1
server-id = 6
log-slave-updates
slave-load-tmpdir = /tmp
report-host = Slave_Toshijoho
report-port = 3306
skip-slave-start
General slaveセクションで
skip-slave-start をチェックし、スレーブサーバを起動したとき、自動でスレーブが起動しないようにした。
なお、下記のマスターの情報はWorkbenchで設定する場所がないので、my.iniファイルの[mysqld]セクションに追加した。
master-host='123.456.789.101'(マスターのIPアドレス)
master-user='repli'(マスターに登録したレプリケーション用ユーザー名)
master-password='password'(マスターに登録したレプリケーション用ユーザーのパスワード)
master-port=3306
4.(マスター)レプリケーション情報の取得
マスターで、以下の処理を行う。マスターのMySQLは停止中
4-1.マスターのMySQLを起動
停止中のMySQLを起動。
4-2.データのフラッシュ
mysql> FLUSH TABLES WITH READ LOCK;
4-2.マスターレプリケーション情報の取得
mysql> SHOW MASTER STATUS;
File: mysql-bin.000004
Position: 597
5.(マスター)マスター上のデータをアーカイブ
コマンドプロンプトでmysqldumpを実行
C:\......>mysqldump --host="localhost"
--user="root"
--password="????"
--all-database --lock-all-tables
> dbdump.db
アーカイブが完了したら、ロックを解除する。
mysql> UNLOCK TABLES;
6.(スレーブ)スレーブにマスターのデータをインポート
6-1.スレーブサーバーのMySQLを起動
--skip-slaveオプションを使用してレプリケーションをスキップし、スレーブを立ち上げる。
(my.iniファイルにskip-slave-startオプションを設定済み)
6-2.インポート
mysqldumpで作成したマスターのダンプファイルをコマンドプロンプトでインポートする。
C:\......>mysql --user="root" --password="???" < dbdump.db
7.(スレーブ)マスター情報登録
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
MASTER_HOST = '123.456.789.101', (マスターのIPアドレス)
MASTER_PORT=3306,
MASTER_USER = 'repli', (マスターに登録したレプリケーション用ユーザー名)
MASTER_PASSWORD =
'password'(マスターに登録したユーザrepliのパスワード),
MASTER_LOG_FILE = 'mysql-bin.000004',
MASTER_LOG_POS = 107;
ここで、下記のエラーが発生。
ERROR 1201 (HY000): Could not initialize master info structures; more error
messages can be found in the MySQL error log
8.(スレーブ)スレーブ起動
mysql> START SLAVE;
7.がうまくいっていないので、ここでもERROR 1201 (HY000)がでて、スレーブは起動しません。
9.(マスター)マスターの確認
mysql> show master status\G エラーなし 1行リターン
File:
mysql-bin.000004
Position: 597
Binlog_Do_DB:
Binlog_Ignore_DB:
10.(スレーブ)スレーブの確認
スレーブの状態を確認したところ、下記のようになっていて、動いていないようです。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 123.456.789.101
Master_User: repli
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos:
107
.......
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos:
107
Relay_Log_Space: 0
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Seconds_Behind_Master:
NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
1 row in set (0.00 sec)
なお、CHANGE MASTER TOでのエラーメッセージにある”MySQL error
log”を見る方法も教えていただけましたら、幸いです。
大変長文となりましたが、ぜひ解決方法を教えてください。