Database

MariaDB はじめてのMariaDB 【第10回 レプリケーションサーバの構築】

Posted 10月 3 2014 by 別納 義康  , ,

レプリケーションって?

聞いたことがない方もいるかと思うので、まずレプリケーションについて
簡単に説明します。

レプリケーションとは、主となるDB(マスタDB)のコピー(スレーブDB)を作成する技術のことです。
マスタDBを更新した際に同時にスレーブDBをも更新します。
従って、マスタDBに障害が発生した場合でもスレーブDBを使用することで
継続的に運用を行うことができ、DBが分かれているため、
負荷分散でき、効率的なDBの運用を行えるというメリットを持っています。

レプリケーションを構築する大枠は、下記手順で行います。

  1. 【マスタ側】レプリケーション設定
  2. 【マスタ側】DBバックアップ
  3. 【マスタ側】GTIDを取得
  4. 【マスタ側】スレーブユーザの作成
  5. 【スレーブ側】マスタ側のDBバックアップをリストア
  6. 【スレーブ側】レプリケーション設定
  7. 【スレーブ側】レプリケーションの開始

レプリケーションサーバの構築手順

MariaDBがインストールされているマシン2台用意しました。
※Windows7とCentOS6.5(VM)

  1. 【マスタ側】レプリケーションの設定
    MariaDBの設定ファイル/etc/my.cnfに下記を追記

    server-id=1        ←システム環境内で重複しないように注意
    log-bin=localhost-bin    ←バイナリログを設定

    上記を設定後、MariaDBをリスタートします。

    /etc/rc.d/init.d/mysqld restart
  2. 【マスタ側】DBバックアップの実施
    DBバックアップを取得する前にデータがなければ、適当に入れておいてください。
    その方が後で確認するときに楽です。
    バックアップの取得方法は下記の通りです。

    mysqldump -u root -p --all-databases --single-transaction --master-data=2 > dbdmp.sql
  3. 【マスタ側】GTIDの取得
    先ほど取得したバックアップファイルの中身を確認します。
    『CHANGE MASTER TO』の文言で検索をかけると下記のような記述が見つかるかと思います。

    -- CHANGE MASTER TO MASTER_LOG_FILE='バイナリログファイル名', MASTER_LOG_POS=ポジション;

    上記をメモしておき、下記コマンドをMariaDBにログインしてから実行します。

    SELECT BINLOG_GTID_POS('バイナリログファイル名', ポジション);

    実行結果として、下図のようになるので、内容をメモしておきます。
    sv_get_gtid

  4. 【マスタ側】スレーブ用のユーザ作成
    スレーブ側からマスタ側にログインするためのユーザを作成します。

    GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'スレーブ側のホスト名またはIPアドレス' IDENTIFIED BY 'slave';
  5. 【スレーブ側】リストア
    マスタ側で取得したバックアップをリストアします。
    コマンドは下記の通りです。

    mysql -u root -p < dbdmp.sql
  6. 【スレーブ側】レプリケーション設定
    MariaDBの設定ファイル/etc/my.cnfに下記を追記

    server-id=2        ←システム環境内で重複しないように注意
    log-bin=localhost-bin    ←バイナリログを設定

    上記を設定後、MariaDBをリスタートします。

    /etc/rc.d/init.d/mysqld restart
  7. MariaDBにログインし、下記コマンドを実行します。

    SET GLOBAL gtid_slave_pos = "x-x-xxx";
    ※上記で取得したGTIDをx-x-xxxに入れる。
     今回の例で言うと0-1-1
    続けて、下記コマンドを実行します。
    
    CHANGE MASTER TO master_host = 'マスタ側のホスト名またはIPアドレス', master_user = 'マスタ側へのログインユーザ', master_password = 'パスワード', master_use_gtid = slave_pos;

    実際の実行結果は下記の通りです。
    cl_set_info

  8. 【スレーブ側】スレーブの開始
    下記コマンドを実行し、スレーブを開始します。
    ※MariaDBにログインして、実行

    START SlAVE;

    cl_start_slave
    ※停止する際のコマンドは、下記の通り

    STOP SLAVE;

レプリケーションの動作確認

マスタ側で何かデータ更新をしてみます。
【マスタ側】
sv_update_test
【スレーブ側】
cl_update_test

マスタ側で更新した結果がスレーブ側にも反映されています。
MariaDBは、レプリケーション機能がMySQLよりも上回っているとの話を良く耳にします。
そのうち、そのあたりの検証とお話をしたいと思います。(いつになるかなぁ・・・)


DB MariaDB OSS



  未経験OKの仕事 |  上場企業の仕事 |  高待遇の仕事 |  外資系の仕事 |  社内SEで検索 |  自社サービスで検索





メールアドレス
ご質問・問い合わせ等、ご自由にお書きください。