本文整理自网络,侵删。
目录
- 01 ReplicaSet的架构
- 02 MySQL Shell的介绍以及安装
- 03 MySQL Shell连接数据库并创建ReplicaSet
01 ReplicaSet的架构
前面的文章中,我们说了ReplicaSet的基本概念和限制以及部署前的基本知识。今天我们来看InnoDB ReplicaSet部署过程中的两个重要组件之一的MySQL Shell,为了更好的理解MySQL Shell,画了一张图,如下:
通过上面的图,不难看出,MySQL Shell是运维人员管理底层MySQL节点的入口,也就是DBA执行管理命令的地方,而MySQL Router是应用程序连接的入口,它的存在,让底层的架构对应用程序透明,应用程序只需要连接MySQL Router就可以和底层的数据库打交道,而数据库的主从架构,都是记录在MySQL Router的原信息里面的。
今天,我们主要来看MySQL Shell的搭建过程。
02 MySQL Shell的介绍以及安装
MySQL Shel是一个客户端工具,用于管理Innodb Cluster或者Innodb ReplicaSet,可以简单理解成ReplicaSet的一个入口。
它的安装过程比较简单:在MySQL官网下载对应版本的MySQL Shell即可。地址如下:
https://downloads.mysql.com/archives/shell/
这里使用8.0.20版本
下载完毕之后,在Linux服务器进行解压,然后就可以通过这个MySQL Shell来连接线上的MySQL服务了。
我的线上MySQL地址分别是:
192.168.1.10 5607
192.168.1.20 5607
可以直接通过下面的命令来连接MySQL服务:
/usr/local/mysql-shell-8.0.20/bin/mysqlsh '$user'@'$host':$port --password=$pass
成功连接之后的日志如下:
MySQL Shell 8.0.20 Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type '\help' or '\?' for help; '\quit' to exit. WARNING: Using a password on the command line interface can be insecure. Creating a session to 'superdba@10.185.13.195:5607' Fetching schema names for autocompletion... Press ^C to stop. Your MySQL connection id is 831 Server version: 8.0.19 MySQL Community Server - GPL No default schema selected; type \use <schema> to set one. MySQL 192.168.1.10:5607 ssl JS > MySQL 192.168.1.10:5607 ssl JS > MySQL 192.168.1.10:5607 ssl JS > MySQL 192.168.1.10:5607 ssl JS >
03 MySQL Shell连接数据库并创建ReplicaSet
上面已经介绍了使用MySQL Shell连接数据库的方法了,现在我们来看利用MySQL Shell来创建ReplicaSet的方法:
1、首先使用dba.configureReplicaSetInstance命令来配置副本集,并创建副本集的管理员。
MySQL 192.168.1.10:5607 ssl JS > dba.configureReplicaSetInstance('root@192.168.1.10:5607',{clusterAdmin:"'rsadmin'@'%'"}) Configuring MySQL instance at 192.168.1.10:5607 for use in an InnoDB ReplicaSet... This instance reports its own address as 192.168.1.10:5607 WARNING: User 'rsadmin'@'%' already exists and will not be created. However, it is missing privileges. The account 'rsadmin'@'%' is missing privileges required to manage an InnoDB cluster: GRANT REPLICATION_APPLIER ON *.* TO 'rsadmin'@'%' WITH GRANT OPTION; Dba.configureReplicaSetInstance: The account 'root'@'192.168.1.10' is missing privileges required to manage an InnoDB cluster. (RuntimeError)
可以看到,上面的命令中,我们配置了副本集的一个实例:192.168.1.10:5607,并创建了一个管理员账号rsadmin,同时这个管理员拥有clusterAdmin的权限。
返回的结果中,有一个报错信息,它提示我们登陆的root账号少了replication_applier的权限,因此无法使用root账号对rsadmin账号授权。我们给root账号补充replication_applier权限之后,重新执行上面的命令,结果如下:
MySQL 192.168.1.10:5607 ssl JS > dba.configureReplicaSetInstance('root@192.168.1.10:5607',{clusterAdmin:"'rsadmin'@'%'"}) Configuring MySQL instance at 192.168.1.10:5607 for use in an InnoDB ReplicaSet... This instance reports its own address as 192.168.1.10:5607 User 'rsadmin'@'%' already exists and will not be created. The instance '192.168.1.10:5607' is valid to be used in an InnoDB ReplicaSet. The instance '192.168.1.10:5607' is already ready to be used in an InnoDB ReplicaSet.
这次执行成功了。
我们登陆到底层的192.168.1.10上,查看rsadmin账号,可以发现,账号已经生成了,信息如下:
select user,host,concat(user,"@'",host,"'"),authentication_string from mysql.user where user like "%%rsadmin"; +---------+------+----------------------------+-------------------------------------------+ | user | host | concat(user,"@'",host,"'") | authentication_string | +---------+------+----------------------------+-------------------------------------------+ | rsadmin | % | rsadmin@'%' | *2090992BE9B9B27D89906C6CB13A8512DF49E439 | +---------+------+----------------------------+-------------------------------------------+ 1 row in set (0.00 sec) show grants for rsadmin@'%'; +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for rsadmin@% | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, RELOAD, SHUTDOWN, PROCESS, FILE, SUPER, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO `rsadmin`@`%` WITH GRANT OPTION | | GRANT BACKUP_ADMIN,CLONE_ADMIN,PERSIST_RO_VARIABLES_ADMIN,SYSTEM_VARIABLES_ADMIN ON *.* TO `rsadmin`@`%` WITH GRANT OPTION | | GRANT INSERT, UPDATE, DELETE ON `mysql`.* TO `rsadmin`@`%` WITH GRANT OPTION | | 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 `rsadmin`@`%` WITH GRANT OPTION | | 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 `rsadmin`@`%` WITH GRANT OPTION | | 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 `rsadmin`@`%` WITH GRANT OPTION | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 6 rows in set (0.00 sec)
注意,如果我们加入的副本集实例是当前连接的实例,那么也可以使用简单的写法:
dba.configureReplicaSetInstance('',{clusterAdmin:"'rsadmin'@'%'"})
2、使用dba.createReplicaSet命令创建副本集,并将结果保存在一个变量里面,如下:
MySQL 192.168.1.10:5607 ssl JS > var rs = dba.createReplicaSet("yeyz_test") A new replicaset with instance '192.168.1.10:5607' will be created. * Checking MySQL instance at 192.168.1.10:5607 This instance reports its own address as 192.168.1.10:5607 192.168.1.10:5607: Instance configuration is suitable. * Updating metadata... ReplicaSet object successfully created for 192.168.1.10:5607. Use rs.addInstance() to add more asynchronously replicated instances to this replicaset and rs.status() to check its status.
可以看到,我们创建了一个yeyz_test的副本集,并将结果保存在变量rs当中。
3、使用rs.status()查看当前的副本集成员
MySQL 192.168.1.10:5607 ssl JS > rs.status() { "replicaSet": { "name": "yeyz_test", "primary": "192.168.1.10:5607", "status": "AVAILABLE", "statusText": "All instances available.", "topology": { "192.168.1.10:5607": { "address": "192.168.1.10:5607", "instanceRole": "PRIMARY", "mode": "R/W", "status": "ONLINE" } }, "type": "ASYNC" } }
这里面,可以看到,当前ReplicaSet里面已经有192.168.1.10:5607这个实例的,他的状态是available,他的角色是Primary。
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL Shell的介绍以及安装
相关推荐
评论
管理员已关闭评论功能...