DB

こうする

参考URL

Master/Slaveのセットアップ

my.cnf(master側)

/etc/mysql/my.cnf

[mysqld]
server-id   = 1
log-bin     = mysql-bin
log-bin-index   = mysql-bin
relay-log   = relay-bin
relay-log-index = relay-bin
log-slave-updates
log      = /var/log/mysql/mysql.log

Master/Slaveのmy.cnfを作って確認する. server-idが違えばよい

Slave用のアカウント作成、権限を与える

Masterで以下のコマンドを実行

GRANT REPLICTION SLAVE ON *.* TO username@"192.168.XXX.XXX/255.255.255.0'  IDENTIFIED BY 'password'

要注意(特定DB.特定Tableに対してのEvent特権は付与することが出来ない。*.*が大事)

データをコピー

Masterでmysqldを停止させて、

mysql> FLUSH TABLES WITH READ LOCK;

データディレクトリを丸ごとtarでコピーする

tar -cvvf /home/aya/mysql.tar /var/lib/mysql

データの場所は

aya@example:/etc/mysql$ lv my.cnf | grep datadir
datadir         = /var/lib/mysql

で見ることが出来る。tarが終わったらlockをはずす

mysql> UNLOCK TABLES;

# --excludeで不要なファイルはコピー対象外にする
現在のポジション情報をメモしておく
(mysql-bin.00002など。ポジション情報はmysql-bin.00003)

mysqldをとめれない場合は、更新系を止めてフルダンプをとり、 SHOW MASTER STATUS の結果をメモする

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000638 |      411 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

SCPでデータをSlave側に持ってくる

scp /tmp/mysql.tar hoge@hogeserver.com:/tmp

そしてhogeserverで展開

hoge@hogeserver:tar xvf /tmp/mysql.tar

元々ある/var/lib/mysqlをリネームしてバックアップを取っておく

hoge@hogeserver: mv /var/lib/mysql /var/lib/mysql.orj

持ってきたファイルを現データフォルダーとする

hoge@hogeserver: mv /tmp/mysql /var/lib/mysql

ここで肝になるのがownerの設定。ついsudoとかですると持ってきたデータファイル/ディレクトリが自分の名前(ここだとhoge)になってしまうので、chownでmysqlに変えておく

hoge@hogeserver: chown mysql:mysql -R /var/lib/mysql

Slaveでmysqldを起動する

Slaveで以下のコマンドを実行

CHANGE MASTER TO
   MASTER_HOST = 'ホスト名',
   MASTER_USER = 'username',
   MASTER_PASSWORD = 'password',
   MASTER_LOG_FILE = 'myql-bin.00003(開始ポジション情報)',
   MASTER_LOG_POS =4;
SLAVE START;

MASTER_LOG_POSは

show  master status;

に書いてあるので確認する。

確認方法

動いているかどうかを確認する場合は
SLAVEでshow slave statusを実行して、

Slave_IO_Running
Slave_SQL_Running

両方がOKになっていたらよい

mysql>show slave status;

だと横にテーブル形式で出力されるので、

mysql>show slave status\G

とすると見やすく出力される。

mysql> show slave status\G
*************************** 1. row ***************************
            Slave_IO_State: Connecting to master
               Master_Host: マスターサーバのホスト名
               Master_User: 接続用のユーザ
               Master_Port: 3306
             Connect_Retry: 60
           Master_Log_File: myssql-bin.000639
       Read_Master_Log_Pos: 412
            Relay_Log_File: relay-bin.000001
             Relay_Log_Pos: 98
     Relay_Master_Log_File: myssql-bin.000639
          Slave_IO_Running: No
         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: 412
           Relay_Log_Space: 98
           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)

Master状況確認方法

show master status; 
show master logs

Slave状況確認

show slave status;
master_log_file = read_master_log_pos
relay_log_file = relay_log_post
relay_master_log_fiel = exec_master_log_pos

Last-modified: 2012-03-12 (月) 17:05:16 (166d)