UJP - 技術情報1

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

MySQLでレプリケーションを設定する

MySQLでレプリケーションを設定する


0.改訂履歴

  • 2006.03.15 新規作成

1.はじめに

 このドキュメントでは,MySQL4.1.18を利用し,1方向レプリケーション構成を作成する手順を説明する. この手順書では,普通の設定までの手順だけではなく,エラー1050と1062が出た場合の対処の例についても経過を載せている.

 なお,使用しているOSは,RedHat Linux ES上で稼働している.

2.マスターサーバでの設定.

  • マスターのサーバで稼働しているMySQL上に,レプリケーション用アカウントを作成する.
mysql> grant replication slave,replication client 
    -> on *.* to repl@localhost identified by 'reppass';
Query OK, 0 rows affected (0.00 sec)

mysql>  
  • フラッシュさせ,設定したユーザ権限を即時に反映させる.
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>  
  • /etc/my.cnfファイルを修正し,バイナリログモードと,サーバIDを設定する.
変更前
#skip-networking
server-id       = 1

# Uncomment the following if you want to log updates
#log-bin

# Uncomment the following if you are NOT using BDB tables
#skip-bdb
変更後
server-id       = 1

# Uncomment the following if you want to log updates
#log-bin
log-bin=/db/log-bin/binary-log

# Uncomment the following if you are NOT using BDB tables
#skip-bdb
  • 今回は,このサーバIDは,デフォルトの1番を使用する.
  • my.cnfファイルで設定した,バイナリログファイルを保存するディレクトリを作成する.
[root@artemis Download]# cd /db
[root@artemis db]# ls -la
total 20560
drwxr-xr-x    7 mysql    mysql        4096 Mar 13 19:42 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:03 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:42 STOREDB
-rw-rw----    1 mysql    root          995 Mar  5 20:03 artemis.err
-rw-rw----    1 mysql    mysql           5 Mar  5 20:03 artemis.pid
drwx------    2 mysql    mysql        4096 Mar 12 15:58 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 20:59 STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar  8 04:39 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar  8 04:39 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Feb 13 13:03 ib_logfile1
drwx--x--x    2 mysql    mysql        4096 Mar  3 20:45 mysql
drwxr-xr-x    2 mysql    mysql        4096 Feb 13 13:03 test
-rw-rw----    1 mysql    root         1834 Feb 27 11:24 uranos2.err
[root@artemis db]# mkdir log-bin
[root@artemis db]# chown -R mysql:mysql log-bin
[root@artemis db]#
  • MySQLサーバを再起動する.
[root@artemis db]# mysqladmin -uroot -p shutdown
Enter password:■■■■■ 
[root@artemis db]# mysqld_safe &
[1] 12218
[root@artemis db]#
  • mysqlモニターで接続し,マスタサーバのステータスを確認する.
[root@artemis shinnai]# mysql -uroot -p
Enter password: ■■■■■
Welcome to the MySQL monitor.  Commands end with ; or ¥g.
Your MySQL connection id is 9883 to server version: 4.1.18-standard-log

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> show master status
    -> ;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| binary-log.000001 |   240287 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql>  
  • ログファイル名などが記載されていることがわかる.
  • 実際のログファイルが作成されていることを確認する.
[root@artemis db]# ls -la log-bin
total 16
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 20:10 .
drwxr-xr-x    8 mysql    mysql        4096 Mar 13 20:10 ..
-rw-rw----    1 mysql    mysql          79 Mar 13 20:10 binary-log.000001
-rw-rw----    1 mysql    mysql          30 Mar 13 20:10 binary-log.index
[root@artemis db]# cat log-bin/binary-log.index 
/db/log-bin/binary-log.000001
[root@artemis db]# 
  • 更新ログファイルが作成されている.

3.マスタサーバのデータのアーカイブを作成してスレーブサーバに転送する

  • マスタとスレーブの動機の方法はいくつかあるらしいが,今回はマスタサーバのデータベースのファイルバックアップを元に,スレーブサーバの復元を行う方式を採用する.
  • マスタサーバのデータベースファイルを確認する.
