簡単な紹介
MySQLのマスタースレーブの同期がより広く使われているデータベース・アーキテクチャである、技術は比較的成熟して、設定が読み書きに、特に比較的大きな負荷のサイトに、マスター・スレーブ同期データベース複雑ではありません効果的に圧力を緩和することができます。
MySQLのマスター・スレーブ同期メカニズム:
次のようにMySQLの同期プロセスは次のとおりです。
図1に示すように、メインサーバ(マスタ)はバイナリログ(マスターログ)に書き込まれたイベント(更新、削除、テーブル構造の変化、等)を変更します。
2、プライマリサーバ(ビンログダンプスレッド)バイナリログからのサーバ(スレーブ)IOスレッドから取得し、ローカルであなたのバイナリログ(リレーログ)のコピーを保存
3、SQL Serverのスレッドからローカルログ(リレーログ)、および変更イベントの繰り返しをお読みください。
アクションのMySQLのマスター・スレーブ同期:
図1に示すように、バックアップ機構として使用することができ、それは(バックアップ時にプライマリサービスに影響を与えることを回避するために、バックアップからの)ホットバックアップに対応します
図2に示すように、負荷分散データベース(リードからマスター書き込み)読み取りおよび書き込み別個に使用することができます
プライマリサーバが、サーバが切り替え可能な場合3、問題があります。
MySQLのマスタースレーブ同期手順:
まず、準備行為:
1、同じマスター・データベースのバージョンから、バージョン5.5が推奨されます
2、データベースメイン一致からのデータ
第二に、プライマリマスタデータベースの変更:
1、MySQLの設定を変更します。
#な/etc/my.cnf
ログインビン= mysqlのビン
プライマリ・データベースID番号#の終わり
サーバID = 1
ログインビン= /ホーム/ mysqlの/ログ/ビンログ/ビンログ
max_binlog_size = 500M
binlog_cache_size = 128K
ビンログ-DO-DB = ADB
binlog-無視-db = mysqlの
ログ・スレーブアップデート
expire_logs_day = 2
binlog_format = "MIXED"
および関連する各パラメータの意味は、上記構成要素ことに留意すること:複数の単語は、最初の被験者のグループをMySQLを見える場合#サーバフラグ数、そのような識別にもっと注意は、コンフィギュレーションファイルには表示されないことができ、この一次識別番号からこれを繰り返すことができません。
サーバID = 1
= /ホーム/ mysqlの/ログ/ビンログ/ binlogの#オープンbinlogのビン・ログ、およびファイルのディレクトリとファイル名のプレフィックスを指定します。
#各ビンログこのサイズは500Mに等しい場合、最大サイズは自動的に新しいログファイルが生成されます。時々、ログファイルがこのサイズを超えているので、2つのログファイルに記録を書き込みません。
max_binlog_size = 500M
binlog_cache_size = 128K#ログ・キャッシュ・サイズ
ビンログ-DO-DB =データベース名ADB#それはより多くのであれば、あなたはこの形式の行を書くことができ、同期させる必要があります。
ビンログは-無視-DB = mysqlの#データベース名を同期する必要はありません、それはより多くの場合、あなたはこの形式の行を書くことができます。
#アップデートログのみ-binの開始が、ログ・スレーブは、更新のみ、独自のデータベース更新操作のためのスレーブレコードを起動しない場合、スレーブは、ログに書き込まれた新しいマスターデータベースからログを読み込むとき。
ログ・スレーブアップデート
expire_logs_dayは=日数は#2が設定されているビン・ログログファイルを維持するために、このバージョンでは、次のパラメータのMySQL5.0のをサポートしていません。
binlog_format =「MIXED」#セットビン・ログログファイル形式:MIXED、主キーを複製することを防止することができます。
2、同期のためにアカウントを作成して、MySQLを再起動します。
#、スレーブアカウントのスレーブを作成し、パスワード111111
MySQLの>上* *「奴隷」@「%」「111111」で識別に助成金レプリケーションスレーブ。
#データベース権限を更新
MySQLの>フラッシュ権限;
3、マスターのステータスを問い合わせます
MySQLは>マスター状態を表示します。
+ ------------------ + ---------- + -------------- + ---- -------------- +
| ファイル| 位置| Binlog_Do_DB | Binlog_Ignore_DB |
+ ------------------ + ---------- + -------------- + ---- -------------- +
| mysqlの-bin.000009 | 196 | | |
+ ------------------ + ---------- + -------------- + ---- -------------- +
セット内の1行
注:このステップは、マスターデータベースの操作ではなく後に、マスターデータベースは、状態値を防ぐために
第三に、データベースのスレーブを変更します。
1、MySQLの設定を変更します。
データベースから#ターミナルのID番号
サーバID = 2
2同期コマンド実行
#同期コマンド実行、パスワード同期、同期位置を占めて、プライマリ・データベースのIPを設定します
MySQLの>変更マスタは= '192.168.1.2'、master_user = 'スレーブ'、master_password = '111111'、MASTER_LOG_FILE = 'のMySQL-bin.000009'、MASTER_LOG_POS = 196 MASTER_HOSTします。
#Syncを有効にします
MySQLの>スレーブを起動します。
3、データベースから状態をチェックします。
MySQLの>ショースレーブstatusG。
*************************** 1行******************** *******
Slave_IO_State:イベントを送信するためにマスターを待っています
MASTER_HOST:192.168.1.2
Master_User:slave_account
MASTER_PORT:3306
Connect_Retry:60
MASTER_LOG_FILEます。mysql-bin.000009
Read_Master_Log_Pos:196
RELAY_LOG_FILE:ヴィッキー・リレー-bin.000002
RELAY_LOG_POS:253
Relay_Master_Log_Fileます。mysql-bin.000009
Slave_IO_Running:はい
Slave_SQL_Running:はい
Replicate_Do_DB:
Replicate_Ignore_DB:
...
...
注意:Slave_IO_RunningとSlave_SQL_Runningプロセスが正常に実行する必要があり、それは、そうでない場合は、あなたの同期が失敗し、YESの状態です。どちらも、サーバーからハングアップするかどうかを判断するために使用することができます
データベースのセットアップからの主な作業が完了している、ここで、彼らはデータを挿入および変更、新しいデータベースとテーブルを作成することができ、テストが成功したかどうかを確認します
他の4つの関連するパラメータを使用することができます。
図1に示すように、マスタ側:
データベースが同期されない#
ビンログ-無視-DB = mysqlの
ビンログ-無視-DB =テスト
ビンログ-無視-DB = INFORMATION_SCHEMA
#のみデータベースを同期れ、加えて、他の非同期
ビンログ-DO-DB =ゲーム
#ログの保持時間
expire_logs_days = 10
#BINLOG書き込み制御周波数。何回実行あたりのトランザクションが書き込まれた後、
#このパラメータは、素晴らしいパフォーマンスを消費するが、MySQLの崩壊による損失を減らすことができます
sync_binlog = 5
#ログ形式、混合提案
#ステートメントは、SQL文を保持しています
#行の保存は、記録されたデータに影響を与えます
最初の二つの#混血組み合わせ
binlog_format =混合
2、スレーブ端:
#ストップマスタースレーブ同期
MySQLの>スレーブを停止します。
あなたが切断し、タイムアウトを再接続します#
= 50 MASTER_CONNECT_RETRYに対するMySQL>変更マスタ。
#マスター・スレーブの同期を有効にします
MySQLの>スレーブを起動します。
上記の接続タイムアウト、同様に使用することができ、マスターデータベースIPは、パスワード同期、同期位置を占め
プライマリサーバがコードを実行される分析:
//サーバからの次のステートメントで
$ sqlを=「ショースレーブステータス」。
$結果=するmysql_query($ sqlを、$のslave_link)。
$行= mysql_fetch_assoc($結果)。
$ Slave_IO_Running = $行[ 'Slave_IO_Running']。
$ Slave_SQL_Running = $行[ 'Slave_SQL_Running']。
//判断するための次の2つの基準は、
もし( 'はい' == $ Slave_IO_Running && 'はい' ==ます$ Slave_SQL_Running){
}他{
。$コンテンツを=「!!!($ホスト)データベースからのハングアップ」。
}
概要