GreatSQL社区

搜索

[已解决] 为什么不会自动建立InnoDB 集群服务器配置帐户呢?

1556 11 2024-5-22 11:17


背景是这样的:
我搭建了3节点的 MySQL 5.7.26 版本的MYSQL。最终目的还是希望测试下通过多节点MGR滚动升级到Mysql 8的mgr。

在看官方文档中的 [size=14.256px]InnoDB Cluster overview 是下图,看起来MySQL Shell 是单独部署的(我认为应该也是可以和mysql server部署在一起)




参考  https://greatsql.cn/docs/8.0.32- ... install-deploy.html  文档中
执行 dba.configure_instance() 命令开始检查当前实例是否满足安装MGR集群的条件,如果不满足可以直接配置成为MGR集群的一个节点:
我看到这里使用的是  root@'localhost' 连接的mysqlsh  
文档中会提示
  1. #提示当前的用户是管理员,不能直接用于MGR集群,需要新建一个账号
  2. ERROR: User 'root' can only connect from 'localhost'. New account(s) with proper source address specification to allow remote connection from all instances must be created to manage the cluster.
复制代码



由于我部署了三个节点的MySQL Server在不同的服务器上,所以我在想,如果我的MYSQL SHELL只在一个节点上,应该是没办法用root@'localhost'来连接2个其他节点。
于是我在三个节点上创建了root@'%'账号:
  1. create user root@'%' identified by "123456";
  2. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
复制代码


在第一个节点上使用MySQL Shell 连接root@'%'用户,我的过程如下:
  1. [root@localhost ~]# mysqlsh --uri root@'192.168.101.77'
  2. Please provide the password for 'root@192.168.101.77': ******
  3. Save password for 'root@192.168.101.77'? [Y]es/[N]o/Ne[v]er (default No): Y
  4. MySQL Shell 8.0.37

  5. Copyright (c) 2016, 2024, Oracle and/or its affiliates.
  6. Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
  7. Other names may be trademarks of their respective owners.

  8. Type '\help' or '\?' for help; '\quit' to exit.
  9. Creating a Classic session to 'root@192.168.101.77'
  10. Fetching schema names for auto-completion... Press ^C to stop.
  11. Your MySQL connection id is 26
  12. Server version: 5.7.26-log MySQL Community Server (GPL)
  13. No default schema selected; type \use <schema> to set one.
  14. MySQL  192.168.101.77:3306  JS >


  15. --检查实例是否满足条件(验证并配置 MySQL InnoDB Cluster 实例)
  16. MySQL  192.168.101.77:3306  JS > dba.configureInstance()
  17. WARNING: Support for AdminAPI operations in MySQL version 5.7 is deprecated and will be removed in a future release of MySQL Shell
  18. Configuring local MySQL instance listening at port 3306 for use in an InnoDB cluster...

  19. This instance reports its own address as 192.168.101.77:3306

  20. NOTE: Some configuration options need to be fixed:
  21. +-------------------+---------------+----------------+-----------------------------------------------+
  22. | Variable          | Current Value | Required Value | Note                                          |
  23. +-------------------+---------------+----------------+-----------------------------------------------+
  24. | log_slave_updates | OFF           | ON             | Update the config file and restart the server |
  25. +-------------------+---------------+----------------+-----------------------------------------------+

  26. Some variables need to be changed, but cannot be done dynamically on the server: an option file is required.

  27. Detecting the configuration file...
  28. Found configuration file at standard location: /etc/my.cnf
  29. Do you want to modify this file? [y/N]: y
  30. Do you want to perform the required configuration changes? [y/n]: y
  31. Configuring instance...
  32. The instance '192.168.101.77:3306' was configured to be used in an InnoDB cluster.
  33. NOTE: MySQL server needs to be restarted for configuration changes to take effect.


  34. [root@localhost mysql]# cat /etc/my.cnf|grep log_slave_updates
  35. log_slave_updates = ON
复制代码



