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

唔。我要在这里赌一把,说您可能使用的是基于 STATEMENT 的复制,而不是基于 ROW 的复制,并且您的 MySQL 版本是 5.1 或更高版本......

您可以通过在从属设备上运行以下 SQL 来判断您正在运行哪种类型:

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

正如您正确识别的那样,只有在复制中包含 mysql 模式时才会复制权限

然而,“明白了!” 这是--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';

它可能会起作用。如果没有,请查看另一个答案!

于 2012-08-23T08:45:11.063 回答
4

在 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';
于 2017-07-25T12:57:42.207 回答