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

y4ekin9u  于 2023-11-16  发布在  Mysql
关注(0)|答案(3)|浏览(201)

我需要为每个数据库创建一个具有REPLICATION SLAVE权限的用户。
当我使用命令时:

GRANT REPLICATION SLAVE ON `mydb`.* TO 'user';

字符串
错误显示:
错误使用DB GRANT和GLOBAL PRIVILEGES
是否有一种方法可以只将REPLICATION SLAVE权限授予数据库?

wqsoz72f

wqsoz72f1#

不能将GRANT REPLICATION SLAVE限制为仅一个数据库,因此必须使用

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

但您可以限制复制本身:

  • 在master slave上的配置文件(my.ini)中放入以下命令:

--replicate-do-db=db_name

编辑:

因为后者是为从服务器而设的,所以它很容易被搞砸。所以你想在主服务器上执行它,使用以下两种方法之一:
[mysqld]

binlog-do-db=replicated_db_name

对于要复制的数据库,

binlog-ignore-db=ignored_db_name

对于您不希望复制的数据库,

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

警告:

使用最后两个命令排除服务器上的数据库,其效果是二进制日志文件中不会包含任何有关这些数据库的语句,这将危及备份过程。

lnvxswe2

lnvxswe22#

您应该对所有数据库(*.*)中的所有表授予REPLICATION SLAVE,如下所示:

GRANT REPLICATION SLAVE ON *.* TO 'user';

字符串
实际上,医生在下面说:
因为任何静态全局特权都被认为是所有数据库的特权,...
而且,您不能给予REPLICATION SLAVE特权,因为存在错误,如下所示,在所有数据库(*.person)中仅对一个表(例如person)授予REPLICATION SLAVE特权:

GRANT REPLICATION SLAVE ON *.person TO 'user';


因此,我们需要对所有数据库(*.*)中的所有表授予静态全局权限,如REPLICATION SLAVE,PROCESS,FILE等,如下图所示,否则会出现错误:

GRANT [STATIC_GLOBAL_PRIVILEGES] ON *.* TO <USER>;

uyhoqukh

uyhoqukh3#

你可以试试这个

$ 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';

字符串

相关问题