复制中的mysql DB,但在master上创建的用户不在从属服务器上复制

时间:2012-08-23 06:37:56

标签: mysql

在主从复制中,我们使用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处于复制状态,为什么会发生这种情况?

2 个答案:

答案 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';