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


16

背景この優れたガイドに従って、Master-Master row-based-replication(RBR)で2つのMySQL 5.1サーバーをセットアップしています。すべてのデータベースを複製し、定期的に新しいデータベースを追加します。

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

質問は:私が何を読んでから、私は考えて、私は単にいずれかを省略することによって、これを行うことができbinlog-do-dbbinlog-ignore-dbreplicate-do-db、およびreplicate-ignore-db各サーバーの構成の設定が、私は確認することはできません。データベースレベルとテーブルレベルのレプリケーションオプションの評価方法に関するMySQLのドキュメントを見ると、これを達成する方法はまったくないと思われます。

/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

1
書き込み先のマシン上にDBを作成します。
マーティン

あなたの完全な設定は何ですか?私はこれらの答えを下に試してみましたが、うまく
いき

回答:


17

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

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

どちらかのマスターにデータベースを追加し、他方に自動的に複製させることができますか?
アンドリューエンスリー

はい、彼らはそうしました..無視するものをセットアップするだけです
マイク

1
2つの質問:両方が同じことを言っていることを確認する必要があります。#1 2つのマスターの一方にデータベースを追加し、他方で自動的に作成することができます。その後、構成を変更したりサーバーを再起動したりせずに、新しいデータベースに挿入されたすべてのデータが複製されますか?#2ステートメントベースまたは行ベースのレプリケーションを使用していますか?レプリケートされたすべてのデータベースのすべての変更が必要です。事前に「use」ステートメントなしで実行されるものも。これらの設定は行ベースのレプリケーションでうまく機能しますか?
アンドリューエンスリー

3
はいはいはいはいはい:)
マイク

1
さて、昨晩これらの設定を使用してサーバーをセットアップしました。log-slave-updates設定が必要ないので、設定をスキップしました。すべてが完璧に機能します。データベースを追加および削除でき、変更が複製されます。ありがとうございました!バウンティが授与されました。
アンドリューエンスリー

4

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

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

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

@Mikeは、データベースの作成が正常に機能し、複製できると言います。私はそれをまったく疑っていません。私がしているのは、データベースがインスタンス化された後、行ベースのレプリケーションからすべてのねじれを取得できなかったMySQL(eh Oracle)のちょっとした不満です。

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

最終ノート

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


すべての情報をありがとう。ステートメントベースのレプリケーションに関する私の唯一の問題は、データベースを指定する変更(つまり、「INSERT INTO db1.table1(col1)VALUES( 'hi');」)は、データベースが現在使用中のデータベースでない限り機能しないことです。私はステートメントベースレプリケーションに切り替えて、いくつかのコード...クリーンアップする時間がかかるかもしれないと仮定
アンドリューEnsleyを

必要なコードを修正するのはそれほど難しくなかったことがわかりました。現在、ステートメントベースのレプリケーションを使用しています。アドバイスをありがとう。
アンドリューエンスリー

0

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


これは、構成ファイルのauto-increment-increment、およびauto-increment-offset設定で処理されます。:このページを参照してくださいdev.mysql.com/doc/refman/5.1/en/...
アンドリューEnsley

誤解していると思います。@Andrewは、新しいデータベースサーバーの追加ではなく、新しいデータベースの追加について話します。@Andrewが新しいデータベースサーバーを導入していた場合、3つ以上のDBサーバー間でデータを再配布するときにキーの衝突が発生する可能性があります。努力して+1してください。ただし、すべての質問を注意深く読んでください。私も同じように焼かれました。
RolandoMySQLDBA

@all:おっと。すみません。私はそれが完全に読み、ないが...代わりに脱脂しておく必要があります誓う可能性
ナンディニアナンド

-1

cmiiw私はあなたがconfを変更せずにmaster1とmaster2にデータベースを作成できるか、スレーブを停止できるはずだと思っていましたが、マスター-マスターレプリケーションが実行されていることを確認してください。どのデータベースを複製する必要があるかを定義しないため、my.cnfで定義しない場合、すべてのデータベースが複製されます。


それがまさに私がここで求めていることです。これまでのところ、これに関する決定的な答えを見つけることができません。
アンドリューエンスリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.