[root@artemis root]# cd /db
[root@artemis db]# ls -la
total 20580
drwxr-xr-x    8 mysql    mysql        4096 Mar 13 22:35 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:03 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:42 STOREDB
-rw-rw----    1 mysql    root         2464 Mar 13 20:10 artemis.err
-rw-rw----    1 mysql    mysql           6 Mar 13 20:10 artemis.pid
-rw-rw----    1 mysql    mysql           4 Mar 13 22:35 artemis-relay-bin.000001
-rw-rw----    1 mysql    mysql          27 Mar 13 22:35 artemis-relay-bin.index
drwx------    2 mysql    mysql        4096 Mar 12 15:58 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 20:59 STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar 13 20:10 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar 13 20:10 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Feb 13 13:03 ib_logfile1
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 20:10 log-bin
-rw-rw----    1 mysql    mysql          28 Mar 13 22:35 master.info
drwx--x--x    2 mysql    mysql        4096 Mar  3 20:45 mysql
-rw-rw----    1 mysql    mysql          32 Mar 13 22:35 relay-log.info
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 21:12 test
-rw-rw----    1 mysql    root         1834 Feb 27 11:24 uranos2.err
[root@artemis db]#  
  • このデータのアーカイブを作成する.
[root@artemis db]# tar cfz /tmp/master.tar.gz *
[root@artemis db]#
  • 作成されたアーカイブファイルを確認する.
[root@artemis db]# cd /tmp
[root@artemis tmp]# ls -la master.tar.gz 
-rw-r--r--    1 root     root       236530 Mar 15 12:15 master.tar.gz
[root@artemis tmp]# 
  • スレーブサーバに転送する.
[root@artemis tmp]# sftp shinnai@uranos3
Connecting to uranos3...
The authenticity of host 'uranos3 (192.168.0.1)' can't be established.
RSA key fingerprint is ss:cc:dd:ee:ff:cc:b4:cb:00:58:00:a9:ff:58:ff:bb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'uranos3' (RSA) to the list of known hosts.
shinnai@uranos3's password: ■■■■■
sftp> put master.tar.gz 
master.tar.gz                              100%  230KB   2.1MB/s   00:00    
sftp>  
  • スレーブサーバに接続し,MySQLが稼働しているか確認する.
[root@uranos3 root]# ps -ef | grep mysqld
root     23743     1  0 Mar13 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql    23767 23743  0 Mar13 ?        00:00:00 /usr/sbin/mysqld --basedir=/ -
-datadir=/db --user=mysql --pid-file=/db/uranos3.pid --skip-locking --port=330
6 --socket=/var/lib/mysql/mysql.sock
root      3699  3625  0 12:22 pts/2    00:00:00 grep mysqld
  • 起動しており,データベースディレクトリが,/dbだとわかる.
  • MySQLサーバをシャットダウンする.
[root@uranos3 root]# mysqladmin -uroot -p shutdown
Enter password: ■■■■■■■■■■
[root@uranos3 root]# ps -ef | grep mysqld
root      3710  3625  0 12:24 pts/2    00:00:00 grep mysqld
[root@uranos3 root]#  
  • データベースディレクトリを確認する.
[root@uranos3 root]# cd /db
[root@uranos3 db]# ls -la
total 20844
drwxr-xr-x    8 mysql    mysql        4096 Mar 15 12:24 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:25 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:43 STOREDB
drwx------    2 mysql    mysql        4096 Mar 13 21:20 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 17:50 STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar 15 12:24 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar 15 12:24 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Mar  3 16:18 ib_logfile1
drwx------    2 mysql    mysql       16384 Mar  3 21:54 lost+found
-rw-rw----    1 mysql    mysql          64 Mar 15 12:23 master.info
drwx--x--x    2 mysql    mysql        4096 Mar  3 16:18 mysql
-rw-rw----    1 mysql    mysql          52 Mar 13 21:17 relay-log.info
drwxr-xr-x    2 mysql    mysql        4096 Mar  3 16:18 test
-rw-rw----    1 mysql    mysql       18167 Mar 15 12:24 uranos3.err
-rw-rw----    1 mysql    mysql        8247 Mar 13 21:13 uranos3-relay-bin.000002
-rw-rw----    1 mysql    mysql      235714 Mar 15 12:23 uranos3-relay-bin.000003
-rw-rw----    1 mysql    mysql          54 Mar 13 21:17 uranos3-relay-bin.index
[root@uranos3 db]# 
  • 現在のデータベースファイルを,別のディレクトリに退避する.
    • ほとんどの場合,後でこれらのファイルは必要ない.