我的疑问:
1、是不是我给了  root@'%'  足够的权限,所以导致使用  root@'%' 连接的mysqlsh 时执行 dba.configureInstance()  他检测到我满足了MGR的用户条件,就不会让我去创建用户?

2、如果第1点的猜测是对的话,那在三节点MGR的情况下,我不希望使用那么大权限的  root@'%' 用户,那我是不是应该在每个节点都安装一个MySQL Shell,然后在每个节点上使用  root@'localhost' 来连接  ?

3、如果我仍然想按照文档的 https://greatsql.cn/docs/8.0.32-25/8-mgr/2-mgr-install-deploy.html  中使用dba.configureInstance() 创建合适的权限用户,而并不适用root@'%'的用户,是不是我应该先去删掉  root@'%' 用户,然后再去用root@localhost 连接mysqlsh,然后使用dba.configureInstance() 去创建合适用户?


4、如果我希望按照 [size=14.256px]InnoDB Cluster overview 中介绍的,一个Mysql Shell 来搭建MGR,并且使用dba.configureInstance() 去创建合适权限的用户,那我应该如何提前创建一个用于连接三个节点MYSQL的用户呢?


5、我在没有关闭binlog的情况下,在三个节点上创建了  root@'%'  用户,我理解的,这时候三个节点都有了自己的gtid事务,我能保障三个节点上都是空的(因为是刚刚搭建的),那我是不是可以通过reset master 来清空gtid事务,然后再进行后续MGR集群搭建工作?






全部回复(11)
KAiTO 2024-5-22 11:30:36
看完了你的问题,感觉您对MySQL Shell不太了解,可以学习下。MySQL shell你可以理解为是一个工具,可以管理和操作多个数据库,并不是一对一的管理操作。

1.一般不用root作为MGR复制的账户,在MySQL shell 弹出提示时,可以选择自己创建一个新的账户,例如“repl”、“greatsql”作为复制用的账户,这点在手册shell部署MGR中也有讲到。

2.前面说了,MySQLshell 并不是一对一,它可以管理/操作多个数据库

3. 在手册中有讲到,你可以看下手册shell部署MGR

4.同3

5.如果用MySQL SHELL 会让你选择处理,看你是要clone还是怎么操作。如果是手动处理,在创建用户的时候先关闭binlog记录
起飞小宇 2024-5-22 11:59:10
KAiTO 发表于 2024-5-22 11:30
看完了你的问题,感觉您对MySQL Shell不太了解,可以学习下。MySQL shell你可以理解为是一个工具,可以管理 ...

我是知道MySQL Shell 能够管理多个节点,也知道一般不用root用户作为复制账户。


https://greatsql.cn/docs/8.0.32- ... install-deploy.html
看文档中写到:

  1. 接下来,用同样方法先用 root 账号分别登入到另外两个节点,完成节点的检查并创建最小权限级别用户(此过程略过。。。注意各节点上创建的用户名、密码都要一致),之后回到第一个节点,执行
复制代码


问题就在这边了,mysqlshell 肯定是部署在其中一个节点上吧....这里说的root,应该是指root@'localhost' 把。这种不能跨节点的去用   root@'localhost' -Spath/mysql.sock  来登陆吧。

yejr 2024-5-22 12:08:38
1. 最好是在每个节点上分别用mysql shell登入,再执行 dba.configure_instance()  完成初始化

