|
MySQLでレプリケーションを設定する
MySQLでレプリケーションを設定する
0.改訂履歴
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]#
|
[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
|
[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]#
|
- エラーが出ていない.
- これで問題が無くなったことが確認できた,.
|
|