[root@uranos3 db]# mkdir /tmp/db_back
[root@uranos3 db]# mv * /tmp/db_back/.
[root@uranos3 db]# ls -la
total 8
drwxr-xr-x    2 mysql    mysql        4096 Mar 15 12:27 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:25 ..
[root@uranos3 db]#  
  • ファイルが無くなったことが確認できた.
  • 転送してきたアーカイブファイルを展開し,中身を確認する.
[root@uranos3 db]# tar xfz /home/shinnai/master.tar.gz 
[root@uranos3 db]# ls -la
total 20580
drwxr-xr-x    8 mysql    mysql        4096 Mar 15 12:27 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:25 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:42 STOREDB
-rw-rw----    1 mysql    root         2464 Mar 13 20:10 artemis.err
-rw-rw----    1 mysql    mysql           6 Mar 13 20:10 artemis.pid
-rw-rw----    1 mysql    mysql           4 Mar 13 22:35 artemis-relay-bin.000001
-rw-rw----    1 mysql    mysql          27 Mar 13 22:35 artemis-relay-bin.index
drwx------    2 mysql    mysql        4096 Mar 12 15:58 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 20:59 STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar 13 20:10 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar 13 20:10 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Feb 13 13:03 ib_logfile1
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 20:10 log-bin
-rw-rw----    1 mysql    mysql          28 Mar 13 22:35 master.info
drwx--x--x    2 mysql    mysql        4096 Mar  3 20:45 mysql
-rw-rw----    1 mysql    mysql          32 Mar 13 22:35 relay-log.info
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 21:12 test
-rw-rw----    1 mysql    root         1834 Feb 27 11:24 uranos2.err
[root@uranos3 db]#  
  • これで終了.

4.スレーブサーバの設定と起動

  • スレーブサーバ側でも/etc/my.cnfファイルを編集する.
変更前
#skip-networking
server-id       = 1

# Uncomment the following if you want to log updates
#log-bin
変更後
#skip-networking
#server-id      = 1
server-id       = 2
master-host=artemis
master-user=repl
master-password=reppass
master-port=3306

# Uncomment the following if you want to log updates
#log-bin
  • マスタサーバとスレーブサーバは接続できる必要がある.
  • よって,スレーブサーバ上でMysqlモニタを使用して接続してみる.,
[root@uranos3 db]# mysql -urepl -p -h artemis
Enter password: ■■■■■ 

Welcome to the MySQL monitor.  Commands end with ; or ¥g.
Your MySQL connection id is 11380 to server version: 4.1.18-standard-log

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> Bye
[root@uranos3 db]#  
  • 接続できたので,通信に問題はない.
    • 通信できない場合,Firewallの設定や,マスタサーバでユーザを作成する際に許可したホスト名等を確認する.
  • スレーブサーバのmysqlサーバを起動させる.
[root@uranos3 db]# mysqld_safe &
[1] 3799
[root@uranos3 db]# Starting mysqld daemon with databases from /db

[root@uranos3 db]# ls -la
total 20596
drwxr-xr-x    8 mysql    mysql        4096 Mar 15 12:37 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:25 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:42 STOREDB
-rw-rw----    1 mysql    root         2464 Mar 13 20:10 artemis.err
-rw-rw----    1 mysql    mysql           6 Mar 13 20:10 artemis.pid
-rw-rw----    1 mysql    mysql           4 Mar 13 22:35 artemis-relay-bin.000001
-rw-rw----    1 mysql    mysql          27 Mar 13 22:35 artemis-relay-bin.index
drwx------    2 mysql    mysql        4096 Mar 12 15:58 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 20:59 STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar 13 20:10 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar 15 12:37 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Feb 13 13:03 ib_logfile1
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 20:10 log-bin
-rw-rw----    1 mysql    mysql          28 Mar 13 22:35 master.info
drwx--x--x    2 mysql    mysql        4096 Mar  3 20:45 mysql
-rw-rw----    1 mysql    mysql          32 Mar 13 22:35 relay-log.info
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 21:12 test
-rw-rw----    1 mysql    root         1834 Feb 27 11:24 uranos2.err
-rw-rw----    1 mysql    root         1081 Mar 15 12:37 uranos3.err
-rw-rw----    1 mysql    mysql           5 Mar 15 12:37 uranos3.pid
-rw-rw----    1 mysql    mysql           4 Mar 15 12:37 uranos3-relay-bin.000001
-rw-rw----    1 mysql    mysql          27 Mar 15 12:37 uranos3-relay-bin.index
[root@uranos3 db]#  
  • 何も問題なければ,ここまでで稼働している.

