在使用了多个SQL节点之后,默认情况下,在一个节点中增加的用户,在其它节点上并不是可见的。MySQL 集群提供了让用户和权限在整个集群中有效的途径。
(1)执行MySQL集群提供的SQL脚本。
MySQL集群在安装目录提供了ndb_dist_priv.sql这个脚本,用于为集群提供分布式权限。
在某一个SQL节点61的MySQL服务中执行这个脚本,这个脚本将用户与权限相关的数据表比如user表等的存储引擎从MyISAM修改为NDBCluster。
mysql -uroot -p < /usr/share/mysql/ndb_dist_priv.sql
执行完毕后,可以看到以下跟分布式权限有关的存储过程和函数:
mysql> select routine_name,routine_schema,routine_type from information_schema.routines where routine_name like ‘mysql_cluster%‘ order by routine_type asc;
+---------------------------------------------+----------------+--------------+
| routine_name | routine_schema | routine_type |
+---------------------------------------------+----------------+--------------+
| mysql_cluster_privileges_are_distributed | mysql | FUNCTION |
| mysql_cluster_backup_privileges | mysql | PROCEDURE |
| mysql_cluster_move_grant_tables | mysql | PROCEDURE |
| mysql_cluster_move_privileges | mysql | PROCEDURE |
| mysql_cluster_restore_local_privileges | mysql | PROCEDURE |
| mysql_cluster_restore_privileges | mysql | PROCEDURE |
| mysql_cluster_restore_privileges_from_local | mysql | PROCEDURE |
+---------------------------------------------+----------------+--------------+
7 rows in set (0.08 sec)
执行以下函数查询是否已经部署了分布式权限。在刚刚执行上述脚本后,结果是FALSE。
mysql> select mysql_cluster_privileges_are_distributed();
+--------------------------------------------+
| mysql_cluster_privileges_are_distributed() |
+--------------------------------------------+
| 0 |
+--------------------------------------------+
1 row in set (0.00 sec)
(2)执行有关存储过程。
需要执行MySQL Cluster提供的以下存储过程,才能实现分布式权限。
mysql> call mysql_cluster_move_privileges();
Query OK, 0 rows affected (4.23 sec)
再次查询是否部署了分布式权限,结果为TRUE。
mysql> select mysql_cluster_privileges_are_distributed();
+--------------------------------------------+
| mysql_cluster_privileges_are_distributed() |
+--------------------------------------------+
| 1 |
+--------------------------------------------+
1 row in set (0.00 sec)
(3)重新启动其它SQL节点的MySQL服务。
在重新启动之后,就可以看到在节点61上的MySQL服务中的user表的存储引擎已经修改为NDBCluster了。同时可以看到user表中已经有了节点61中的test用户了,而且可以使用该用户进行登录。由于用户与权限相关的数据表的存储引擎为NDBCluster,在之后对用户与权限进行的修改,将在整个集群中有效。
至此,MySQL的分布式权限已经部署完毕了。