MySQL Shell 是 MySQL 的一个高级客户端和代码编辑器,是第二代 MySQL 客户端。第一代 MySQL 客户端即我们常用的 MySQL 。
一、引言
1.1 什么是MySQL Shell ?
MySQL Shell 是 MySQL 的一个高级客户端和代码编辑器,是第二代 MySQL 客户端。第一代 MySQL 客户端即我们常用的 MySQL 。除了提供类似于 MySQL 的 SQL 功能外,MySQL Shell 还提供 JavaScript 和 Python 脚本功能,并包括与 MySQL 一起使用的 API 。MySQL Shell 除了可以对数据库里的数据进行操作,还可以对数据库进行管理,特别是对MGR的支持,使用MySQL Shell 可以非常方便的对MGR进行搭建、管理、配置等
1.2 什么是MySQL Shell for GreatSQL ?
MySQL Shell for GreatSQL 的出现是因为在 GreatSQL 8.0.25-16 版本的时候引入了MGR仲裁节点(投票节点)的新特性,MySQL提供的MySQL Shell无法识别该特性,因此我们提供了 MySQL Shell for GreatSQL 版本,以下就称为MySQL Shell for GreatSQL
但是!因为 JS 库中含有商业库,所以GreatSQL社区在编译的时候就没有加上 JS 的脚本功能。
大家使用的时候不要一直输入\js说怎么切换不过去了 :)
不过Python模式的语法和JavaScript模式的语法是大同小异的,举个例子:
JavaScript 语法 |
Python 语法 |
var c=dba.getCluster() |
c=dba.get_cluster() |
c.status() |
c.statsu() |
c.setPrimaryInstance() |
c.set_primary_instance() |
不过就是变量名命名风格些许不同而已,本质上是没有区别的。本文也将使用GreatSQL Shell-8.0.25-16中 Python 模式来带你玩转 MySQL Shell for GreatSQL
二、安装与配置
2.1 安装 MySQL Shell for GreatSQL
首先我们先下载MySQL Shell for GreatSQL,下载地址在GreatSQL的gitee仓库,和我们的GreatSQL 8.0.32-24新版本放在一起:➥https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-24进入下载文件列表最下方就是我们的MySQL Shell for GreatSQL,大家按机器和架构下载对应版本
本文机器环境是CentOS7.9-x86-64所以下载第一个即可
$ cat /etc/system-release
CentOS Linux release 7.9.2009 (Core)
$ uname -a
Linux hy 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
下载完成后解压:
$ tar -xvf greatsql-shell-8.0.25-16-Linux-glibc2.17-x86_64.tar.xz
接着把 bin 目录添加到环境变量中:
$ echo "export PATH=$PATH:/usr/local/greatsql-shell-8.0.25-16-Linux-glibc2.17-x86_64/bin" >> /root/.bash_profile
MySQL Shell for GreatSQL 需要 Python 3.6 的环境,如果没有环境的话,需要安装yum install python3 -y
$ python3 -V
Python 3.6.8
一切准备就绪!就可以开始使用 MySQL Shell for GreatSQL 了
$ mysqlsh
2.2 界面特征
MySQL Shell for GreatSQL 的界面如下:
细心的同学就会发现,有一个WARNING,没关系我们根据提示看下 mysqlsh.log
$ cat /root/.mysqlsh/mysqlsh.log
在日志中发现这样一段提示,意思就是少了一个 Python 的模块 certifi
ModuleNotFoundError: No module named 'certifi'
解决方法就是用pip来安装下这个缺失的模块即可:
$ pip3.6 install --user certifi
再次进入MySQL Shell for GreatSQL$ mysqlsh
现在就没有讨厌的 WARNING 了。
MySQL Shell for GreatSQL 同时也是支持定义自己的提示符的,在 promt 目录下,有许多的模板可供使用
$ ls /usr/local/GreatSQLshell/greatsql-shell-8.0.25-16-Linux-glibc2.17-x86_64/share/mysqlsh/prompt
prompt_16.json prompt_256.json prompt_256pl.json prompt_dbl_256.json prompt_dbl_256pl.json README.prompt
prompt_256inv.json prompt_256pl+aw.json prompt_classic.json prompt_dbl_256pl+aw.json prompt_nocolor.json
使用方式如下,例如我想换成这个模板prompt_16.json
$ export MYSQLSH_PROMPT_THEME=/usr/local/GreatSQLshell/greatsql-shell-8.0.25-16-Linux-glibc2.17-x86_64/share/mysqlsh/prompt/prompt_16.json
再进入 MySQL Shell for GreatSQL 看看已经变了个样子
当然也可以自行修改.json文件,修改成你喜欢的自定义配置,这都是没问题的。
现在的 MySQL Shell for GreatSQL 是没法使用的,因为我们是用$ mysqlsh命令直接登录到 Shell 环境,由于未携带登录验证信息(user、host、password)等处于未连接服务状态,在内部使用\c\h等简易命令外,执行其它获取服务器信息的命令会报Not Connected.
三、基本操作和使用
3.1 连接数据库实例
MySQL Shell for GreatSQL 提供了多种连接实例登录方式,可以根据自己喜好选择
$ mysqlsh --help
...上面省略部分...
Usage examples:
$ mysqlsh root@localhost/schema
$ mysqlsh mysqlx://root@some.server:3307/world_x
$ mysqlsh --uri root@localhost --py -f sample.py sample param
$ mysqlsh root@targethost:33070 -s world_x -f sample.js
$ mysqlsh -- util check-for-server-upgrade root@localhost --output-format=JSON
$ mysqlsh mysqlx://user@host/db --import ~/products.json shop
这里选择MySQL Shell for GreatSQL sock的方式连接数据库实例
$ mysqlsh -S/data/GreatSQL/mgr01/mysql.sock root@localhost
用sock方式连接数据库实例会让输入密码,然后会问是否保存密码
Please provide the password for 'root@localhost': //这里输入密码
Save password for 'root@localhost'? [Y]es/[N]o/Ne[v]er (default No): y //是否保存密码
一旦存储了服务器 URL 的密码,每当 MySQL Shell for GreatSQL 打开会话时,它都会从已配置的Secret Store Helper中检索密码,登录到服务器,而无需交互输入密码。MySQL Shell for GreatSQL 执行的脚本也是如此。如果未配置任何 Secret Store Helper,则以交互方式请求密码。
注意!MySQL Shell for GreatSQL 仅通过 Secret Store 保留服务器 URL 和密码,而不自行保留密码。
密码只有在 手动输入 时才会保留。如果在运行 MySQL Shell for GreatSQL时使用类似于服务器 URI 的连接字符串或在命令行中提供了密码,则该密码不会保留。
连接到 MySQL Shell for GreatSQL 所接受的最大密码长度为128个字符。
3.2 基本命令
MySQL Shell for GreatSQL 的由于命令需要独立于执行模式而可用,因此它们以转义序列\字符开头,简单列举几个:
命令 |
别名或缩写 |
描述 |
\help |
\h or ? |
帮助 |
\quit |
\q or \exit |
退出 |
\status |
\s |
显示当前状态 |
\js |
切换为 JavaScript 语言模式 |
|
\py |
切换为 Python 语言模式 |
|
\sql |
切换为 SQL 语言模式 |
|
\history |
查看和编辑命令行历史记录 |
|
\connet |
\c |
连接到 MySQL 服务器 |
\reconnect |
重新连接到 MySQL 服务器 |
3.3 基本用法
Ⅰ、切换SQL模式\sql,在 SQL 模式下按 Tab键 可以实现自动补全哦!
GreatSQL Py > \sql
Switching to SQL mode... Commands end with ;
Ⅱ、可在任何语言状态执行操作系统命令\system
GreatSQL Py > \system ls /usr/local
greatsql-shell-8.0.25-16-Linux-glibc2.17-x86_64.tar.xz GreatSQL8.0.32
Ⅲ、查看历史命令\history,选项history.maxSize为 MySQL Shell for GreatSQL 的最大存储条数,默认为 1000 条轮替。
GreatSQL Py > \history
1 \system ls /usr/local
2 /history
3 history
4 help()
5 /hasattr()
默认历史只能保存当前会话命令,全局不可见,退出后自动删除。可通过启用history.autoSave选项保存会话之间的历史记录。
3.4 全局对象
MySQL Shell for GreatSQL 启动时,可以使用以下模块和对象
- dba:用于InnoDB Cluster、ReplicaSet 管理;
- mysql:支持使用经典 MySQL 协议连接到 MySQL 服务器,允许执行 SQL;
- mysqlx:用于通过 MySQL X DevAPI 处理 X 协议会话;
- os:允许访问允许与操作系统交互的功能;
- session:代表当前打开的MySQL会话;
- shell:允许访问通用功能和属性;
- sys:允许访问系统特定的参数;
- util:对诸如升级检查器和JSON导入之类的各种工具进行了分组;
四、备份和恢复
MySQL Shell for GreatSQL有Dump & Load工具,比 mydumper 更快的逻辑备份工具,与 myloader 不一样的是,MySQL Shell for GreatSQL Load 是通过LOAD DATA LOCAL INFILE命令来导入数据的。而 LOAD DATA 操作,按照官方文档的说法,比 INSERT 操作快 20 倍。该序列工具包括:
- util.dump_instance():备份整个数据库实例,包括用户
- util.dump_schemas():备份指定数据库 schema
- util.dump_tables():备份指定的表或视图
- util.load_dump():恢复备份
我们来动手操作下,准备一个表空间有 724MB 的表内含七百万条数据
greatsql> select count(*) from student1;
+----------+
| count(*) |
+----------+
| 7000000 |
+----------+
1 row in set (2.62 sec)
greatsql> system ls -l /data/GreatSQL/mgr01/test
-rw-r----- 1 mysql mysql 759169024 7月 25 12:15 student1.ibd
4.1 备份整个数据库实例,包括用户
dump_instance(outputUrl[, options]),备份整个数据库实例,包括用户
- outputUrl是备份目录,不能为空。
- options是可指定的选项
options 有什么选项可以使用\? dump_instance查看
GreatSQL Py > \? dump_instance
The following options are supported://找到这句下面就是
使用起来也是有限制的,官方
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经