2016年5月2日月曜日

レプリケーションに関わる各種トラブルQ&A

○レプリケーションに関わる各種トラブルQ&A
Q1:Mysqlのレプリケーションを行い、スレーブのPCを設定修正の必要が生じた場合、注意することは?
その都度スレーブ機能を停止する必要があることに、ご注意ください。具体的には、いったん、
stop slave;  とし
drop database skt;  としてから、新たにデータベースを作り直すことになります。

Q2:うまく同期されてないときどうするか?
>show slave status\G
でslave_IO_RunningがNoならば
>stop slave;
>reset slave;
ここで、⑤のCHANGE MASTER TO~を再度実行
>start slave;
を一度試してみてください。

Q3:Q2の方法でも、うまく動作しないときはどうするか?
my.ini(Windows)、my.cnf(Ubuntu)に次の設定をしてみてください。
[mysqld]
slave-skip-errors=1062,1050,1146,1136,1580
の行を追加したあと、Ubuntuならばservice mysql restartで再起動、WindowsならコントロールパネルのサービスからMysqlを再度起動してみます。

Q4:Access denied for user 'root'@'localhost' (using password: NO)というエラーが出る。
以下の方法はhttp://www.goofoo.jp/2011/11/1457を参照させていただきました。
service mysql stop
mysqld_safe --skip-grant-tables &
mysql -u root
でmysqlのコマンドプロンプトに入れます。

mysql> use mysql;
念のためuserテーブルを全件削除してから、設定を実行。
mysql> truncate table user;
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'password' with grant option;
実行結果を確認します。
mysql> select host, user from user;
+-----------+------+
| host      | user |
+-----------+------+
| localhost | root |
+-----------+------+
1 row in set (0.00 sec)
これでrootユーザへの権限設定ができましたので、MySQLを–skip-grant-tablesオプションなしで再起動(通常起動)します。
mysql> quit;
service mysql restartでPIDを確認後
[root ~]# kill -KILL [mysql のPID]
[root ~]# service mysql start
mysql を起動中:                                           [  OK  ]
最後に、遭遇したエラーが解消されていることを確認します。
[root ~]# mysql -u root -pパスワード
以上の操作でもうまく、mysqlのコマンドプロンプトが使えない場合
GUIで、Ubuntuのアップデートをしてみる。
これでも、だめな場合
mysqld_safe --skip-grant-tables &として
エラーを見ながら不足するパッケージをいてみる
mysql -u root -pで再度ログインしてみる。

Q5:OSのアップデートしたら、同期しなくなった。
まれに、Ubuntuのアップデートで、Mysqlのバージョンが変わったりすると、違うバージョン間のレプリケーションがうまくいかないことがあるようです。(WindowsのMysqlのバージョンが更新されないため、レプリケーションサーバにWindowsがあったりすると起こりえます。)
再度レプリケーションの修復設定をしたい場合以下のように行います。
①コマンドプロンプトを右クリックし管理者権限で開く
②エクスプローラーで、C:\ProgramFiles\mysql????\binのフォルダのパスを探し、コピーし、コマンドプロンプト内でcd C:\ProgramFiles\my….と貼りつける
※masterのPCでmysqlをアップグレードした場合、
 mysql_upgrade -u repl -pエンター  でアップグレードする。
③mysql -u repl -pエンター
④show slave status\Gエンター
⑤Last_errorの欄のエラー番号をひかえる
⑥C:\ProguramdataフォルダのMysqlのフォルダのmy.iniにスキップしたいエラー番号を追加します。
[mysqld]
slave-skip-errors=1062,1050,1146,1136,1580
最後の行の番号がこれまで、エラーが起きて追加してきた番号です。
ただし、必要な処理がスキップされてしまわないように、追加する番号は、状況をよく見て決めます。場合によっては、再度、マスターをロックして、ダンプデータのコピー、MASTER_LOG_FILEデータ、MASTER_LOG_POSデータの取得をやり直す必要も出てくると思います。

0 件のコメント:

コメントを投稿