在主从复制中,我们使用mysql DB复制从属服务器上的几个DB。 我在master上创建了一个用户,遗憾的是它没有在slave服务器上复制。
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处于复制状态,为什么会发生这种情况?
答案 0 :(得分:8)
嗯。我要在这里采取行动并说你可能正在使用基于STATEMENT的复制而不是基于ROW的复制,并且你的MySQL版本是5.1或更高......
您可以通过在奴隶上运行以下SQL来确定您正在运行的类型:
select variable_value
from information_schema.session_variables
where upper(variable_name) = 'BINLOG_FORMAT';
正确识别的权限只有在mysql schema is included in replication
时才会被复制然而,“陷阱!”这是--replicate-do-db选项。如果您使用基于语句的复制,则需要在运行授权之前将mysql数据库指定为默认数据库:
此选项的效果取决于基于语句还是基于语句 基于行的复制正在使用中。
基于语句的复制。告诉奴隶SQL线程限制 复制到默认数据库(即一个数据库)的语句 由USE选择)是db_name。
那说试试:
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';
它可能会奏效。如果没有,那么看另一个答案!
答案 1 :(得分:2)
在MySQL 5.7中,如果您从Tom Mac的answer执行查询,您将收到以下错误:
错误3167(HY000):'INFORMATION_SCHEMA.SESSION_VARIABLES'功能被禁用;请参阅“show_compatibility_56”
的文档
您应该查询performance_schema
。运行以下命令:
SELECT variable_value FROM performance_schema.session_variables WHERE upper(variable_name) = 'BINLOG_FORMAT';