5.障害を修復

  • 問題なく稼働しているか,エラーファイルを確認する.
[root@uranos3 db]# cat uranos3.err
060315 12:37:49  mysqld started
060315 12:37:49  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
060315 12:37:49  InnoDB: Starting log scan based on checkpoint at
InnoDB: log sequence number 0 43708.
InnoDB: Doing recovery: scanned up to log sequence number 0 43708
InnoDB: Last MySQL binlog file position 0 79, file name /db/log-bin/binary-log.
000001
060315 12:37:49  InnoDB: Flushing modified pages from the buffer pool...
060315 12:37:49  InnoDB: Started; log sequence number 0 43708
060315 12:37:49 [ERROR] Failed to open the relay log './artemis-relay-bin.0000
01' (relay_log_pos 4)
060315 12:37:49 [ERROR] Could not find target log during relay log initializat
ion
060315 12:37:49 [ERROR] Failed to initialize the master info structure
/usr/sbin/mysqld: ready for connections.
Version: '4.1.18-standard'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  M
ySQL Community Edition - Standard (GPL)
[root@uranos3 db]#  
  • エラーが発生し,何かしら問題が発生していることがわかる.
  • MySQLモニタでスレーブサーバに接続し,スレーブプロセスを起動させる.
[root@uranos3 db]# mysql -uroot -p 
Enter password: ■■■■■■■
Welcome to the MySQL monitor.  Commands end with ; or ¥g.
Your MySQL connection id is 1 to server version: 4.1.18-standard

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> start slave;
ERROR 1201 (HY000): Could not initialize master info structure; more error messages
 can be found in the MySQL error log
mysql> show slave status¥G
Empty set (0.00 sec)

mysql> quit
Bye
[root@uranos3 db]
  • マスタサーバとの構造にエラーが出ている模様.
  • とりあえず,バイナリログファイル等の,レプリケーションに関係ありそうなファイルをリネームしてリセットを試みる.
