[ ホーム | 一覧 | 検索 | 最終更新 | ヘルプ ] [ 新規 ]

KAWANO's PukiWiki Plus! - Install Log/CentOS6/MySQL_repl の変更点

Top > Install Log > CentOS6 > MySQL_repl
AND OR
  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • Install Log/CentOS6/MySQL_repl へ行く。

TITLE:MySQLでのレプリケーションの設定
*MySQLでのレプリケーションの設定 [#ld8e3fe9]


**レプリケーションとは [#x934d92f]
通常、データベースを別のサーバに複製することを、「レプリケーション」という。
レプリケーションのメリットは、次のとおり。
-データベースのバックアップ
-データベースの冗長化
-サーバの負荷分散

MySQLは標準でレプリケーション機能を備えているが、
その方式は「マスタ-スレーブ方式」で、
データベースの更新を受け付ける「マスタ」と、
マスタから伝搬されたデータを受け付ける「スレーブ」からなる、
一方通行の複製になる。

細かいことは、参照先のページを見ること。

**今回の目的 [#z1b568e1]
まったく同一構成の2台のマシンがあるので、
1台をマスタ、もう1台をスレーブにして、
データベースのバックアップと冗長化をはかる。

**レプリケーション用のユーザの作成 [#de5e516d]
スレーブがマスタに接続するための専用ユーザを、''マスタ''で作成する。
与える権限は「REPLICATION」「SLAVE」のみ。
今回は、ユーザ名「repl」、パスワード「password」で、
どのコンピュータからの接続も受け付ける('%')ようにする。

 master# mysql -u root -p
 ...
 mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'password';

**マスターのデータをスレーブにコピー [#g6a7ef86]
マスターの全データを、スレーブにコピーする。

今回は、稼働中のデータベースにレプリケーションを設定するため、
次のようなややこしい操作をする。
詳細は、参考に書いたページを見ること。
+マスタになるよう、設定ファイル(/etc/my.cnf)に追加する
 [mysqld]
 log-bin
 server-id=1
+MySQLを再起動する
+マスタで、tarコマンドを使って全データのバックアップをとる
 master# cd /var/lib/mysql
 master# tar cpf /var/tmp/mysql-snapshot.tar .
+マスタで、すかさずmysqlコマンドを使って、データベースが更新されないよう、書き込みロックをする(別端末で用意しておくとよい)
 mysql> FLUSH TABLES WITH READ LOCK;
+マスタで、もう一度tarコマンドを使って全データのバックアップをとる
 master# tar cpf /var/tmp/mysql-snapshot.tar .
+マスタで、mysqlコマンドを使って、マスタのバイナリログの位置情報を確認する。&br;あとで使うので、''必ずメモしておくこと''
 mysql> SHOW MASTER STATUS;
 +------------------+----------+--------------+------------------+
 | File             | Position | Binlog_do_db | Binlog_ignore_db |
 +------------------+----------+--------------+------------------+
 | mysql-bin.00002  | 35389    |              |                  |
 +------------------+----------+--------------+------------------+
 1 row in set (0.00 sec)
+マスタで、書き込みロックを解除する
 mysql> UNLOCK TABLES;
+マスタでバックアップしたデータをスレーブにコピーする
 master# scp /var/tmp/mysql-snapshot.tar slave:/var/tmp/

**スレーブを開始する [#l8594566]
スレーブのための設定をする。
ここからの作業は、失敗してもマスタには影響がないので、
何回でもやり直しできる。

+スレーブで、起動中のmysqldを停止する
 slave# service mysql stop
+マスタからコピーしたデータを展開する
 slave# cd /var/lib/mysql
 slave# rm -rf *
 slave# tar xpf /var/tmp/mysql-snapshot.tar
+展開したら、マスタで使っていたバイナリログ用ファイルやエラーログ用ファイルなどを削除する
 slave# rm -f mysql-bin.????? mysql-bin.index
 slave# rm -f マスタのホスト名.pid マスタのホスト名.err
+スレーブで、/etc/my.cnfを編集して、「server-id」をマスタのと違う数字にする
 [mysqld]
 server-id=2
+スレーブで、サーバを起動する
 slave# service mysqld start
+スレーブで、mysqlコマンドを使って、マスタの情報を設定する
 mysql> CHANGE MASTER TO
     -> MASTER_HOST = 'master',
     -> MASTER_USER = 'repl',
     -> MASTER_PASSWORD = 'password',
     -> MASTER_LOG_FILE = 'mysql-bin.00002', (メモしたバイナリログのファイル名)
     -> MASTER_LOG_POS = 35389; (メモしたバイナリログの位置)
+スレーブを開始する
 mysql> START SLAVE;
+レプリケーションが成功したら、スレーブで、/etc/my.cnfを編集して、マスタの情報を設定する(情報は/var/lib/mysql/masater.infoにすでに書き込まれている)
 [mysqld]
 server-id=2
 master-host=master
 master-user=repl
 master-password=password

**追記:my.cnfへの設定の追加 [#gfb5a838]
CentOSのバージョンが上がると、いつの間にか、バイナリログファイルを置く場所が変わってしまっていた。ファイル名もホスト名ベースから、デフォルトの「mysql-bin」になってしまっていた。
-変更前:/var/lib/mysql/<hostname>-bin.XXXXX
-変更後:/var/run/mysqld/mysql-bin.XXXXX

したがって、ここまでに書いた設定では、
レプリケーション側がうまく動作しなくなってしまい、問題が生じる。

とりあえず、
バイナリログファイル関係(マスタ側)やリレーログファイル関係(スレーブ側)の
設定を、/etc/my.cnfに追加する必要がある。詳しくは、下の情報を参照。
-[[CentOSでMySQLのレプリケーション:http://blog.oreore.jp/2008/09/centosmysql.html]]

 CentOS5.1でMySQLのレプリケーションを設定。
 セオリー通りに設定して無事動いたんですが、
 サーバを物理的に再起動すると、あらまバイナリログが初期化される・・・。
 で、セカンダリのMySQLはログを見失いレプリケーションが崩れる。。。
 
 色々見ていると、どうもMySQLのバイナリログの保存先が"/var/run/mysql"とかになってる。
 で、"/var/run"以下は再起動時に綺麗にお掃除されるため、バイナリログももれなく削除。
 と言うことで、起動ファイルに下記を追加して難を凌ぎました。

というわけで、ざっくり書くと、
マスタサーバの/etc/my.cnfに次の情報を書いた上で、作業を進める。
 log-bin=/var/lib/mysql/mysqld-bin

さらに、スレーブサーバ側の作業を進める時に、
次の設定を/etc/my.cnfに用意しておく。
 #log-bin=/var/lib/mysql/mysqld-bin ←コメントアウトするか削除する
 relay-log=/var/lib/mysql/mysqld-relay-bin
 relay-log-index=/var/lib/mysql/mysqld-relay-bin


**追記2:さらにmy.cnfへの設定の追加 [#gfb5a838]
Moodleのアップグレードの際に、その途中で、
データベースのログにエラーが記録されていた。
それに対応するために、次の設定を「/etc/my.cnf」に追加した。
 …
 binlog_format=row
 …

行ベースでバイナリログファイルに記録することになるので、
バイナリログファイルの大きさが結構大きくなるみたい……

**参考 [#ha2f6d86]
-http://www.irori.org/doc/mysql-rep.html
-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

メニュー

  • トップ
  • 授業
  • PukiWiki Log
  • Install Log
  • 道具箱
  • セキュリティ情報
  • RSSアンテナ

大学関係リンク

  • Webメール
  • 健康システム学科
  • 情報メディアセンター
  • 兵庫大学

今日の5件
  • FrontPage(39)
  • Lecture/InfoPrac2004/2nd/7th(3)
  • Lecture/InfoPrac2005/4th/calc2(3)
  • Lecture/CompPracE2006/10th/1st(2)
  • Lecture/InfoPrac2004/11th/save_file(2)
最新の5件
2016-04-08
  • Lecture/timetable_2016
  • Lecture
  • FrontPage
2015-09-30
  • Lecture/timetable_2015
2015-04-04
  • MenuBar

total: 1800
today: 3
yesterday: 0
now: 16


リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
http%3A%2F%2Fhs-www.hyogo-dai.ac.jp%2F~kawano%2F%3FInstall%252520Log%25252FCentOS6%25252FMySQL_repl
Founded by Minoru Kawano.
Powered by PukiWiki Plus! 1.4.7plus-u2-i18n. HTML convert time to 0.125 sec.
Valid XHTML 1.1