ソースレプリカデータレプリケーションを使用すると、レプリケートされたデータを複数のコンピューターにコピーして、複数の関係者によるバックアップと分析を行うことができます。グループメンバーによって識別された必要な変更を、ノードの指定されたプライマリに送信する必要があります。これは、グループの許可された寄稿者がデータを更新できるsource-sourcereplicationとは異なります。
この記事では、2つのクラウドサーバー間でMySQL®ソース-レプリカデータベースレプリケーションを設定する手順について説明します。この記事の例で使用されているオペレーティングシステムは、RackspaceCloudServersベースイメージから構築されたCentOS®6です。
この記事の手順では、2つのクラウドサーバーdb01
を使用します およびdb02
.Cloudサーバーには2つのIPアドレスがあります(1つはパブリック、もう1つはプライベート)。例では、帯域幅の料金が発生しないように、プライベートIPインターフェイスを介してレプリケーションを構成する方法を示しています。記事の期間中、db01
ソースと見なされます MySQLサーバー(読み取り/書き込みモードを実行)、およびdb02
レプリカと見なされます サーバー(読み取り専用モードを実行)。
すでにソースノードでMySQLデータベースを実行している場合は、それらの間のレプリケーションを構成する前に、レプリカノードへのダンプと復元が必要です。 mysqldump
を使用します データベースをファイルにダンプし、それを転送してレプリカに復元するコマンド。必要な構成が実行された後、レプリケーションは無効になります。詳細については、「レプリケーションの構成」セクションを参照してください。
Centos 6ベースイメージを使用して、2つのLinux®クラウドサーバーを作成します。次の手順を使用して、各サーバーを個別に作成します。
- クラウドコントロールパネルにログインします。
- 上部のナビゲーションバーで、[製品の選択]をクリックします 次にRackspaceCloud 。
- サーバーを選択します 次にクラウドサーバー 。
- [サーバーの作成]をクリックします 。
- セットアップ中にサーバーを簡単に識別できるように、サーバーに名前を付けます。
- Centos6ベースイメージを選択します。
- データベースの要件に適したRAM構成(フレーバー)を選択します。
- [サーバーの作成]をクリックします 。
次のセクションで概説するコマンドは、特権のあるrootまたはsudoグループのユーザーが実行する必要があります。括弧内に指定された文字列または値は、セットアップに固有のデータに置き換える必要があります。
mysql-serverをインストールする必要があります 両方のCentOSクラウドサーバー上のパッケージ。
-
MySQLをインストールする前に、次のコマンドを実行して、パッケージデータベースが最新であることを確認してください。
#yum update
-
MySQLをインストールし、起動時に自動的に実行できるようにします:
#yum install mysql-server #chkconfig mysqld on
-
mysqld
を開始します サービス:#service mysqld start
-
mysqld
の後 サービスが開始されたら、次のコマンドを使用してMySQLサーバールートパスワードを設定します。/usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h web01 password 'new-password'
注 :または、MySQLインストールにパッケージ化されたセキュアインストールスクリプトを実行することもできます:
# /usr/bin/mysql_secure_installation Enter current password for root (enter for none): ... Set root password? [Y/n] Y ... Remove anonymous users? [Y/n] Y ... Disallow root login remotely? [Y/n] Y ... Remove test database and access to it? [Y/n] Y ... Reload privilege tables now? [Y/n] Y
-
ポート3306(
mysqld
)での接続を許可するには デフォルトのポート)、RH-Firewall-1-INPUT
の最後の行番号に挿入を含むTCPポート3306ルールを追加します チェーン(この場合は10行目):# iptables -I RH-Firewall-1-INPUT 10 -p tcp --dport 3306 -j ACCEPT
-
ファイアウォール構成を保存します:
# service iptables save
次のセクションを完了して、関連する構成を変更し、レプリケーションを有効にします。
ソースサーバーにはMySQLユーザーが必要です(db01
)複製に使用されます。
-
次のコマンドを実行してMySQLユーザーを設定し、括弧内のエントリを、設定で使用する予定の文字列または値で更新します。
注: 次のコードでユーザーを作成する必要がない場合があります。
# mysql -u root -p mysql> create user [replication_username]@'[private IP of db02]' identified by '[some password]'; mysql> grant replication slave on *.* TO [replication_username]@'[private IP of db02]'; mysql> flush privileges; mysql> quit
-
/etc/my.cnfを編集します ファイルを作成し、次のエントリを追加します。
bind-address = 0.0.0.0 server-id = 1 log-bin = mysql-bin binlog-ignore-db = "mysql"
-
/etc/my.cnfの更新が完了したら ファイル、
mysqld
を再起動します サービス。#service mysqld restart
レプリケーションを開始する前に、ソースサーバーとレプリカサーバーのデータが同じである必要があります。この複製を実行するには、ソース(
db01
)からデータをダンプします。 )サーバーを作成し、レプリカに追加します(db02
)サーバー。 -
次のコマンドを使用して、データベースのダンプ中にソースデータベースに何も書き込めないことを確認します。また、db02のレプリケーション構成を完了するにはこれらの値が必要なので、バイナリログのファイル名と位置にも注意してください。
# mysql -u root -p mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; +------------------+--------------------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+--------------------------+------------------+ | mysql-bin.000010 | 10 | | mysql | +------------------+--------------------------+------------------+ 1 row in set (0.00 sec)
注1:
db02
でレプリケーション構成を完了するにはこれらの値が必要なため、バイナリログのファイル名と位置を記録します 。注2: このセッションを開いたままにして、閉じるとロックが解除されます!
-
mysqldump
を使用してデータベースダンプを実行します 次のように:# mysqldump -u root -p --databases [database-1] [database-2] ... > /root/db_dump.sql
-
データベースのダンプが完了したら、ソースから読み取りロックを解除します(
db01
)次のように入力するか、開いているセッションを終了します。mysql> UNLOCK TABLES;
-
データベースダンプファイルをレプリカサーバーにコピーして、次のコマンドを使用して復元できるようにします。
scp /root/db_dump.sql [private-IP-of-db02]:/root/
-
db02
について 、 /etc/my.cnfを編集します ファイルを作成し、次のエントリを追加します:bind-address = 0.0.0.0 server-id = 2 master-host = [private-IP-of-db01] master-user = [replication-username] master-password = [replication-password] master-connect-retry = 60
-
db_dump.sqlをインポートします 以前にコピーしたファイルをコピーして、MySQLサービスを再起動します。
# mysql -u root -p < /root/db_dump.sql # service mysqld restart
-
レプリカの複製手順を完了します:
# mysql -u root -p mysql> SLAVE STOP; mysql> CHANGE MASTER TO MASTER_HOST='[private-IP-of-db01]', MASTER_USER='[replication-username]', MASTER_PASSWORD='[replication-password]', MASTER_LOG_FILE='[file-listed-on-master-status]', MASTER_LOG_POS=[log-position-listed-on-master-status]; mysql> START SLAVE; mysql> SHOW SLAVE STATUS\G
注: Slave_IO_State フィールドに「マスター送信イベントを待機中」と表示されているはずです。 「マスターに接続中」と表示されている場合は、MySQLログファイルを確認してください。デフォルトでは、 /var/log/mysqld.logです。 、ただし、システム上で異なる構成になっている可能性があります。いつも、 /etc/my.cnf ログファイルの場所を定義します。
レプリケーションの設定をテストするには、db01
に新しいデータベースと関連テーブルを作成します データを挿入して、変更がdb02
にミラーリングされていることを確認します 。次の例では、新しいデータベースの名前はテストです。 、新しいテーブルの名前は users :
# mysql -u root -p
mysql> create database testing;
mysql> use testing
mysql> create table users(id int not null auto_increment, primary key(id), username varchar(30) not null);
mysql> insert into users (username) values ('foo');
mysql> insert into users (username) values ('bar');
mysql> exit
db02
に変更が表示されます。 すぐに。