背景:私は2つのMySQL 5.1サーバーをマスター-マスター行ベースレプリケーション(RBR)でセットアップしています この優れたガイド 。すべてのデータベースを複製したいので、新しいデータベースを定期的に追加します。
目標:サーバーの1つにDBを追加するだけで、新しいデータベースをレプリケーションに追加できます。 なし両方のスレーブを停止し、構成ファイルを変更し、MySQLサーバーを再起動し、スレーブを再起動する必要はありません。
質問:私が読んだことから、私は考えるbinlog-do-db
を省略するだけでこれを行うことができます、binlog-ignore-db
、replicate-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
これは私が両方のマスターのためにそれをした方法です
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
データベースの作成に関しては、行ベースのレプリケーションで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 )からの混合およびシャイニングを使用してクローズされていますが、依然として問題が断続的に持続します。
ファイナルノート
うーん...自動インクリメントされたキーとフィールドを処理/区別する方法を理解する必要もあります。これはおもしろそうです.. http://mysql-mmm.org/