MySQL Shell 中的提示符的样式和格式可以根据使用者的需求进行定制。我们可以配置提示符以显示有关数据库连接和使用的模式的不同或简化信息。本文将展示如何添加视觉提示,让您知道何时连接到生产数据库。

设置步骤
既然您正在阅读关于自定义 MySQL Shell 的内容,您应该已经安装了它。如果没有,请在继续之前下载并安装它。

提示主题文件
自定义 MySQL Shell 提示符的最简单方法是复制现有的提示主题文件。MySQL Shell 包含了几个提示文件。这些文件位于以下目录:
Windows - %programfiles%\MySQL\MySQL Shell 8.0\share\mysqlsh\prompt\
MacOs - /usr/local/mysql-shell/share/mysqlsh/prompt/
Linux - /usr/share/mysqlsh/prompt/
这些文件夹中的文件列表将类似于:
README.prompt
prompt_16.json
prompt_256.json
prompt_256inv.json
prompt_256pl+aw.json
prompt_256pl.json
prompt_classic.json
prompt_dbl_256.json
prompt_dbl_256pl+aw.json
prompt_dbl_256pl.json
prompt_nocolor.json
要了解不同文件包含的信息,请查看 README.prompt。

我们将要用作基础的提示文件复制到以下位置:
Linux and OS X:
Cp /usr/share/mysqlsh/prompt/prompt_256.json ~/.mysqlsh/prompt.json #注意目录文件名一定要是prompt.json
Windows - %AppData%\Roaming\MySQL\mysqlsh\
MacOS 和 Linux - ~/.mysqlsh/
我将在此演示中使用 cat ~/.mysqlsh/prompt.json,因为我喜欢 Powerline 字体的美学。以下是默认 JSON 的外观。

如果 MySQL Shell 已经打开,我们必须重新启动它才能添加主题。当我们使用这个文件启动 MySQL Shell 时,我们将看到以下内容:

以上提示符由六个部分组成:
状态:系统是否为生产系统,连接是否已丢失。
MySQL:提醒您正在使用 MySQL 数据库。
连接:您连接的主机以及使用 SSL 的端口。
模式:您正在使用的模式:JS = JavaScript,PY = Python 和 SQL = SQL。
结尾:提示符以 > 结尾。

提示背景颜色
当我使用这个提示主题时,我首先注意到提示的背景颜色与我的终端背景颜色不同。

这种颜色差异让我感到不舒服。由于我没有将黑色作为终端的背景颜色,我需要更改提示的背景颜色。是的,我可以将终端的背景更改为黑色,但那样你就学不到如何更改提示的背景颜色了。

管理提示背景颜色的 JSON 代码块(大约在第 102 行附近)是:

"prompt": {
"text": "\ue0b0 ",
"cont_text": "%linectx%\ue0b0 ",
"bg": "0" #删除加红加粗的字符串
}

bg 属性控制提示的背景颜色。在这种情况下,它被设置为 0,即黑色。我可以通过试错来找到接近背景颜色的颜色,但如果我那样做,如果我将来为终端选择了不同的背景颜色,我就需要再次更改颜色。因此,解决这种颜色差异的简单方法是移除该设置。我将提示块更改为:

"prompt": {
"text": "\ue0b0 ",
"cont_text": "%linectx%\ue0b0 "
}

当我重新启动 MySQL Shell 时,我们可以看到提示的背景颜色现在与终端背景匹配。
如果我更改终端主题,我将不需要再次更改提示的背景。

更新提示文本
接下来让我感到困扰的是主机信息有点长,因为它包括了 SSH 主机和数据库主机。我更喜欢较短的提示文本,因此我们将对此进行缩短。我们将修改的 JSON 代码块位于传输变量定义的第 94 行左右。
"transport": {
"match": {
"pattern": "%ssh_host%",
"value": ""
},
"if_true": "%target%",
"if_false": "%ssh_host% \u2192 %target%"
}

这个代码块告诉 MySQL Shell,如果 %ssh_host% 的值是一个空字符串,将传输变量的值设置为 %target% 变量的值——通常这个值是由主机和端口用冒号(:)分隔的。

如果 %ssh_host% 的值不是空字符串,传输变量的值将设置为 %ssh_host% 的值,后面跟着一个右箭头的字符值,最后以 %target% 变量的值结束。

对于我的需求来说,端口号并不是必要的。我也不喜欢箭头周围的额外空格。为了解决这个问题,我将 if_false 行更改为以下内容:

"if_false": "%ssh_host%\u2192%host%"
当我重新启动 MySQL Shell 并再次连接到数据库时,提示看起来如下图所示。请注意,端口不再显示,箭头周围的空格已被移除。

生产环境的视觉提示
我经常同时运行多个数据库连接。因此,我希望添加一个视觉提示,让我知道何时连接到了生产数据库。我们已经在我们的 JSON 中有一个名为 is_production 的变量。该变量的定义大约在第 72 行附近,看起来像下面的 JSON。
"is_production": {
"match": {
"pattern": "*;%host%;*",
"value": ";%env:PRODUCTION_SERVERS%;"
},
"if_true": "production",
"if_false": ""
}

