うーん。ここでパントを取り、おそらく 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';
それはうまくいくかもしれません。そうでない場合は、別の回答を見てください。