web-dev-qa-db-ja.com

すべてのデータベースのMySQLマスター-マスターレプリケーション。どうやって?

背景:私は2つのMySQL 5.1サーバーをマスター-マスター行ベースレプリケーション(RBR)でセットアップしています この優れたガイド 。すべてのデータベースを複製したいので、新しいデータベースを定期的に追加します。

目標:サーバーの1つにDBを追加するだけで、新しいデータベースをレプリケーションに追加できます。 なし両方のスレーブを停止し、構成ファイルを変更し、MySQLサーバーを再起動し、スレーブを再起動する必要はありません。

質問:私が読んだことから、私は考えるbinlog-do-dbを省略するだけでこれを行うことができます、binlog-ignore-dbreplicate-do-db、およびreplicate-ignore-dbの各サーバーの構成の設定ですが、確信が持てません。 MySQLのドキュメント Database- および Table- levelのレプリケーションオプションの評価方法については、これを実現する方法はまったくないと思われます。

/etc/mysql/my.cnfファイルの関連部分を以下にコピーします。私は正しい軌道に乗っていますか?私が望んでいることも可能ですか?

マスター1

[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-Host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

マスター2

[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-Host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M
16
Andrew Ensley

これは私が両方のマスターのためにそれをした方法です

log-bin = mysqld-bin
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
log-slave-updates
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
relay-log=mysqld-relay-bin
17
Mike

データベースの作成に関しては、行ベースのレプリケーションでCREATE DATABASEを使用することに関するバグレポートがまだあります。

このレポートはクローズされましたが、バグはMySQL 5.1.47で再び発生しました
このレポートはMySQL Cluster(NDBストレージエンジン)に基づいています
このレポートは、replicate-wild-ignore-tableがまだ複製されていることに基づいています。

行ベースのレプリケーションにより、バイナリログが異常な速度で増大し、バイナリログデータをスレーブのリレーログに送信するだけでネットワークトラフィックが急増する可能性があります。

@Mikeは、データベースの作成が機能し、問題なく複製できると述べています。私はそれを疑いません。私が何であるかは、データベースがインスタンス化されると、MySQL(ええOracle)が行ベースのレプリケーションからすべてのねじれを取得していないことの少しの話です。

バイナリログに行ベースのエントリが必要な場合は、row_format MIXEDに切り替えることができます。内部的には、バイナリログ形式はステートメント間で変動する傾向があり、とにかく修正されます( http://bugs.mysql.com/bug.php?id=40146 を参照)。より多くのバグレポートが行ベース( http://bugs.mysql.com/bug.php?id=39701 )からの混合およびシャイニングを使用してクローズされていますが、依然として問題が断続的に持続します。

ファイナルノート

独自の健全性のために、ステートメントベースのレプリケーションに戻して、CREATE DATABASE(SQLステートメント)を安定させ、作成されたデータベースに対する後続のSQLに対して一貫性を持たせてください。実際、最新のバグレポートでは、データベースレベルとテーブルレベルのオプションに関するドキュメントの記述に関係なく、ステートメントベースのレプリケーションを使用するのが最適であることが示されています。

4
RolandoMySQLDBA

うーん...自動インクリメントされたキーとフィールドを処理/区別する方法を理解する必要もあります。これはおもしろそうです.. http://mysql-mmm.org/

0
Nandhini Anand