[root@uranos3 db]# ls -lal
total 20600
drwxr-xr-x    8 mysql    mysql        4096 Mar 15 15:48 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:25 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:42 STOREDB
-rw-rw----    1 mysql    root         2464 Mar 13 20:10 artemis.err
-rw-rw----    1 mysql    mysql           6 Mar 13 20:10 artemis.pid
-rw-rw----    1 mysql    mysql           4 Mar 13 22:35 artemis-relay-bin.000001
-rw-rw----    1 mysql    mysql          27 Mar 13 22:35 artemis-relay-bin.index
drwx------    2 mysql    mysql        4096 Mar 12 15:58 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 20:59 STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar 15 15:48 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar 15 15:48 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Feb 13 13:03 ib_logfile1
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 20:10 log-bin
-rw-rw----    1 mysql    mysql          28 Mar 13 22:35 master.info
drwx--x--x    2 mysql    mysql        4096 Mar  3 20:45 mysql
-rw-rw----    1 mysql    mysql          32 Mar 13 22:35 relay-log.info
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 21:12 test
-rw-rw----    1 mysql    root         1834 Feb 27 11:24 uranos2.err
-rw-rw----    1 mysql    root         2305 Mar 15 15:48 uranos3.err
-rw-rw----    1 mysql    mysql           4 Mar 15 12:37 uranos3-relay-bin.000001
-rw-rw----    1 mysql    mysql           4 Mar 15 12:56 uranos3-relay-bin.000002
-rw-rw----    1 mysql    mysql           4 Mar 15 12:58 uranos3-relay-bin.000003
-rw-rw----    1 mysql    mysql          81 Mar 15 12:58 uranos3-relay-bin.index
[root@uranos3 db]# mv uranos3.err uranos3.err.
[root@uranos3 db]# mv master.info master.info.old
[root@uranos3 db]# mv relay-log.info relay-log.info.old
[root@uranos3 db]# mv uranos3-relay-bin.000001 uranos3-relay-bin.000001.old
[root@uranos3 db]# mv uranos3-relay-bin.000002 uranos3-relay-bin.000002.old
[root@uranos3 db]# mv uranos3-relay-bin.000003 uranos3-relay-bin.000003.old
[root@uranos3 db]# mv uranos3-relay-bin.index uranos3-relay-bin.index.old
[root@uranos3 db]# ls -la
total 20600
drwxr-xr-x    8 mysql    mysql        4096 Mar 15 15:49 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:25 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:42 STOREDB
-rw-rw----    1 mysql    root         2464 Mar 13 20:10 artemis.err
-rw-rw----    1 mysql    mysql           6 Mar 13 20:10 artemis.pid
-rw-rw----    1 mysql    mysql           4 Mar 13 22:35 artemis-relay-bin.000001
-rw-rw----    1 mysql    mysql          27 Mar 13 22:35 artemis-relay-bin.index
drwx------    2 mysql    mysql        4096 Mar 12 15:58 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 20:59STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar 15 15:48 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar 15 15:48 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Feb 13 13:03 ib_logfile1
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 20:10 log-bin
-rw-rw----    1 mysql    mysql          28 Mar 13 22:35 master.info.old
drwx--x--x    2 mysql    mysql        4096 Mar  3 20:45 mysql
-rw-rw----    1 mysql    mysql          32 Mar 13 22:35 relay-log.info.old
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 21:12 test
-rw-rw----    1 mysql    root         1834 Feb 27 11:24 uranos2.err
-rw-rw----    1 mysql    root         2305 Mar 15 15:48 uranos3.err
-rw-rw----    1 mysql    mysql           4 Mar 15 12:37 uranos3-relay-bin.000001.old
-rw-rw----    1 mysql    mysql           4 Mar 15 12:56 uranos3-relay-bin.000002.old
-rw-rw----    1 mysql    mysql           4 Mar 15 12:58 uranos3-relay-bin.000003.old
-rw-rw----    1 mysql    mysql          81 Mar 15 12:58 uranos3-relay-bin.index.old
[root@uranos3 db]#
  • MySQLサーバを起動して,ファイルを確認する.,
[root@uranos3 db]# mysqld_safe &
[1] 4993
[root@uranos3 db]# Starting mysqld daemon with databases from /db

