自定义 MySQL Shell 提示符
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 提示符的更多相关文章
- MySQL Shell import_table数据导入
目录 1. import_table介绍 2. Load Data 与 import table功能示例 2.1 用Load Data方式导入数据 2.2 用import_table方式导入数据 3. ...
- 1 、Linux-Rhel6终端介绍-Shell提示符
1.Linux 终端介绍 tty-控制台终端: RHEL6 tty1-tty6 tty就是图形界面 从图形界面切换到字符界面: ctrl+shift+alt +F2~F6 从字符界面切换图形或字符: ...
- 11 自定制shell提示符
shell提示符 huiubantu@ubuntu:~$ shell提示符保存在PS1变量中 包括用户名,主机名,当前工作目录 可以通过echo命令查看PS1的内容 huiubantu@ubuntu ...
- MySQL 5.7.12新增MySQL Shell命令行功能
在最新发布的MySQL 5.7.12中有许多令人兴奋的新功能,对于MySQL开发者来说,最令人兴奋的莫不是新增的MySQL Shell了,其下载地址: http://dev.mysql.com/d ...
- 通过命令修改mysql的提示符(转)
本文转自冲出地球的博客原文链接:https://www.cnblogs.com/zhengchenhui/p/6649235.html 在cmd窗口操作mysql数据库的时候,前面的提示符永远都是my ...
- 通过命令修改mysql的提示符
在cmd窗口操作mysql数据库的时候,前面的提示符永远都是mysql>,这个提示符可以通过命令修改. 在登录mysql时修改: mysql -uroot -p --prompt 提示符 登录后 ...
- mysqlsh : mysql shell tutorial
MySQL Shell 是一个高级的命令行客户端以及代码编辑器for Mysql. 除了SQL,MySQL Shell也提供脚本能力 for JS and Python. When MySQL she ...
- apparmor 引起自定义mysql 日志问题
今天手贱,看到mysql 的日志在/var/log/mysql下面.总是觉得别扭,于是就想改变日志的位置, 本人开发环境 vagrant + ubuntu12.04 ,在/etc/mysql/mys ...
- 自定义mysql函数时报错,[Err] 1418 - This function has none of DETERMINISTIC......
今天在我执行自定义mysql函数的SQL时发生了错误,SQL如下: /** 自定义mysql函数 getChildList */delimiter //CREATE FUNCTION `pengwif ...
- mysql shell脚本
mysql shell连接脚本 本地连接及远程链接 #!/bin/bash #连接MySQL数据库 Host=127.0.0.1 User=username PASSWORD=password POR ...
随机推荐
- 【Homebrew】之相关命令问题合集及iOS真机调试包
一.Homebrew更换国内镜像源(中科大.阿里.清华) Homebrew主要有四个部分组成: brew.homebrew-core .homebrew-bottles.homebrew-cask. ...
- Coursera, Big Data 5, Graph Analytics for Big Data, Week 3
Graph Analytics 有哪些类型 node type (labels) node schema: attributes 组成了schema. 同样的, Edge也有 Edge Type 和E ...
- WiFi基础(三):802.11ac/ax/be 与 WiFi4、WiFi5、WiFi6、WiFi7
liwen01 2024.09.08 前言 经过二十多年的发展,WiFi 在硬件能力.软件和算法.频谱资源.市场需求.电源与能效方面都有了很大的提升.所以我们能看到从最开始只有几 M 速率的 802. ...
- CSS – Icon
前言 Icon 并不容易搞. 市场有许多平台支持 Icon, 有些收费有些免费. 有些 icon 很丰富, 有些很缺失. 尤其是在做网站的时候寻找 icon 是一个挺累的事情. 这篇就来聊聊 icon ...
- 理解IO多路复用
I/O 多路复用是什么? I/O 多路复用是用户程序通过复用一个线程来服务多个 I/O 事件的机制,我们也可以将他说成是一个线程服务多个文件描述符 fd,而 I/O 多路复用是在操作系统层面实现提供的 ...
- 致敬传奇 Kruskal 重构树题硬控我三小时
NOI2018 归程 存边的数组拿来干两件事,忘了清空了,其实最好开两个的 dfs 没开 vis 导致不知道为什么出现的绕圈 倍增的 fa[i][j] 定义的时候前面是 \(2^{i}\) 写着写着记 ...
- Springboot 读取 resource 目录下的Excel文件并下载
如果 inputStream 为null ,或者提示 文件路径不存在,执行 mvn clean 并 重启项目,查看target 目录下是否存在该文件 @GetMapping("/downlo ...
- C#爬取动态网页上的信息:B站主页
目录 简介 获取 HTML 文档 解析 HTML 文档 测试 参考文章 简介 动态内容网站使用 JavaScript 脚本动态检索和渲染数据,爬取信息时需要模拟浏览器行为,否则获取到的源码基本是空的. ...
- 2023年2月中国数据库排行榜:OTO新格局持续三月,人大金仓、AnalyticDB排名创新高
玉兔迎春至,榜单焕新颜. 2023年2月,兔年开年的 墨天轮中国数据库流行度排行 火热出炉,本月共有259个数据库参与排名,排行榜样式去掉了较上月和半年前得分差的数据显示,更加聚焦各产品之间的排名变化 ...
- 001 C#配置多个版本Swagger说明
1. AddSwaggerGen AddSwaggerGen 是配置多个版本的swagger的关键 Path.Combine 当前项目运行的路径 UseSwaggerUI 主要分为 2 步骤 : 1 ...