MySQLBackUp

更新日2009-07-29 (水) 12:47:25

レプリケーションを利用したバックアップ

マスターでの更新情報をバイナリログとしてスレーブに転送、これをSQLに変換しスレーブで実行しデータ同期を行うようだ。バイナリログは逐次スレーブ側に転送される?

BackUpをとるには同じDBを作製しておく必要がある。

マスター

/etc/my.cnf

[mysqld]

## REPLICATION MASTER SETTING

## user = mysql
server-id = 1
log-bin
character-set-server = utf8

設定内容
SLAVE IP :10.1.4.142~ User :repl

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@10.1.4.142 IDENTIFIED BY '*****';

現在のバイナリログの状態を確認

マスタのバイナリログのどの時点からレプリケートを開始すればよいかスレーブにはわからないからないので、場所を決定するに必要となる。この場所がFileとPosition。

(Master側でDBをLock) <=変更が多くないときは不要かもでも安全のため

mysql> FLUSH TABLES WITH READ LOCK;

logファイルと、logポジションを表示

 mysql> SHOW MASTER STATUS;   <=(1)
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000024 |       98 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

DBをBackUpしてスレーブ側にコピーしてからUnLock

mysql> UNLOCK TABLES;

スレーブ

/etc/my.cnf

[mysqld]

## REPLICATION SLAVE SETTING

server-id = 2
character-set-server = utf8
read-only   <=アプリケーションからの変更禁止

以下のCHANGE MASTER TO と STOP/START SLAVE;はDBを追加するごとに必要

一度CHANGE MASTER TO は実行すればOK

mysql> CHANGE MASTER TO 
    -> MASTER_HOST='10.99.99.202', 
    -> MASTER_PORT=3306, 
    -> MASTER_USER='repl', 
    -> MASTER_PASSWORD='*******', 
    -> MASTER_LOG_FILE='mysql-bin.000024', <=MASTER側で表示したSTATUSの結果を記入
    -> MASTER_LOG_POS=98;  <=MASTER側で表示したSTATUSの結果を記入

Query OK, 0 rows affected (0.04 sec)

スレーブの起動

mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)

スレーブの状態の表示

mysql> show slave status\G;

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.99.99.202
                Master_User: repl
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000024
        Read_Master_Log_Pos: 98
              Relay_Log_File: localhost-relay-bin.000002
              Relay_Log_Pos: 235
      Relay_Master_Log_File: mysql-bin.000024
           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: 98
            Relay_Log_Space: 235
            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)

ERROR:
No query specified

スレーブの停止

mysql> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

CHANGE MASTER TO を実行すると以下のファイルができるので、その情報でその後再起動は問題なく動作する。

# less /var/lib/mysql/master.info
14
mysql-bin.000024
98
10.99.99.202
repl
******
3306
60
0
# less /var/lib/mysql/relay-log.info
./localhost-relay-bin.000002
235
mysql-bin.000024
98

その他の指定

レプリケーションを作製するDBやテーブルの指定
Slaveのmy.cnfに指定

[mysqld]

replicate-do-db対象となるデータベース名
replicate-ignore-db対象外となるデータベース名
replicate-do-table対象となるテーブル名指定方法:データベース名.テーブル名
replicate-ignore-table対象外となるテーブル名指定方法:データベース名.テーブル名

複数あるときは
replicate-do-db = db1
replicate-do-db = db2

のように併記する。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS