レプリケーションã®å•題ã§ã‚ˆãã‚ã‚‹10パターン。
1) セッションã®ã¿ã§æœ‰åйãªãƒã‚¤ãƒŠãƒªãƒã‚°
sql_log_bin = 0
ã‚’è¨å®šã™ã‚‹ã¨ã€ãã®ã‚»ãƒƒã‚·ãƒ§ãƒ³å†…ã§ãƒã‚¤ãƒŠãƒªãƒã‚°ã‚’無効ã«ã§ãる。ã¤ã¾ã‚Šã€ãƒžã‚¹ã‚¿ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³å†…ã§å®Ÿè¡Œã—ãŸDMLã‚„DDLã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã«ã¯ãƒ¬ãƒ—リケーションã•れãªã„。
マスタã§ãƒã‚¤ãƒŠãƒªãƒã‚°ã‚’オフã«ã™ã‚‹ã€‚
mysql> set sql_log_bin = 0 ;
Query OK, 0 rows affected (0.00 sec)
reptestデータベースã«ãƒ†ãƒ¼ãƒ–ルを作æˆã—ã¦ã¿ã‚‹(マスタ上ã§å®Ÿè¡Œ)。
mysql> create table reptest(ID int) ;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables ;
+-------------------+
| Tables_in_reptest |
+-------------------+
| reptest |
+-------------------+
1 row in set (0.00 sec)
スレーブã§ç¢ºèªã—ã¦ã¿ã‚‹ã¨ã€ãƒ†ãƒ¼ãƒ–ルã¯ä½œæˆã•れã¦ã„ãªã„。
mysql> use reptest ;
Database changed
mysql> show tables ;
Empty set (0.00 sec)
2) スレーブã®ç›´æŽ¥æ›´æ–°
アプリケーションã‹ã‚‰ã‚¹ãƒ¬ãƒ¼ãƒ–を直接更新ã—ã¦ã—ã¾ã†ã¨ã€ãƒžã‚¹ã‚¿ã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã¯åŒæœŸã—ãªããªã£ã¦ã—ã¾ã†ã€‚スレーブをread_only
ã«è¨å®šã—ã¦ãŠãã®ã¯è‰¯ã„ç¿’æ…£ã¨è¨€ãˆã‚‹ãŒã€DBAãŒç›´æŽ¥ã‚¹ãƒ¬ãƒ¼ãƒ–ã‚’æ›´æ–°ã—ã¦ã—ã¾ã†ã®ã¯é˜²ã’ãªã„ã‹ã‚‚ã—れãªã„。
3) ãƒã‚¤ãƒŠãƒªãƒã‚°ã®ç ´æ
以下ã¯ã€å£Šã‚ŒãŸãƒã‚¤ãƒŠãƒªãƒã‚°ã®ä¾‹ã€‚
# Position Timestamp Type Master ID Size Master Pos Flags
# 4 51 2e 30 4d 0f 01 00 00 00 66 00 00 00 6a 00 00 00 00 00
# 17 04 00 35 2e 32 2e 34 2d 4d 61 72 69 61 44 42 2d |..5.2.4.MariaDB.|
# 27 6d 61 72 69 61 64 62 39 34 2d 6c 6f 67 00 00 00 |mariadb94.log...|
# 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# 47 00 00 00 00 00 00 00 00 13 38 0d 00 08 00 12 00 |.........8......|
# 57 04 04 04 04 12 00 00 53 00 04 1a 08 00 00 00 08 |.......S........|
# 67 08 08 02 |...|
# Start: binlog v 4, server v 5.2.4-MariaDB-mariadb94-log created 110114 6:06:57
BINLOG '
US4wTQ8BAAAAZgAAAGoAAAAAAAQANS4yLjQtTWFyaWFEQi1tYXJpYWRiOTQtbG9nAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 48954702
ã“ã®ã‚ˆã†ãªå ´åˆã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã§ä¿®æ£ãŒã§ãã‚‹ã ã‚ã†ã€‚
é©åˆ‡ãª(通常ã¯å£Šã‚ŒãŸãƒã‚¤ãƒŠãƒªãƒã‚°ã®æ¬¡)ãƒã‚¸ã‚·ãƒ§ãƒ³ã‚’指定ã—ã¦
change master
コマンドを実行ã—ã¦ã€ãƒ¬ãƒ—リケーションをå†é–‹ã™ã‚‹ã€‚change master to master_log_position = next_pos; start slave;
å ´åˆã«ã‚ˆã£ã¦ã¯ã€
pt-table-checksum
ã‚„pt-table-sync
ãªã©ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã‚’åŒæœŸã™ã‚‹ã€‚上ã®2ã¤ã¨ã‚‚失敗ã—ãŸå ´åˆã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’リストアã™ã‚‹ã€‚
4) リレーãƒã‚°ã®ç ´æ
ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚„データã®é€ä¿¡æ™‚ã®å•題ã§ã€ãƒªãƒ¬ãƒ¼ãƒã‚°ã®ç ´æãŒèµ·ãã‚‹å ´åˆãŒã‚る。mysqlbinlog
コマンドを使ã£ã¦ã€ç ´æã®ç›´å‰ã®ãƒ¬ãƒ—リケーション状態を特定ã—ã€change master
コマンドã§é©åˆ‡ãªãƒã‚¸ã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ¬ãƒ—リケーションをå†é–‹ã•ã›ã‚‹ã€‚
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='< master-host ip or DNS >',
MASTER_PORT=3306,
MASTER_USER='< usernmae >',
MASTER_PASSWORD='< password >',
MASTER_LOG_FILE='< MMMM >',
MASTER_LOG_POS=< PPPP >;START SLAVE;
5) ãƒã‚¤ãƒŠãƒªãƒã‚°ã®å‰Šé™¤ã‚„パージ
マスタã®ãƒã‚¤ãƒŠãƒªãƒã‚°ã‚’パージã—ã¦ã—ã¾ã†å‰ã«ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ãã®ãƒã‚°ãŒé©ç”¨æ¸ˆã¿ã‹ã‚’確èªã—よã†ã€‚purge binary logs
コマンドをマスタã§å®Ÿè¡Œã™ã‚‹æ™‚ã«ã¯ã€ç‰¹ã«æ³¨æ„ã—ãªã‘れã°ãªã‚‰ãªã„。
6) 安全ã§ãªã„レプリケーション(確定的ã§ãªã„関数ã®ä½¿ç”¨)
以下ãŒã€ç¢ºå®šçš„ã§ãªã„関数ã®ä¾‹ã 。ã“れらã®é–¢æ•°ã¯ã€ãƒžã‚¹ã‚¿ã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã§é•ã†çµæžœã‚’è¿”ã™å¯èƒ½æ€§ãŒã‚る。
FOUND_ROWS(), GET_LOCK(), IS_FREE_LOCK(), IS_USED_LOCK(), LOAD_FILE(), MASTER_POS_WAIT(), PASSWORD(), RAND(), RELEASE_LOCK(), ROW_COUNT(), SESSION_USER(), SLEEP(), SYSDATE(), SYSTEM_USER(), USER(), UUID(), UUID_SHORT()
例を見ã¦ã¿ã‚ˆã†ã€‚マスタã§ä»¥ä¸‹ã®ã‚ˆã†ã«å®Ÿè¡Œã™ã‚‹ã€‚
mysql> insert into timetable values(sysdate()) ;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from timetable ;
+---------------------+
| tvalue |
+---------------------+
| 2014-09-21 14:56:05 |
+---------------------+
1 row in set (0.00 sec)
スレーブã§ã¯ã€é•ã†å€¤ã«ãªã‚Šå¾—る。
mysql> select * from timetable ;
+---------------------+
| tvalue |
+---------------------+
| 2014-09-21 14:56:02 |
+---------------------+
1 row in set (0.00 sec)
7) change masteræ–‡ã®é–“é•ã„
change master
ã®å®Ÿè¡Œã¯æ³¨æ„ãŒå¿…è¦ã 。間é•ã£ãŸãƒã‚¤ãƒŠãƒªãƒã‚°ã®ãƒã‚¸ã‚·ãƒ§ãƒ³ã‚’指定ã—ã¦ã—ã¾ã†ã¨ã€å®Ÿè¡Œã•れるã¹ãæ–‡ãŒæŠœã‘ã¦ã—ã¾ã†å¯èƒ½æ€§ãŒã‚る。ãれ以外ã«ã‚‚ã€skip global sql_slave_skip_counter
ã‚„reset slave
ã€reset master
ãªã©ã‚‚注æ„ã‚’è¦ã™ã‚‹æ–‡ã 。
8) binlog-do-dbã€binlog-ignore-dbã€replicate-do-dbã€replicate-ignore-dbã®å½±éŸ¿
ã“れらã®è¨å®šã‚ªãƒ—ションã¯ã€ãƒ¬ãƒ—リケーションã™ã‚‹ãƒ†ãƒ¼ãƒ–ãƒ«ã‚’é¸æŠžã™ã‚‹ã®ã«ä½¿ã†ã€‚ã—ã‹ã—ã€é–“é•ã£ã¦è¨å®šã•れã¦ã—ã¾ã†ã¨ãƒ‡ãƒ¼ã‚¿ã®ãšã‚Œã®åŽŸå› ã«ãªã‚Šå¾—る。
9) レプリケーション関連ã®ãƒã‚°
以下ã¯ã€ãƒ¬ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç ´å£Šã™ã‚‹åŽŸå› ã«ãªã‚Šå¾—ã‚‹ãƒã‚°(ç¾åœ¨ã‚‚æœ‰åŠ¹ã§æœªä¿®æ£ã®ã‚‚ã®)ã 。
- http://bugs.mysql.com/bug.php?id=72556
- http://bugs.mysql.com/bug.php?id=71859
- http://bugs.mysql.com/bug.php?id=70832
- http://bugs.mysql.com/bug.php?id=71111
10) マスタã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥
マスタサーãƒã®ã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã¯ã€ãƒ¬ãƒ—リケーションエラーを引ãèµ·ã“ã™äº‹ãŒã‚る。sync_binlog
変数ãŒå½¹ã«ç«‹ã¤ã‹ã‚‚ã—れãªã„。
(MySQLリファレンスマニュアル 17.1.3.4 Binary Log Options and Variables)
ã“ã®å¤‰æ•°ã®å€¤ãŒ0以上ã®å ´åˆã€ãƒã‚¤ãƒŠãƒªãƒã‚°ã¸ã®æ›¸ãè¾¼ã¿ã‚’sync_binlog回行ã†ã”ã¨ã«MySQLサーãƒã¯ãƒã‚¤ãƒŠãƒªãƒã‚°ã‚’ディスクã«åŒæœŸã—ã¾ã™(fdatasync()を使用)。 è‡ªå‹•ã‚³ãƒŸãƒƒãƒˆãŒæœ‰åŠ¹ãªæ™‚ã«ã¯1æ–‡ã”ã¨ã«ãƒã‚¤ãƒŠãƒªãƒã‚°ã¸ã®æ›¸ãè¾¼ã¿ãŒè¡Œã‚れã€ãã†ã§ãªã„時ã«ã¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã”ã¨ã«æ›¸ãè¾¼ã¿ãŒè¡Œã‚れã¾ã™ã€‚ sync_binlogã®ãƒ‡ãƒ•ォルト値ã¯0ã§ã€ã“ã®å ´åˆ(MySQLサーãƒã¯)ディスクã¸ã®åŒæœŸã¯è¡Œã‚ãšOSã«ä»»ã›ã‚‹ã®ã§ã€ä»–ã®ãƒ•ァイルã¨åŒã˜ã‚ˆã†ã«ãã®æ™‚ãã®æ™‚ã§ãƒã‚¤ãƒŠãƒªãƒã‚°ã®ä¸èº«ã‚‚ãƒ‡ã‚£ã‚¹ã‚¯ã«æ›¸ã出ã•れã¾ã™ã€‚ 1ã«è¨å®šã—ã¦ãŠãã¨ã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã®éš›ã«ã‚‚ãƒã‚¤ãƒŠãƒªãƒã‚°å†…ã®æœ€å¤§1ã¤ã®æ–‡ã‚ã‚‹ã„ã¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã—ã‹å¤±ã‚れãªã„ã®ã§ã€æœ€ã‚‚安全ã§ã™ã€‚ ã—ã‹ã—ã€å‹•作的ã«ã¯æœ€ã‚‚é…ããªã‚Šã¾ã™(ディスクã¸ã®åŒæœŸã‚’éžå¸¸ã«é«˜é€ŸåŒ–ã—ã¦ãれるãƒãƒƒãƒ†ãƒªä»˜ãã®ã‚ャッシュæè¼‰ã®ãƒ‡ã‚£ã‚¹ã‚¯ä»¥å¤–ã®å ´åˆ)。
PlanetMySQL Voting: Vote UP / Vote DOWN