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. Apple Silicon 芯片 Mac 在 x86_64 模式下启动 Kettle

    苹果于 2020 年推出了自家设计的基于 ARM 架构的 M1 芯片,在日常生活的大部分使用过程中,M1 的体验很好.然而,依然存在一小部分软件无法兼容 ARM 架构,需要我们模拟 x86 的架构来运 ...

  2. Ubuntu 设置中文

    首先安装中文语言包: sudo apt install -y language-pack-zh-hans 接下来在 ~/.zshrc 或 ~/.bashrc 中添加如下内容: export \ LAN ...

  3. pyinstaller 打包 win32ctypes.pywin32.pywintypes.error: (225, '', '无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。')

    背景: 使用python 写了一个程序,使用pyinstaller打包, 不使用-w --noconsole的命令打包隐藏命令行窗口时,是正常的, 但是使用-w或者--noconsole就会报错win ...

  4. 一文了解JSON

    目录 JSON 在JavaScript 中的使用. json 的定义 json 的访问 json 的两个常用方法 JSON 在 在 java 中的使用 javaBean 和 和 json 的互转 Li ...

  5. canvas实现图片标记

    前言 由于业务需求,需要有一个图片标记功能,其实就是对图片画框画线做标记,类似微信的图片编辑 但是需要存下标记图及其标记的具体数据,.功能其实很简单,但刚开始的时候也是费了一些功夫的.我将原项目中该功 ...

  6. 【YashanDB数据库】Ubuntu系统加载Yashan C驱动后无法使用PHP

    [问题分类]驱动使用 [关键字]驱动使用.PHP.Ubuntu.C驱动 [问题描述] 客户将YashanDB的C驱动lib加载到环境变量LD_LIBRARY_PATH后,PHP报错:PHP Fatal ...

  7. 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现

    高并发场景:秒杀商品. 秒杀一般出现在商城的促销活动中,指定了一定数量(比如:1000个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功. 示例 ...

  8. Storybook version8 智能化构建组件文档与单元测试

    根据官方文档说法,storybook 是一个独立构建前端UI组件与页面的车间. Storybook is a frontend workshop for building UI components ...

  9. JSP——简介-快速入门

    JSP 简介       JSP 快速入门       <%@ page contentType="text/html;charset=UTF-8" language=&qu ...

  10. 个人Blog的第一篇博文

    个人Blog的第一篇博文 正式加入"博客园"大家庭了,希望以后可以一直坚持下去欸.