5

マスター/スレーブ レプリケーションでは、mysql DB を使用してスレーブ サーバーにいくつかの DB をレプリケートしています。マスターでユーザーを作成しましたが、残念ながらスレーブ サーバーでは複製されません。

Replicate_Do_DB: app1、app2、mysql

ユーザー作成コマンド:

GRANT SELECT on *.* to 'user1'@'localhost' identified by 'user1';

GRANT SELECT on *.* to 'user1'@'%' identified by 'user1';

GRANT SELECT on *.* to 'user1'@'10.10.10.10' identified by 'user1';

マスターでユーザー アカウントが正常に作成されましたが、スレーブで複製されませんでした。

mysql db が複製されている場合、なぜこれが発生するのですか?

4

2 に答える 2

9

うーん。ここでパントを取り、おそらく ROW BASED レプリケーションではなく STATEMENT BASED レプリケーションを使用していて、MySQL のバージョンが 5.1 以降であるとします...

スレーブで次の SQL を実行すると、実行しているタイプを確認できます。

select variable_value
from information_schema.session_variables
where upper(variable_name) = 'BINLOG_FORMAT';

mysqlスキーマがレプリケーションに含まれている場合にのみ、権限がレプリケートされることを正しく識別しました

しかし、「ガッチャ!」これが--replicate-do-dbオプションです。ステートメント ベースのレプリケーションを使用している場合は、次の理由から、許可を実行する前に、mysql データベースをデフォルト データベースとして指定する必要があります。

このオプションの効果は、ステートメント ベースまたは行ベースのどちらのレプリケーションが使用されているかによって異なります。

ステートメントベースのレプリケーション。デフォルトのデータベース (つまり、USE によって選択されたデータベース) が db_name であるステートメントにレプリケーションを制限するように、スレーブ SQL スレッドに指示します。

つまり、実行してみてください:

USE MYSQL;

GRANT SELECT on *.* to 'user1'@'localhost' identified by 'user1';

GRANT SELECT on *.* to 'user1'@'%' identified by 'user1';

GRANT SELECT on *.* to 'user1'@'10.10.10.10' identified by 'user1';

それはうまくいくかもしれません。そうでない場合は、別の回答を見てください。

于 2012-08-23T08:45:11.063 に答える