2. 一个标准的mysql shell创建的MGR专用账户授权如下所示,你可以参考这个,对 root@% 进行重新授权

  1. greatsql> show grants for GreatSQL;
  2. +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  3. | Grants for GreatSQL@%                                                                                                                                                                                                                                                        |
  4. +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | GRANT SELECT, RELOAD, SHUTDOWN, PROCESS, FILE, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO `GreatSQL`@`%` WITH GRANT OPTION                                                                                                                        |
  6. | GRANT BACKUP_ADMIN ON *.* TO `GreatSQL`@`%`                                                                                                                                                                                                                                  |
  7. | GRANT CLONE_ADMIN,CONNECTION_ADMIN,GROUP_REPLICATION_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,ROLE_ADMIN,SYSTEM_VARIABLES_ADMIN ON *.* TO `GreatSQL`@`%` WITH GRANT OPTION                                                               |
  8. | GRANT INSERT, UPDATE, DELETE ON `mysql`.* TO `GreatSQL`@`%` WITH GRANT OPTION                                                                                                                                                                                                |
  9. | GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysql_innodb_cluster_metadata`.* TO `GreatSQL`@`%` WITH GRANT OPTION          |
  10. | GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysql_innodb_cluster_metadata_bkp`.* TO `GreatSQL`@`%` WITH GRANT OPTION      |
  11. | GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysql_innodb_cluster_metadata_previous`.* TO `GreatSQL`@`%` WITH GRANT OPTION |
  12. +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
复制代码


3. 利用mysql shell构建MGR时,在完成 dba.configureInstance() 后,再进行 addinstance() 是应该会提示是否要执行Clone复制一份数据过来覆盖

以上,在不熟练时,建议先参考我们提供的文档步骤严格执行逐步操作,熟练后再进行自定义变化
起飞小宇 2024-5-22 13:03:07
yejr 发表于 2024-5-22 12:08
1. 最好是在每个节点上分别用mysql shell登入,再执行 dba.configure_instance()  完成初始化

2. 一个标准 ...

我这边的版本是MYSQL 5.7.26 所以,用不了clone plugin...clone plugin 要等到8.0.17吧。
reddey 2024-5-22 13:12:43
本帖最后由 15167759230 于 2024-5-22 13:17 编辑
起飞小宇 发表于 2024-5-22 13:03
我这边的版本是MYSQL 5.7.26 所以,用不了clone plugin...clone plugin 要等到8.0.17吧。 ...

最好用8.0搭建MGR集群,如果用MYSHELL建立MGR集群,每个节点都用MYSHELL建立MGR专用用户,MGR用户不建议使用root。个人建议用MYSHELL来创建MGR集群,用这个管理集群比较方便
一个学艺不精的国产数据库爱好者
起飞小宇 2024-5-22 20:06:07
15167759230 发表于 2024-5-22 13:12
最好用8.0搭建MGR集群,如果用MYSHELL建立MGR集群,每个节点都用MYSHELL建立MGR专用用户,MGR用户不建议使 ...

帖子开篇说了:
我搭建了3节点的 MySQL 5.7.26 版本的MYSQL。最终目的还是希望测试下通过多节点MGR滚动升级到Mysql 8的mgr。
起飞小宇 2024-5-22 20:14:31
目前就是还有一个问题了:

MySQL 5.7.26 没有clone plugin,
我在没有关闭binlog的情况下,在三个节点上创建了  root@'%'  用户,我理解的,这时候三个节点都有了自己的gtid事务,我能保障三个节点上都是空的(第一个节点有业务数据),那我是不是可以通过reset master 来清空(第二和第三节点的)gtid事务,然后再进行后续MGR集群搭建工作?
起飞小宇 2024-5-22 20:18:46
起飞小宇 发表于 2024-5-22 20:14
目前就是还有一个问题了:

MySQL 5.7.26 没有clone plugin,

想了一下这个过程可能需要更多步骤:

1、不开binlog ,删除  2 和  3 节点的 root@'%'
2、在2和3节点reset master
3、备份1节点的业务数据,恢复到2和3节点
4、使用mysql shell 创建集群
reddey 2024-5-22 21:01:42
起飞小宇 发表于 2024-5-22 20:18
想了一下这个过程可能需要更多步骤:

1、不开binlog ,删除  2 和  3 节点的 root@'%'

关于滚动升级,记得文档讲的步骤是,先升级从节点,增加新节点后,立即下线一个旧节点,停掉原主节点,切换到新节点,最后再升级主节点到高版本
一个学艺不精的国产数据库爱好者
12下一页
起飞小宇

9

主题

0

博客

42

贡献

注册会员

Rank: 2

积分
72

助人为乐(铜)

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-11-21 20:28 , Processed in 0.027789 second(s), 23 queries , Redis On.
快速回复 返回顶部 返回列表