TITLE:MySQLでのレプリケーションの設定 *MySQLでのレプリケーションの設定 [#ld8e3fe9] Vine Linuxでやったのと、まったく同じ作業でできた。 [[Vine Linux>Install Log/VineLinux4.1/mysql_replication]]でやったのと、 まったく同じ作業でできた。 **レプリケーションとは [#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 mysql 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] erver-id=2 master-host=master master-user=repl master-password=password **参考 [#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 |