8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mysql レプリケーション【マスタースレーブ設定】

Last updated at Posted at 2018-04-19

レプリケーションとは

  • レプリケーションとはデータを複製(レプリカ)して別サーバで保持する機能。
  • レプリケーションの方法としては、マスタースレーブ構成、双方向レプリケーションなどがある。

マスタースレーブ構成とは

マスター(単一)サーバーと、スレーブ(単一または複数)サーバーで構成されている

マスター

  • データを参照・更新できる
  • 更新内容をスレーブに転送する
  • マスターは複数のスレーブを持てる

スレーブ

  • データを参照できる(更新しない)
  • スレーブは1つのマスターのみ持てる

マスタースレーブ設定方法

マスター側の設定

  • my.cnfの編集 例: etc/my.cnf
my.cnf
# Replication設定
server-id     = 1
log-bin       = mysql-bin
  • ファイル編集後にmysqlを再起動する
# service mysqld restart
  • レプリケーション用ユーザ作成
# mysql -u root -p
--ユーザ作成 ユーザ名: repl パスワード:repl
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'repl'

--ユーザ確認
mysql> SELECT user, host FROM mysql.user WHERE user = 'repl';

  • マスターDBのダンプファイル作成
# mysql -u root -p

// マスター側のステータス確認(ログファイル名とポジション)
mysql> SHOW MASTER STATUS \G;
        File: mysql-bin.000030
    Position: 4421

// mysqlをexitしてmysqldumpコマンドを実行
# mysqldump -u root -p \
  --all-databases \
  --events \
  --single-transaction \
  --flush-logs \
  --master-data=2 \
  --hex-blob \
  --default-character-set=utf8 > master_db.sql

// ダンプファイルをスレーブサーバーにコピーする
# scp master_db.sql root@xxx.xxx.xxx.xxx;
   

スレーブ側の設定

  • my.cnfファイルの編集 例: etc/my.cnf
my.cnf
# Replication設定
server-id     = 2
log-bin       = mysql-bin
read_only

  • ファイル編集後にmysqlを再起動する
# service mysqld restart
  • マスターDBのダンプの読込み
# mysql -u root -p < master_db.sql
  • レプリケーション設定
# mysql -u root -p
mysql> CHANGE MASTER TO
         MASTER_HOST='XXX.XXX.XXX.XXX', --マスターのIPアドレス
         MASTER_PORT=3306,              --マスターのポート番号
         MASTER_USER='repl',            --マスター側で作成したレプリケーション用ユーザ名
         MASTER_PASSWORD='repl'         --レプリケーション用ユーザのパスワード
         MASTER_LOG_FILE='mysql-bin.000030'  --上記で調べたマスター側のバイナリログファイル名
         MASTER_LOG_POS=4421;                --上記で調べたマスター側のバイナリログの開始位置

レプリケーションの開始

--スレーブ側で以下を実行
mysql> START SLAVE;

レプリケーションの確認

--スレーブ側で以下を実行
mysql> SHOW SLAVE STATUS \G

-- 以下の項目が「Yes」ならスレーブ状態になっている
      Slave_IO_Running: Yes
     Slave_SQL_Running: Yes

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?