[root@uranos3 db]# ls -la
total 20880
drwxr-xr-x    8 mysql    mysql        4096 Mar 15 15:49 .
drwxr-xr-x   23 root     root         4096 Mar  5 20:25 ..
drwx------    2 mysql    mysql        4096 Mar 13 19:42 STOREDB
-rw-rw----    1 mysql    root         2464 Mar 13 20:10 artemis.err
-rw-rw----    1 mysql    mysql           6 Mar 13 20:10 artemis.pid
-rw-rw----    1 mysql    mysql           4 Mar 13 22:35 artemis-relay-bin.000001
-rw-rw----    1 mysql    mysql          27 Mar 13 22:35 artemis-relay-bin.index
drwx------    2 mysql    mysql        4096 Mar 12 15:58 STORE_UJPDB_t
drwx------    2 mysql    mysql        4096 Mar  3 20:59STORE_UJPDB_T
-rw-rw----    1 mysql    mysql    10485760 Mar 15 15:48 ibdata1
-rw-rw----    1 mysql    mysql     5242880 Mar 15 15:49 ib_logfile0
-rw-rw----    1 mysql    mysql     5242880 Feb 13 13:03 ib_logfile1
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 20:10 log-bin
-rw-rw----    1 mysql    mysql          64 Mar 15 15:49 master.info
-rw-rw----    1 mysql    mysql          28 Mar 13 22:35 master.info.old
drwx--x--x    2 mysql    mysql        4096 Mar  3 20:45 mysql
-rw-rw----    1 mysql    mysql          55 Mar 15 15:49 relay-log.info
-rw-rw----    1 mysql    mysql          32 Mar 13 22:35 relay-log.info.old
drwxr-xr-x    2 mysql    mysql        4096 Mar 13 21:12 test
-rw-rw----    1 mysql    root         1834 Feb 27 11:24 uranos2.err
-rw-rw----    1 mysql    root         3201 Mar 15 15:49 uranos3.err
-rw-rw----    1 mysql    mysql           5 Mar 15 15:49 uranos3.pid
-rw-rw----    1 mysql    mysql      263676 Mar 15 15:49 uranos3-relay-bin.000001
-rw-rw----    1 mysql    mysql           4 Mar 15 12:37 uranos3-relay-bin.000001.old
-rw-rw----    1 mysql    mysql           4 Mar 15 12:56 uranos3-relay-bin.000002.old
-rw-rw----    1 mysql    mysql           4 Mar 15 12:58 uranos3-relay-bin.000003.old
-rw-rw----    1 mysql    mysql          27 Mar 15 15:49 uranos3-relay-bin.index
-rw-rw----    1 mysql    mysql          81 Mar 15 12:58 uranos3-relay-bin.index.old
[root@uranos3 db]#
  • リネームしたファイルのいくつかで,新しいファイルが作成さえていることが確認できる.
[root@uranos3 db]# cat uranos3.err
060315 15:49:36  mysqld started
060315 15:49:36  InnoDB: Started; log sequence number 0 43708
/usr/sbin/mysqld: ready for connections.
Version: '4.1.18-standard'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL
 Community Edition - Standard (GPL)
060315 15:49:36 [Note] Slave SQL thread initialized, starting replication in log 'FIRS
T' at position 0, relay log './uranos3-relay-bin.000001' position: 4
060315 15:49:36 [Note] Slave I/O thread: connected to master 'repl@artemis:3306',  
replication started in log 'FIRST' at position 4
060315 15:49:36 [ERROR] Slave: Error 'Table 'rep_test' already exists' on query. Default 
database: 'test'. Query: 'create table rep_test(a int)', Error_code: 1050
060315 15:49:36 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, 
and restart the slave SQL thread with "SLAVE START". We stopped at log 'binary-log.000001' position 7837
[root@uranos3 db]#
  • Slave I/Oスレッドによって,マスタサーバと通信が行われている事まで確認できているが,rep_testテーブルが重複しているというエラーが出て停止している.
[root@uranos3 db]# mysql -uroot -p
Enter password: ■■■■■■■■■■
Welcome to the MySQL monitor.  Commands end with ; or ¥g.
Your MySQL connection id is 3 to server version: 4.1.18-standard

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql>
  • スレーブのステータスを確認する.
mysql> show slave status¥G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: artemis
                Master_User: repl
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: binary-log.000001
        Read_Master_Log_Pos: 268774
             Relay_Log_File: uranos3-relay-bin.000001
              Relay_Log_Pos: 7881
      Relay_Master_Log_File: binary-log.000001
           Slave_IO_Running: Yes
          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: 1050
                 Last_Error: Error 'Table 'rep_test' already exists' on query. 
Default database: 'test'. Query: 'create table rep_test(a int)'
               Skip_Counter: 0
        Exec_Master_Log_Pos: 7837
            Relay_Log_Space: 268866
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: NULL
1 row in set (0.00 sec)

mysql>
  • やはりrep_testテーブルで不都合が生じているようである.
  • 不要なテーブルなので,dropしてみる.
mysql> drop table test.rep_test;
Query OK, 0 rows affected (0.00 sec)

mysql> drop table test.rep_test1;
Query OK, 0 rows affected (0.00 sec)

mysql> 
  • 再度ステータスを確認してみる.
