zz主从连接,网上的教程有很多,但只告诉你怎么做,却没告诉你怎么来的,本文对建立之中大家可能有问题的一些内容进行解答:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
这句代码应该是网上流传最多的,其中的解释却很少。本文对其进行解释,如果你需要对某一对象授予权限,那么你需要做的是采用GRANT,而在建立主从建构上来说,官方说明是采用GRANT REPLICATION SLAVE ON *.*,这一段使我们不需要改的,而对于'slave'@'%'则是本文需要重点说明的。
slave'@'%'中的slave代表的是一种角色,其有区别与用户,用户比如我们常见的root用户其在建立时就已经有许多权限,而角色对象,你可以看成是一种用于整体赋给用户的权限集,比如我们用slave角色来完成主从的连接,通过给它一定的权限与验证方式,来使得主数据库与从数据库建立连接。这里验证方式之后再说,对于‘%’它其实是本机ip的省略,当然如果不在一台主机建立主从连接时,我们也需要对其以ip的方式进行扩充。比如官方文档给出的例子:
mysql> CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
而ON子句区分语句是否授予特权或角色:使用ON,该语句授予特权。如果没有ON,则该语句授予角色。
而identified by表示所授予的权限具体的例子,这里引用文档:
假设您最初需要一个开发人员帐户、两个需要只读访问权限的用户帐户和一个需要读/写访问权限的用户帐户。用于 CREATE USER创建帐户:
CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass'; CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass'; CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass'; CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';
当然也可以用授予权限的方式来进行。
文末赋予文档连接:
https://dev.mysql.com/doc/refman/8.0/en/sql-data-definition-statements.html