Custom Search

JITAKU_SVR_Wiki



環境

OS:CentOS release 6.3 (Final)
MasterDB:192.168.1.1
SlaveDB:192.168.1.2

パッケージ:

# rpm -qa |grep mysql
mysql-libs-5.1.69-1.el6_4.x86_64
mysql-5.1.69-1.el6_4.x86_64
php-mysql-5.3.3-22.el6.x86_64
mysql-server-5.1.69-1.el6_4.x86_64

すべてyumからインストール。



MasterDBでの作業

mysqlサーバのインストール

mysqlサーバをインストールするには、

# yum install mysql-server

設定ファイルの編集

# cp -p /etc/my.cnf /etc/old/my.cnf.org

# vim /etc/my.cnf
今回は最低限の設定だけなので、本当にチューニングが必要な場合には注意すること

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-bin  ### ← ①ここは必須
server-id=1  ### ← ②ここも必須   
set-variable = expire_logs_days=7  ### ← ③ここは必須じゃない(下記で説明)

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

TIPS:
レプリケーションをするのに必須の項目は上記のコメントした2か所。
①log-binはバイナリログのことで、これをslaveDB側が取得することで、同期を行う。

②server-idは任意の数字でOKただし、master-slave構成を行っているサーバ同士では絶対に数字が重複させないこと。

③set-variableはどんどん溜まっていくバイナリログのローテートの設定。
そのままにしておくと勝手に増えていくが、バイナリログを手動で消すのは非常に勇気のいることなので、サーバにやらせてしまう。
(厳密には、slaveDB側のポジション確認を行い、削除して良いことが分かっていればrmしてもOK)
ここで設定しているのは"7"で一週間を意味している。
※SlaveDBサーバが読み込んでいるポジションはMasterDBは意識してくれないので、
万が一SlaveDBのポジションが追いついていないのにローテートされた場合には削除されてしまうので、
少し余裕を持たせた方が良いらしい。

ユーザの作成

MasterDBにSlaveDBから接続し、バイナリログを取得するためにユーザを作成する。

# mysql
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.1.2 IDENTIFIED BY 'password';

レプリケーションをするサーバ = 192.168.1.2
ユーザ名 = repl
パスワード = password

DBのバックアップを取得する

SlaveDBに0からMasterのDBを同期させるのは面倒なので、現在稼働してるMasterDBの"位置(レプリカと言った方が伝わる?)"をコピーしてくる。

1.MasterDBの更新を止める

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

2.ポジションを確認する
(Slave設定の時に使うのでメモしておく)

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000001 |    13152 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

3.DBをtarで固めてSlave側へ持っていく

# cd /var/lib
(デフォルトのパスなので、変更している場合は適宜)
# tar jcvf /home/USER/mysql.tar.bz2 ./mysql

4.ロックの解除
2でDBの更新を止めているので、解除する。

# mysql
mysql> unlock tables;

以上でMasterDB側の作業は完了。

SlaveDBでの作業

mysqlサーバのインストール

当然SlaveDBサーバにもmysqlが必要なのでインストールをすること。
手順は上の方でしているので省略。

Slave構築中はmysqlが止まっていた方が良いので、動いているなら停止する。

# /etc/init.d/mysqld stop

設定ファイルの編集

# cp -p /etc/my.cnf /etc/old/my.cnf.org

# vim /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=2  ### ← ①ここだけ必須

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

TIPS:
①server-idはMasterDB側でも設定したが、SlaveDBも任意の数字でOK。
ただし、Masterや、他のSlaveDBと数字が重複しないように注意すること。

DBのバックアップの展開

MasterDBからtarで固めたバックアップを展開する。

# cd /var/lib

# rm -rf mysql

# tar jxvf mysql.tar.bz2
tar展開後オーナー、パーミッションのすること。
オーナがmysqlになっていればOK。

上記が完了したらmysqlを起動させる。

# /etc/init.d/mysqld start

SLAVE設定

mysql> CHANGE MASTER TO
        MASTER_HOST='192.168.1.1',  ← Masterのホスト名/IPアドレス
        MASTER_USER='repl',         ← Master接続に使用するユーザー名
        MASTER_PASSWORD='password', ← パスワード
        MASTER_LOG_FILE='mysqld-bin.000001', ← MasterDB設定2で確認したファイル名
        MASTER_LOG_POS=13152;       ← MasterDB設定2で確認したポジション

SlaveDBでレプリケーションを開始

mysql> start slave;
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: 27.120.106.76
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqld-bin.000001
          Read_Master_Log_Pos: 77119
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 64219
        Relay_Master_Log_File: mysqld-bin.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: 77119
              Relay_Log_Space: 64375
              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
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)

show slave statusで出てくるログの以下の部分をチェックし、Yesになっていればslaveが出来ている。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

ポートの開放

MasterDBにSlaveDBから通信が来るので、ポートを開放する必要がある。
もし、iptablesを使用しているなら、以下を追加。

-A RH-Firewall-1-INPUT -s 192.168.1.2/32 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

書き方のメモは

参考

http://wiki.bit-hive.com/tomizoo/pg/MySQL%20%A5%EC%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%A4%CE%C0%DF%C4%EA
http://wiki.bit-hive.com/tomizoo/pg/MySQL%20%A5%D0%A5%A4%A5%CA%A5%EA%A5%ED%A5%B0%A4%CE%BA%EF%BD%FC


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-22 (火) 14:36:59 (697d)