如何在mysql中为数据库授予复制权限?

5
我需要为每个数据库创建一个具有复制从服务器权限的用户。
当我使用命令时:
GRANT replication slave ON `mydb`.* TO 'user';

错误信息显示:

DB GRANT 和 GLOBAL PRIVILEGES 的使用不正确。

是否有一种方法只为一个数据库授予复制权限?

这可能是一个重复的问题。请在此处查看答案:https://dev59.com/qmYr5IYBdhLWcg3wmLNk - oozmac
1
我认为这不是一个重复的问题。在你的回答中,没有解决我的问题。 - Joel Ollé Ripoll
3个回答

5

您无法将GRANT REPLICATION SLAVE限制在一个数据库中,因此必须使用:

GRANT REPLICATION SLAVE ON *.* TO 'user'@'host'

但是您可以限制复制本身:

  • 将以下命令放入配置文件(my.ini)中的从服务器上:

--replicate-do-db=db_name

编辑:

由于后者更适用于从服务器,因此很容易混淆。因此,您将要在主服务器上执行它,使用以下任一选项:
[mysqld]

binlog-do-db=replicated_db_name

对于您想要复制的数据库:

或者

binlog-ignore-db=ignored_db_name

对于您不想被复制的数据库:

  • 对于这两个命令:要指定多个数据库,请多次使用此选项。

警告:

使用最后两个命令排除服务器上的数据库,会导致任何与它们有关的语句都不包含在二进制日志文件中,这将影响备份过程。


另一种不太可行的选择是在从服务器上使用replicate-ignore-db=dbname来排除某些数据库,它可以接受多个数据库名称,但任何能够访问从服务器配置文件的人都可以更改它。 - user10089632

0
你应该像下面展示的那样,在所有数据库的所有表上授予REPLICATION SLAVE权限:*.*
GRANT REPLICATION SLAVE ON *.* TO 'user';

实际上,文档 下面说到:
因为任何静态全局权限都被视为对所有数据库的权限,...
而且,你不能仅在一个表(例如person)上给予REPLICATION SLAVE权限,而是在所有数据库(*.person)上给予,因为会出现错误:
GRANT REPLICATION SLAVE ON *.person TO 'user';

所以,我们需要在所有数据库的所有表上授予类似于REPLICATION SLAVE、PROCESS、FILE等的全局权限,如下所示static global privilege,否则会出现错误:*.*
GRANT [STATIC_GLOBAL_PRIVILEGES] ON *.* TO <USER>;

-2

你可以尝试这个。

$ mysql -h 10.20.30.1 -u user -p
mysql> CREATE USER 'repl_slave'@'10.20.30.%' IDENTIFIED BY 'Passw0rdf0rRepl';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_slave'@'10.20.30.1';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接