RHEL、CentOS、FedoraでMySQL(マスタースレーブ)レプリケーションをセットアップする方法


次のチュートリアルは、RHEL 6.3/6.2/6.1/6/5.8、CentOS 6.3/6.2/6.1/6/5.8、およびFedora 17でMySQL(マスタースレーブ)レプリケーションを設定するための簡単なステップバイステップガイドを提供することを目的としています。 、16、15、14、13、12最新のMySQLバージョンを使用。このガイドは、CentOS 6.3オペレーティングシステム用に特別に作成されていますが、MySQL5.xを使用する古いバージョンのLinuxディストリビューションでも機能します。

MySQLレプリケーションは、データセキュリティ、フェイルオーバーソリューション、スレーブからのデータベースバックアップ、分析などの点で非常に便利です。レプリケーションプロセスを実行するために、次のものを使用します。あなたのシナリオでは、それは異なります。

  1. Working Linux OS like CentOS 6.3, RedHat 6.3 or Fedora 17
  2. Master and Slave are CentOS 6.3 Linux Servers.
  3. Master IP Address is: 192.168.1.1.
  4. Slave IP Address is: 192.168.1.2.
  5. Master and Slave are on the same LAN network.
  6. Master and Slave has MySQL version installed.
  7. Master allow remote MySQL connections on port 3306.

2つのサーバーがあります。1つはIP付きのマスター(192.168.1.1)で、もう1つはスレーブとして(192.168.1.2)です。セットアッププロセスを2つのフェーズに分けて、作業を簡単にします。フェーズIではマスターサーバーを構成し、フェーズIIではスレーブサーバーを使用して構成します。レプリケーションのセットアッププロセスを開始しましょう。

フェーズI:レプリケーション用にマスターサーバー(192.168.1.1)を構成する

フェーズIでは、MySQLのインストール、レプリケーションの設定、レプリケーションの検証について説明します。

まず、YUMコマンドを使用してMySQLのインストールを続行します。 MySQLがすでにインストールされている場合は、この手順をスキップできます。

# yum install mysql-server mysql

my.cnf構成ファイルをVIエディターで開きます。

# vi /etc/my.cnf

[mysqld]セクションの下に次のエントリを追加し、tecmintをスレーブで複製するデータベース名に置き換えることを忘れないでください。

server-id = 1
binlog-do-db=tecmint
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

MySQLサービスを再起動します。

# /etc/init.d/mysqld restart

rootユーザーとしてMySQLにログインし、スレーブユーザーを作成して、レプリケーションの権限を付与します。 slave_userをuserに、your_passwordをpasswordに置き換えます。

# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'your_password';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 11128001 | tecmint		 |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> quit;

ファイル(mysql-bin.000003)と位置(11128001)の番号を書き留めてください。これらの番号は、後でスレーブサーバーで必要になります。次に、データベースにREAD LOCKを適用して、mysqldumpコマンドですべてのデータベースとマスターデータベースの情報をエクスポートします。

#  mysqldump -u root -p --all-databases --master-data > /root/dbdump.db

すべてのデータベースをダンプしたら、rootユーザーおよびunlcokテーブルとしてmysqlに再度接続します。

mysql> UNLOCK TABLES;
mysql> quit;

SCPコマンドを使用して、データベースダンプファイルをスレーブサーバー(192.168.1.2)にアップロードします。

scp /root/dbdump.db [email protected]:/root/

これでマスターサーバーが正常に構成されました。フェーズIIのセクションに進みましょう。

フェーズII:レプリケーション用にスレーブサーバー(192.168.1.2)を構成する

フェーズIIでは、MySQLのインストール、レプリケーションの設定、レプリケーションの検証を行います。

MySQLがインストールされていない場合は、YUMコマンドを使用してインストールします。

# yum install mysql-server mysql

my.cnf構成ファイルをVIエディターで開きます。

# vi /etc/my.cnf

[mysqld]セクションの下に次のエントリを追加し、マスターで複製するマスターサーバーのIPアドレス、tecmintをデータベース名などに置き換えることを忘れないでください。

server-id = 2
master-host=192.168.1.1
master-connect-retry=60
master-user=slave_user
master-password=yourpassword
replicate-do-db=tecmint
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

ここで、前のコマンドでエクスポートしたダンプファイルをインポートし、MySQLサービスを再起動します。

# mysql -u root -p < /root/dbdump.db
# /etc/init.d/mysqld restart

rootユーザーとしてMySQLにログインし、スレーブを停止します。次に、マスターログファイルを探す場所をスレーブに伝えます。これは、マスターステータスを表示してマスターに書き留めていることを示しています。ファイル(mysql-bin.000003)および位置(11128001)番号としてのコマンド。 192.168.1.1をマスターサーバーのIPアドレスに変更し、それに応じてユーザーとパスワードを変更する必要があります。

# mysql -u root -p
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='slave_user', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=11128001;
mysql> slave start;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.1
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 12345100
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 11381900
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: tecmint
          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: 12345100
              Relay_Log_Space: 11382055
              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)

マスターサーバーとスレーブサーバーでのMySQLレプリケーションの確認

レプリケーションが完全に機能していることを知ることは非常に重要です。マスターサーバーでテーブルを作成し、それにいくつかの値を挿入します。

mysql> create database tecmint;
mysql> use tecmint;
mysql> CREATE TABLE employee (c int);
mysql> INSERT INTO employee (c) VALUES (1);
mysql> SELECT * FROM employee;
+------+
|  c  |
+------+
|  1  |
+------+
1 row in set (0.00 sec)

同じコマンドを実行してSLAVEを検証すると、スレーブでも同じ値が返されます。

mysql> use tecmint;
mysql> SELECT * FROM employee;
+------+
|  c  |
+------+
|  1  |
+------+
1 row in set (0.00 sec)

これで、最後にいくつかの簡単な手順でMySQLレプリケーションを構成できました。詳細については、MySQLレプリケーションガイドを参照してください。