默认定义会查找一个名为 PRODUCTION_SERVERS 的环境变量,以查看其值是否与 %host% 变量的值匹配。如果匹配,is_production 的值将设置为 production。如果不匹配,is_production 的值将设置为空字符串。

为了这个演示,首先在环境变量中定义PRODUCTION_SERVERS这个变量值:
[root@centos7 ~]# cat .bash_profile
export PRODUCTION_SERVERS="172.16.1.233"

然后再修改/root/.mysqlsh/prompt.json中的数据如下:
"variables": {
"is_production": {
"match": {
"pattern": "%env:PRODUCTION_SERVERS%",
"value": "172.16.1.233"
},
"if_true": "production",
"if_false": ""
},

重新通过mysqlsh登录就是下面这样的了:

更改类值
这个提示更好了,但文本颜色应该是白色。我不确定为什么不是白色,但我认为这是因为无障碍性问题,颜色对比度不够。要更改生产标签的颜色,我们查看大约在第65行附近的生产类。

"production": {
"text": " PRODUCTION ",
"bg": "red",
"fg": "white"
}

我将改变背景和前景颜色以增加对比度。我还将把文本值从“PRODUCTION”改为“PROD”,因为我们刚刚在提示符上腾出了一些空间,现在又失去了一些。我的新的 JSON 代码块如下:
"production": {
"text": " PROD ",
"bg": 124,
"fg": 15
}

我重新启动 MySQL Shell 并重新连接以查看更改。

移动一个段落
在我们的提示符中,显示不同信息的部分被称为“段落”。我们可以在主题中添加、移除和移动段落。我想把“PROD”标签移到提示符的末尾,以便更容易引起我的注意。

在我们的 JSON 文件中,段落是用类似下面文本的 JSON 对象数组来定义的。
"segments": [
{
"classes": [
"disconnected%host%",
"%is_production%"
]
},
{
"text": " My",
"bg": 254,
"fg": 23
},
{
"separator": "",
"text": "SQL ",
"bg": 254,
"fg": 166
},
{
"classes": [
"disconnected%host%",
"%ssl%host%session%"
],
"shrink": "truncate_on_dot",
"bg": 237,
"fg": 15,
"weight": 10,
"padding": 1
},
{
"classes": [
"noschema%schema%",
"schema"
],
"bg": 242,
"fg": 15,
"shrink": "ellipsize",
"weight": -1,
"padding": 1
},
{
"classes": [
"%session%trx%trx%%autocommit%"
],
"weight": -1
},
{
"classes": [
"%Mode%"
],
"text": "%Mode%",
"padding": 1
}
]

为了移动生产环境,我们首先从段落数组的第一个元素的 classes 属性中移除 "%is_production%"。
"segments": [
{
"classes": [
"disconnected%host%",
"%is_production%" #删除加粗标红的部分
]
},
删除之后如下所示:
{
"classes": [
"disconnected%host%"
]
}

接下来,在最后一个段落之前,我们创建一个新的 JSON 对象,其中在 classes 数组中有一个元素,其值为 %Mode%。我们创建一个 classes 属性作为一个数组,并将 %is_production% 添加为一个元素。最后三个段落的元素应该类似于下面的 JSON。
"classes": [
"%session%trx%trx%%autocommit%"
],
"weight": -1
},
{
"classes": [
"%is_production%"
]
}, #加粗的部分是新添加的
{
"classes": [
"%Mode%"
],
"text": "%Mode%",
"padding": 1
}
]
}

当我们重新启动 MySQL Shell 并重新连接时,PROD 标签更靠近提示的末尾,使其更容易看到。

总结:
在 MySQL Shell 中自定义提示可以让我们展示我们想要的信息并隐藏我们不想要的信息。我们还可以添加视觉提示,以便在连接到生产服务器时让我们知道,并且我们可以移动不同的段落,使它们更符合我们的需求。要了解更多关于在 MySQL Shell 中自定义提示的内容,请查阅文档,同时也可以查看 README.prompt 文件的内容。

文章看完了,如果觉得本文对您的工作或生活有用,希望分享给你身边的朋友,一起学习,共同进步哈~~~

欢迎关注我的公众号【数库信息技术】,你的关注是我写作的动力源泉

各大平台都可以找到我:
————————————————————————————
公众号:数库信息技术
墨天轮:https://www.modb.pro/u/427810
CSDN :https://blog.csdn.net/rscpass
51CTO: https://blog.51cto.com/u_16068254
博客园:https://www.cnblogs.com/shukuinfo
知乎:https://www.zhihu.com/people/shukuinfo
————————————————————————————

