zoukankan      html  css  js  c++  java
  • mysql cluster 7.2尝鲜<二>用户权限共享

    Mysql cluster用户权限共享


        我们知道,正常情况下每个mysql  server的用户权限表在数据库中是采用MYISAM存储引擎保存的,这就意味着在一个mysql节点创建的用户只能访问那一个节点,如果要访问mysql cluster中的其他的sql节点,就需要在其他sql节点都重复的创建,这就使mysql cluster中的权限管理变得非常的痛苦。现在mysql cluster 7.2提供了对分布式mysql数据库用户的支持,实现了在整个mysql cluster中共享用户权限,使我们的权限管理变得简单、高效。

    这篇文章,我们来学习下如何通过一些操作来实现mysql cluster权限共享
    首先,你需要搭建一套含有多个sql节点的mysql cluster 7.2环境,搭建个过程我这里就不重复了,7.2的搭建和7.1.10以及7.0的搭建过程一样,请参考:
    http://blog.chinaunix.net/space.php?uid=20639775&do=blog&id=201960
    http://blog.chinaunix.net/space.php?uid=20639775&do=blog&id=154598
    下图是我安装的mysql cluster 7.2环境,下面我们来开始做实验!




         在mysql cluster 7.2和以后的版本中,在mysql cluster安装好以后会有一个名字为ndb_dist_priv.sql的sql文件,你可以在share/mysql路径下找到它,但是我的确实在安装目录的share目录下。我们现在说的权限共享就要依靠那个文件来实现了,呵呵,我们的操作步骤如下:

    1、将这个文件导入到你的一个mysqld节点中,执行后会自动的创建一些存储过程和函数,
    登陆到其中一个sql节点,执行如下命令(注意执行这个文件需要root权限)
    mysql -uroot -p
    SOURCE /usr/local/mysql/share/ndb_dist_priv.sql;
    或者在shell中执行:
    mysql -uroot -p < /usr/local/mysql/share/ndb_dist_priv.sql
    我执行的时候出现如下报错:
    ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
    解决办法:set GLOBAL log_bin_trust_function_creators=on;

    通过如下命令,你可以看到刚才创建的存储过程和函数:
    mysql>  SELECT ROUTINE_NAME, ROUTINE_SCHEMA, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME LIKE 'mysql_cluster%' ORDER BY ROUTINE_TYPE;
    +---------------------------------------------+----------------+--------------+
    | 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    |
    +---------------------------------------------+----------------+--------------+


    2、在mysql终端调用名字为mysql_cluster_move_privileges的存储过程,这个存储过程的功能是备份权限表,然后将表的存储引擎转换为ndbcluster引擎。
    mysql> CALL mysql.mysql_cluster_move_privileges();
    备注:虽然调用存储过程的时候会自动的备份权限表,但是为了安全起见还是要自己手动备份下权限表,呵呵,可以使用如下语句备份:
    shell> mysqldump options -uroot mysql user db tables_priv columns_priv procs_priv > backup_file
    在调用存储过程的时候,因为有的权限表是空的,会出现如下警告No data - zero rows fetched, selected, or processed,可以不用理会。
    mysql_cluster_move_privileges存储过程运行完后,你可以使用名字为mysql_cluster_privileges_are_distributed的存储函数,来确定mysql_cluster_move_privileges运行是否成功,查看方法为:
    mysql> SELECT CONCAT( 'Conversion ',  IF(mysql_cluster_privileges_are_distributed(), 'succeeded', 'failed'),  '.') AS Result;
    +-----------------------+
    | Result |
    +-----------------------+
    | Conversion succeeded. |
    +-----------------------+
    如果返回为Conversion succeeded.则表示运行成功!可以放心的创建测试帐号了。

    3、检查调用完表结构是否发生改变,主要是包含这几个设计权限的表:user、db、tables_priv、columns_priv、procs_priv。
    mysql> show create table mysql.user;发现这几个表的引擎都变成了ndbcluster,难怪能共享权限,哈哈


    4、在其中一个sql节点上建个用户来测试吧,
    mysql> grant all on *.* to test@'192.168.3.%' identified by 'test123';
    Query OK, 0 rows affected (0.16 sec)

    mysql> flush privileges;
    Query OK, 0 rows affected (0.01 sec)

    [root@cluster5 share]# mysql -h192.168.3.225 -utest -ptest123
    mysql> quit
    [root@cluster5 share]# mysql -h192.168.3.224 -utest -ptest123
    mysql>

    Ok,测试都没有问题,从此mysql cluster的权限管理变得简单,哈哈!

    资料:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-privilege-distribution.html
          http://www.clusterdb.com/mysql-cluster/sharing-user-credentials-between-mysql-servers-with-cluster/

  • 相关阅读:
    2-SAT
    CDQ分治
    整体二分
    未完成
    [BZOJ1857][SCOI2010]传送带-[三分]
    [LCT应用]
    [胡泽聪 趣题选讲]大包子环绕宝藏-[状压dp]
    [清华集训2015 Day2]矩阵变换-[稳定婚姻模型]
    [清华集训2015 Day1]主旋律-[状压dp+容斥]
    [清华集训2015 Day1]玛里苟斯-[线性基]
  • 原文地址:https://www.cnblogs.com/feihongwuhen/p/7170034.html
Copyright © 2011-2022 走看看