mysql> show slave status¥G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: artemis
                Master_User: repl
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: binary-log.000001
        Read_Master_Log_Pos: 271504
             Relay_Log_File: uranos3-relay-bin.000001
              Relay_Log_Pos: 7881
      Relay_Master_Log_File: binary-log.000001
           Slave_IO_Running: Yes
          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: 1050
                 Last_Error: Error 'Table 'rep_test' already exists' on query.
 Default database: 'test'. Query: 'create table rep_test(a int)'
               Skip_Counter: 0
        Exec_Master_Log_Pos: 7837
            Relay_Log_Space: 271596
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: NULL
1 row in set (0.00 sec)

mysql>
  • 変化はないようである.
  • 一度MySQLを再起動する.
mysql> quit
Bye
[root@uranos3 db]# mysqladmin -uroot -p shutdown
Enter password: 
STOPPING server from pid file /db/uranos3.pid
060315 16:10:06  mysqld ended

[1]+  Done                    mysqld_safe
[root@uranos3 db]# mysqld_safe &
[1] 5229
[root@uranos3 db]# Starting mysqld daemon with databases from /db

[root@uranos3 db]#
  • 再度ログを確認する.
[root@uranos3 db]# cat uranos3.err
〜略〜


060315 16:10:11  mysqld started
060315 16:10:12  InnoDB: Started; log sequence number 0 43708
/usr/sbin/mysqld: ready for connections.
Version: '4.1.18-standard'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  
MySQL Community Edition - Standard (GPL)
060315 16:10:12 [Note] Slave SQL thread initialized, starting replication in
 log 'binary-log.000001' at position 7837, relay log './uranos3-relay-bin.000001'
 position: 7881
060315 16:10:12 [Note] Slave I/O thread: connected to master 'repl@artemis:3306',
  replication started in log 'binary-log.000001' at position 274218
060315 16:10:12 [ERROR] Slave: Error 'Duplicate entry '107-48' for key 1' on
 query. Default database: ''. Query: 'INSERT INTO STORE_UJPDB_t.bbs_comment_t
 (publication, censor_flg, title, maintext, thread_id, admin_register_datetime )
 VALUES('1', '1', '', '', 48, '20060313222755' )', Error_code: 1062
060315 16:10:12 [ERROR] Error running query, slave SQL thread aborted. Fix the 
problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 
'binary-log.000001' position 17859
[root@uranos3 db]#
  • テーブルを消したことが効果があったようで,レプリケーションがスタートをしたことが確認できる.これでError_code 1050は解消できた模様.
  • ただ,別のエラー 1062が発生してレプリカが停止(Aborted)している.
  • 先ほどのdrop削除したテーブルを確認してみる.
[root@uranos3 db]# mysql -uroot -p
Enter password: ■■■■■
Welcome to the MySQL monitor.  Commands end with ; or ¥g.
Your MySQL connection id is 3 to server version: 4.1.18-standard

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> use test;
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| rep_test       |
| rep_test1      |
+----------------+
2 rows in set (0.00 sec)

mysql>
  • 消したテーブルが存在している.
  • このテーブルは,スレーブ上では消したが,マスタ上から新たに転送されてきた模様である.
  • 停止しているスレーブを開始してみる.
mysql> slave start
    -> ;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status¥G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: artemis
                Master_User: repl
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: binary-log.000001
        Read_Master_Log_Pos: 278200
             Relay_Log_File: uranos3-relay-bin.000001
              Relay_Log_Pos: 17903
      Relay_Master_Log_File: binary-log.000001
           Slave_IO_Running: Yes
          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: 1062
                 Last_Error: Error 'Duplicate entry '107-48' for key 1' on query. 
Default database: ''. Query: 'INSERT INTO STORE_UJPDB_t.bbs_comment_t (publication,
 censor_flg, title, maintext, thread_id, admin_register_datetime ) VALUES('1', 
'1', '', '', 48, '20060313222755' )'
               Skip_Counter: 0
        Exec_Master_Log_Pos: 17859
            Relay_Log_Space: 278340
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: NULL
1 row in set (0.00 sec)

mysql>
  • やはり1062エラーがでてしまっている.
  • この1062エラーは,エラーがでても無視して次に進むことができるというオプションがある.
  • MySQLモニタを終了する.