自定义 MySQL Shell 提示符的更多相关文章

  1. MySQL Shell import_table数据导入

    目录 1. import_table介绍 2. Load Data 与 import table功能示例 2.1 用Load Data方式导入数据 2.2 用import_table方式导入数据 3. ...

  2. 1 、Linux-Rhel6终端介绍-Shell提示符

    1.Linux 终端介绍 tty-控制台终端: RHEL6 tty1-tty6  tty就是图形界面 从图形界面切换到字符界面: ctrl+shift+alt +F2~F6 从字符界面切换图形或字符: ...

  3. 11 自定制shell提示符

    shell提示符  huiubantu@ubuntu:~$ shell提示符保存在PS1变量中 包括用户名,主机名,当前工作目录 可以通过echo命令查看PS1的内容 huiubantu@ubuntu ...

  4. MySQL 5.7.12新增MySQL Shell命令行功能

      在最新发布的MySQL 5.7.12中有许多令人兴奋的新功能,对于MySQL开发者来说,最令人兴奋的莫不是新增的MySQL Shell了,其下载地址: http://dev.mysql.com/d ...

  5. 通过命令修改mysql的提示符(转)

    本文转自冲出地球的博客原文链接:https://www.cnblogs.com/zhengchenhui/p/6649235.html 在cmd窗口操作mysql数据库的时候,前面的提示符永远都是my ...

  6. 通过命令修改mysql的提示符

    在cmd窗口操作mysql数据库的时候,前面的提示符永远都是mysql>,这个提示符可以通过命令修改. 在登录mysql时修改: mysql -uroot -p --prompt 提示符 登录后 ...

  7. mysqlsh : mysql shell tutorial

    MySQL Shell 是一个高级的命令行客户端以及代码编辑器for Mysql. 除了SQL,MySQL Shell也提供脚本能力 for JS and Python. When MySQL she ...

  8. apparmor 引起自定义mysql 日志问题

    今天手贱,看到mysql 的日志在/var/log/mysql下面.总是觉得别扭,于是就想改变日志的位置, 本人开发环境 vagrant  + ubuntu12.04 ,在/etc/mysql/mys ...

  9. 自定义mysql函数时报错,[Err] 1418 - This function has none of DETERMINISTIC......

    今天在我执行自定义mysql函数的SQL时发生了错误,SQL如下: /** 自定义mysql函数 getChildList */delimiter //CREATE FUNCTION `pengwif ...

  10. mysql shell脚本

    mysql shell连接脚本 本地连接及远程链接 #!/bin/bash #连接MySQL数据库 Host=127.0.0.1 User=username PASSWORD=password POR ...

随机推荐

  1. 一文剖析TCP三次握手、四次挥手

    TCP三次握手四次挥手 问题 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠, ...

  2. 从Workload中优雅隔离Pod

    线上集群中,业务跑着跑着,突然发现有个Pod上出现大量错误日志,其他的Pod是正常的,该如何处理呢? 直接删除Pod? 这样不便于保留现场,可能会影响判断问题的根因 让业务方忍一会,先排查下问题? 会 ...

  3. 鸿蒙应用开发:如何与组件库(Glide)衔接?

    ​ Android 发展到现在不仅提供了很多 API,还提供了很多第三方库.这降低了我们开发者的开发难度,提升了开发效率,让应用开发更加的简单高效.众所周知,HarmonyOS 除了提供 16000  ...

  4. 全面掌握 Jest:从零开始的测试指南(下篇)

    在上一篇测试指南中,我们介绍了Jest 的背景.如何初始化项目.常用的匹配器语法以及钩子函数的使用.这一篇篇将继续深入探讨 Jest 的高级特性,包括 Mock 函数.异步请求的处理.Mock 请求的 ...

  5. 补天云全网独有技术和唯一实用工具:QT6框架QML源码保护工具应用 QML和JavaScript源码隐藏工具

    如何保护和隐藏你的QT应用中的QML源代码?补天云全网独有技术和唯一实用工具:QT6框架QML源码保护工具应用 QML和JavaScript源码隐藏工具 简介 在通常的QT QML应用程序中,QML语 ...

  6. 阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略

    大家好,我是 V 哥,粉丝小A面试阿里,说被问到 Redis 的内存淘汰策略的问题,整理这个笔记给他参考,也分享给大家,如果你遇到这个问题,会怎么回答呢? Redis 的内存淘汰策略是指当Redis的 ...

  7. [OI] pb_ds

    using namespace __gnu_pbds; Luogu Post#39 1.堆 1.1 基本信息 头文件 #include <ext/pb_ds/priority_queue.hpp ...

  8. 1Before You Install Flask...Watch This! Flask Fridays #1

    flask官网: https://flask.github.net.cn/ git官网: https://git-scm.com/ 建立文件: 建立虚拟环境.激活: source virt/Scrip ...

  9. centos7安装MySQL及远程配置

    #下载mysql源安装包 shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm #安装m ...

  10. jpa 多条件模糊查询,分页并排序

    jpa 多条件模糊查询,分页并排序很难吗,这样写不就几行代码的事吗?搞不明白你们写的怎么长篇大论花里胡哨的,看的一脸懵逼. jpa多字段模糊查询,持久层字段还是要一一对应的,但是你可以在service ...