にへるつおるぐ | src | ブログ | コンタクト | 統計 | 御串 | 小束 | 裏ミク | つ痛 | 顔本 |

10年ぶりに部屋に入るとコウモリや猫の巣窟だった

MySQL AB :: 世界でもっとも普及している、オープン ソース データベース

2007-09-04 16:47:15 JST-9 | akebia | MySQL | コメント | トラックバック | 履歴

マスタ: 5.0.32-Debian_7etch8-log Debian etch distribution
スレーブ: 5.0.67-community-nt MySQL Community Edition (GPL)

  1. マスタのmy.cnfにserver-idとlog-binを設定し、マスタのmysqldを再起動する。
    server-id = 1
    log-bin = /var/log/mysql/mysql-bin.log
  2. マスタに接続してレプリケーション用のユーザを作成する。
    GRANT REPLICATION SLAVE ON *.* TO repl@slave IDENTIFIED BY 'password';
  3. マスタの全てのテーブルをフラッシュし、更新をブロックし、マスタのバイナリログ名(File)とオフセット値(Position)を控えて、更新がブロックされた状態のまま、mysqldを停止させる。
    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS;
    +------------------+----------+-
    | File             | Position |
    +------------------+----------+-
    | mysql-bin.000546 |      508 |
    +------------------+----------+-

    ここで、mysqlクライアントを終了させずに別ターミナル等からmysqldを停止させる。

  4. スレーブのmysqldを停止させ、スレーブのdatadirの中身を全部削除して、そこにマスタのdatadirの中身を全部コピーしてから、マスタのmysqldを開始させる。ただし、innodbを使っている場合、ib_logfile~については、その大きさがinnodb_log_file_sizeで指定したのと異なっているとエラーになるようなのでコピーしない方がよい。
  5. スレーブのmy.cnfにserver-idとrelay-logを設定し、スレーブのmysqldを開始させる。マスタでinnodbを使っている場合には、スレーブのmy.cnfのskip-innodbをコメントアウトしておく。collation-serverやcharacter-set-serverがマスタと違う場合にはマスタと同じになるように修正しておく。
    server-id = 2
    relay-log = relay-bin
    #skip-innodb 
    #character-set-server = latin1
    #collation-server = latin1_general_ci
  6. スレーブに接続して、マスタの情報を設定し、レプリケーションを開始させ、動作状況を確認する。
    CHANGE MASTER TO
    MASTER_HOST='master',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000546',
    MASTER_LOG_POS=508;
    START SLAVE;
    SHOW SLAVE STATUS\G
    *************************** 1. row ***************************
                 Slave_IO_State: Waiting for master to send event
                    Master_Host: master
                    Master_User: repl
                    Master_Port: 3306
                  Connect_Retry: 60
                Master_Log_File: mysql-bin.000547
            Read_Master_Log_Pos: 4218
                 Relay_Log_File: relay-bin.000009
                  Relay_Log_Pos: 1452
          Relay_Master_Log_File: mysql-bin.000547
               Slave_IO_Running: Yes
              Slave_SQL_Running: Yes

    「Slave_IO_State」がもっともらしい状態を示していて、「Slave_IO_Running」と「Slave_SQL_Running」が「Yes」になっていれば、多分、レプリケーションは動作している。ログのファイル名(…_Log_File)やオフセット値(…_Log_Pos)はデータベースの更新により、「SHOW SLAVE STATUS」を実行するタイミングで違ってくる。エラーログも調べて、エラーや警告が出ていればそれに応じた処置をする。

一度、「CHANGE MASTER TO…」と「START SLAVE」を実行しておけば、mysqldを再起動しても次回から自動的にレプリケーションが開始されるみたいです。

XAMPPでMySqlの起動や停止の動作が怪しい時は、一旦、「mysqladmin -u root shutdown」としてmysqldを終わらせ、「mysqld --remove」でサービスの登録を削除し、「XAMPPコントロールパネルアプリケーション」を使って、MySqlサービスを登録するとうまく動作するようになるみたいです。その際、登録のはずが削除するかどうか聞いてきたりしてなんか変だけど、気にせず「OK」すれば登録されるみたいです。

スレーブを増やしたい時には、現在稼動中の適当なスレーブのmysqldを停止させ、そのdatadirとmy.confを新しいスレーブへコピーし、新しいスレーブのmy.confのserver-idを新しい番号に修正し、マスタに新しいスレーブのレプリケーション用のユーザを作成するとよいです。その時、新しいスレーブがリレーログのオープンに失敗する場合には、新しいスレーブのmysqldを停止させ、新しいスレーブのdatadir内のリレーログとrelay-log.infoを削除してから、新しいスレーブのmysqldを開始させるとよいみたいです。

MyMiniCity 人気ブログランキングへ

  1. Slave_IO_State (53)
  2. xampp レプリケーション (20)
  3. xampp mysql レプリケーション (13)
  4. mysql レプリケーション InnoDB (11)
  5. mysql innodb レプリケーション (8)

Comments

No comments yet

Add Comment

Trackback

このトラックバックURL(右クリックして、リンクのURLをコピー)を使ってこの記事にトラックバックを送ることができます。もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。トラックバックの手動送信に失敗したり、拒否された場合には、あけび猫が入力しますので、こちらまでご連絡下さい。重複したトラックバックは、自動的に1つにまとめられるようなので、気軽に色々試してみて下さい。


http://2hz.org/akebia/