mysql> quit
Bye
[root@uranos3 db]# vi /etc/my.cnf
  • スレーブサーバ上のmy.cnfファイルに,slave-skip-errorsを記述する.
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
#server-id      = 1
server-id       = 2
master-host=artemis
master-user=repl
master-password=reppass
master-port=3306
slave-skip-errors=1062

# Uncomment the following if you want to log updates
#log-bin
  • MySQLサーバを再起動する.
[root@uranos3 db]# mysqladmin -uroot -p shutdown
Enter password: ■■■■■ 
STOPPING server from pid file /db/uranos3.pid
060315 16:14:40  mysqld ended

[1]+  Done                    mysqld_safe
[root@uranos3 db]# mysqld_safe &
[1] 5278
[root@uranos3 db]# Starting mysqld daemon with databases from /db

[root@uranos3 db]#
  • ログファイルを確認する.
[root@uranos3 db]# cat uranos3.err
060315 15:50:54  mysqld started
060315 15:50:54  InnoDB: Started; log sequence number 0 43708
〜略〜

						
060315 16:14:40 [Note] /usr/sbin/mysqld: Shutdown complete

060315 16:14:40  mysqld ended

060315 16:14:45  mysqld started
060315 16:14:45  InnoDB: Started; log sequence number 0 43708
/usr/sbin/mysqld: ready for connections.
Version: '4.1.18-standard'  socket: '/var/lib/mysql/mysql.sock'  port: 3306
  MySQL Community Edition - Standard (GPL)
060315 16:14:45 [Note] Slave SQL thread initialized, starting replication in
 log 'binary-log.000001' at position 17859, relay log './uranos3-relay-bin.000001'
 position: 17903
060315 16:14:45 [Note] Slave I/O thread: connected to master 'repl@artemis:3306',
  replication started in log 'binary-log.000001' at position 278200
[root@uranos3 db]# 
  • エラーがでていない.
[root@uranos3 db]# mysql -uroot -p
Enter password: ■■■■■ 
Welcome to the MySQL monitor.  Commands end with ; or ¥g.
Your MySQL connection id is 4 to server version: 4.1.18-standard

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> show slave status¥G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: artemis
                Master_User: repl
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: binary-log.000001
        Read_Master_Log_Pos: 307261
             Relay_Log_File: uranos3-relay-bin.000004
              Relay_Log_Pos: 29109
      Relay_Master_Log_File: binary-log.000001
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            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: 307261
            Relay_Log_Space: 29109
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)

mysql>  
  • エラーが無くなったようである.
  • 1062エラーを無視しているだけなのか,確認するために先ほど設定したオプションを解除してみる.
  • MySQLサーバをシャットダウンする.
[root@uranos3 db]# mysqladmin -uroot -p shutdown
Enter password:■■■■■  
STOPPING server from pid file /db/uranos3.pid
060315 20:52:09  mysqld ended

[1]+  Done                    mysqld_safe
[root@uranos3 db]#
  • 次のようにスレーブサーバの/etc/my.cnfを修正する.,
#
#skip-networking
#server-id      = 1
server-id       = 2
master-host=artemis
master-user=repl
master-password=reppass
master-port=3306
#slave-skip-errors=1062

# Uncomment the following if you want to log updates
#log-bin
  • コメントアウトを行う.
  • MySQLサーバを起動する.
[root@uranos3 db]# mysqld_safe &
[1] 6878
[root@uranos3 db]# Starting mysqld daemon with databases from /db

[root@uranos3 db]#
  • エラーログを確認する.
[root@uranos3 db]# !cat
cat uranos3.err

060315 20:52:09  mysqld ended

060315 20:52:20  mysqld started
060315 20:52:20  InnoDB: Started; log sequence number 0 43708
/usr/sbin/mysqld: ready for connections.
Version: '4.1.18-standard'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL
 Community Edition - Standard (GPL)
060315 20:52:20 [Note] Slave SQL thread initialized, starting replication in log 
'binary-log.000001' at position 307620, relay log './uranos3-relay-bin.000004' 
position: 29468
060315 20:52:20 [Note] Slave I/O thread: connected to master 'repl@artemis:3306',
  replication started in log 'binary-log.000001' at position 307620
[root@uranos3 db]# 
  • エラーが出ていない.
  • これで問題が無くなったことが確認できた,.


広告スペース
Google