Loading...

文章背景图

MySQL Shell 安装使用完全指南

2026-08-05
10
-
- 分钟

引言

如果你还在用传统的 mysql 命令行客户端,那你可能已经错失了许多效率工具。MySQL Shell(以下简称 mysqlsh)自 MySQL 8.0 起成为官方力推的客户端,它不仅仅是 SQL 终端——更是一个集成了 InnoDB Cluster 管理逻辑备份文档存储(Document Store) 等多功能于一体的瑞士军刀。

其中最让开发者眼前一亮的功能,就是它原生支持将查询结果以 JSON 格式 输出。这个特性在对接 Python/Node.js 脚本、ELK 日志系统、API 网关等场景下极为实用——无需在应用层再做格式转换,一条命令搞定。

本文将从以下维度展开:

  1. MySQL Shell 是什么

  2. 全平台安装指南(Linux / macOS / Windows)

  3. 基础使用与三种语言模式

  4. JSON 格式输出深度实战(重点)

  5. 实用技巧与最佳实践


一、MySQL Shell 是什么?

MySQL Shell 是 Oracle 官方推出的高级命令行脚本化 shell,用于 MySQL 数据库管理。与传统的 mysql 客户端相比,它拥有以下显著优势:

特性

传统 mysql 客户端

MySQL Shell

语言支持

仅 SQL

SQL + JavaScript + Python

输出格式

表格

表格 / 制表符 / 垂直 / JSON / JSON数组

语法高亮

自动补全

基础

智能补全(SQL关键字、表名)

InnoDB Cluster

原生 AdminAPI

逻辑备份

util.dumpInstance()

X Protocol

支持文档存储

简言之: 如果你在 2024 年后还在管理 MySQL,MySQL Shell 就是标配1


二、全平台安装指南

2.1 下载 MySQL Shell

MySQL Shell 的安装包独立于 MySQL Server,所有平台均从官方下载页面获取:

🔗 官方下载地址: https://dev.mysql.com/downloads/shell/

选择适合你操作系统的版本:

操作系统

推荐格式

说明

Linux (glibc ≥ 2.12)

.tar.gz

通用二进制包,解压即用

Linux (RHEL/CentOS)

Yum 仓库 RPM

yum install mysql-shell

Linux (Ubuntu/Debian)

APT 仓库 DEB

apt install mysql-shell

macOS

.dmg 或 Homebrew

brew install mysql-shell

Windows

.msi 或 ZIP

推荐用 MySQL Installer 一起装

版本建议:截至 2026 年 7 月,最新版本为 MySQL Shell 9.7.x,同时 8.0.x LTS 版本依然广泛使用。建议与你的 MySQL Server 主版本号保持一致。

2.2 Linux 下安装(通用二进制包)

这是最通用、最灵活的方式,适用于所有 Linux 发行版。

 # 1. 下载安装包(以 8.0.x 为例,请替换为实际版本)
 wget https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.46-linux-glibc2.12-x86_64bit.tar.gz
 ​
 # 2. 解压到 /usr/local/
 sudo tar -zxvf mysql-shell-8.0.46-linux-glibc2.12-x86_64bit.tar.gz -C /usr/local/
 ​
 # 3. 创建软链接(方便版本管理)
 cd /usr/local/
 sudo ln -s mysql-shell-8.0.46-linux-glibc2.12-x86_64bit mysql-shell
 ​
 # 4. 配置环境变量
 echo 'export PATH=$PATH:/usr/local/mysql-shell/bin' >> ~/.bashrc
 source ~/.bashrc
 ​
 # 5. 验证安装
 mysqlsh --version
 # 输出:mysqlsh   Ver 8.0.46 for Linux on x86_64 - for MySQL 8.0.46

2.3 Linux 下安装(包管理器)

RHEL / CentOS / Fedora:

 # 添加 MySQL Yum 仓库
 sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
 ​
 # 安装 MySQL Shell
 sudo yum install mysql-shell

Ubuntu / Debian:

 # 添加 MySQL APT 仓库
 wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
 sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
 sudo apt update
 ​
 # 安装 MySQL Shell
 sudo apt install mysql-shell

2.4 macOS 下安装

 # Homebrew 一键安装(推荐)
 brew install mysql-shell
 ​
 # 或者下载 .dmg 安装包
 # https://dev.mysql.com/downloads/shell/

2.5 Windows 下安装

方法一:MySQL Installer(推荐)

  1. 下载 MySQL Installer for Windows

  2. 运行安装程序,在组件选择界面勾选 MySQL Shell

  3. 一路 Next 完成安装

方法二:ZIP 绿色版

  1. 下载 mysql-shell-8.0.xx-winx64.zip

  2. 解压到 C:\mysql-shell

  3. C:\mysql-shell\bin 添加到系统环境变量 PATH

  4. 打开 PowerShell 或 CMD 验证: mysqlsh --version


三、基础使用入门

3.1 启动与三种语言模式

直接运行 mysqlsh 进入交互模式,默认使用 JavaScript 模式:

 mysqlsh

你会看到如下提示:

 MySQL Shell 8.0.46
 ​
 Copyright (c) 2016, 2026, Oracle and/or its affiliates.
 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.
 ​
 MySQL  JS >

在交互模式下,你可以随时切换语言:

命令

含义

\sql

切换到 SQL 模式

\js

切换到 JavaScript 模式

\py

切换到 Python 模式

也可以在启动时直接指定模式:

 mysqlsh --sql           # 以 SQL 模式启动
 mysqlsh --js            # 以 JavaScript 模式启动
 mysqlsh --py            # 以 Python 模式启动

3.2 连接 MySQL 实例

以下是几种常见的连接方式:

 # 方式一:经典 TCP 连接(SQL 模式)
 mysqlsh --sql -u root -p -h localhost -P 3306
 ​
 # 方式二:URI 方式【推荐】
 mysqlsh --sql root@localhost:3306
 ​
 # 方式三:Socket 连接(Linux)
 mysqlsh --sql -u root -S /var/run/mysqld/mysqld.sock
 ​
 # 方式四:X Protocol 连接(支持文档存储)
 mysqlsh --js root@localhost:33060

提示:端口 3306 是经典 MySQL 协议端口, 33060 是 X Protocol 端口。如果不需要文档存储功能,用 3306 即可。

3.3 常用命令速查

进入交互模式后,以下命令能帮你快速上手:

命令

说明

\connect root@localhost:3306

连接到 MySQL 实例

\use database_name

切换数据库

\sql / \js / \py

切换语言模式

\status

查看当前连接状态

\history

查看命令历史

\source /path/to/script.sql

执行脚本文件

\system ls -la\! ls -la

执行操作系统命令

\help

获取帮助

\quit

退出

3.4 批处理模式

除了交互模式,MySQL Shell 也支持非交互的批处理场景:

 # 执行一段 SQL 并退出
 echo "SELECT VERSION(); SHOW DATABASES;" | mysqlsh --sql -u root -p
 ​
 # 执行一个 SQL 文件
 mysqlsh --sql -u root -p --file /path/to/script.sql
 ​
 # 执行 Python 脚本
 mysqlsh --py -u root -p --file /path/to/backup_script.py

四、JSON 格式输出深度实战

这是本文的核心内容。MySQL Shell 提供了 多种 JSON 输出格式,可通过命令行参数或配置选项设置。

4.1 --result-format 参数一览

说明

适用场景

table(默认)

经典表格格式

人工查看

tabbed

制表符分隔

导入 Excel / CSV 工具

vertical

垂直列式展示

字段较多时查看

jsonjson/pretty

美化 JSON

调试、日志

ndjsonjson/raw

紧凑 JSON(每行一条)

流式处理、管道

json/array

JSON 数组包裹

API 返回、编程对接

4.2 命令行方式指定 JSON 输出

这是最直接、最常用的方式——启动时通过 --result-format 参数指定格式:

 # ⭐ 以美化 JSON 格式输出(最常用)
 mysqlsh --sql --result-format=json -u root -p
 ​
 # 以紧凑 JSON 格式输出(每行一条记录)
 mysqlsh --sql --result-format=ndjson -u root -p
 ​
 # 以 JSON 数组格式输出
 mysqlsh --sql --result-format=json/array -u root -p

⚠️ 注意:输入密码后,输入 SQL 语句并按回车,结果即以 JSON 格式展示。按 Ctrl+D 或输入 \quit 退出。

4.3 实战演示:三种 JSON 格式对比

假设我们有一个 employees 表,包含如下数据:

 CREATE DATABASE demo;
 USE demo;
 ​
 CREATE TABLE employees (
     id INT PRIMARY KEY AUTO_INCREMENT,
     name VARCHAR(50),
     department VARCHAR(30),
     salary DECIMAL(10,2)
 );
 ​
 INSERT INTO employees (name, department, salary) VALUES
 ('张三', '技术部', 25000.00),
 ('李四', '产品部', 22000.00),
 ('王五', '技术部', 28000.00);

🔹 格式一: json(美化 JSON,即 json/pretty)

 mysqlsh --sql --result-format=json -u root -p -e "SELECT * FROM demo.employees;"

输出效果:

 {
     "id": 1,
     "name": "张三",
     "department": "技术部",
     "salary": 25000.00
 }
 {
     "id": 2,
     "name": "李四",
     "department": "产品部",
     "salary": 22000.00
 }
 {
     "id": 3,
     "name": "王五",
     "department": "技术部",
     "salary": 28000.00
 }

💡 每条记录作为一个独立的 JSON 对象,缩进美观,适合日志输出和人工调试

🔹 格式二: ndjson(紧凑 JSON,json/raw)

 mysqlsh --sql --result-format=ndjson -u root -p -e "SELECT * FROM demo.employees;"

输出效果:

 {"id":1,"name":"张三","department":"技术部","salary":25000.00}
 {"id":2,"name":"李四","department":"产品部","salary":22000.00}
 {"id":3,"name":"王五","department":"技术部","salary":28000.00}

💡 每行一条 JSON 记录,极度紧凑。适合 Shell 管道流式处理(如 jq 逐行解析)或写入 日志采集系统(ELK / Fluentd)

🔹 格式三: json/array(JSON 数组)

 mysqlsh --sql --result-format=json/array -u root -p -e "SELECT * FROM demo.employees;"

输出效果:

 [
 {"id":1,"name":"张三","department":"技术部","salary":25000.00},
 {"id":2,"name":"李四","department":"产品部","salary":22000.00},
 {"id":3,"name":"王五","department":"技术部","salary":28000.00}
 ]

💡 标准 JSON 数组格式,可直接被 Python json.loads()JavaScript JSON.parse() 解析。这是 API 对接场景的最佳选择

4.4 交互模式下动态切换 JSON 格式

进入交互模式后,你也可以动态切换输出格式:

 -- 进入 SQL 交互模式
 mysqlsh --sql -u root -p
 ​
 -- 设置为美化 JSON
 \option --persist resultFormat json
 ​
 -- 执行查询
 SELECT * FROM demo.employees;
 ​
 -- 切换为 JSON 数组格式
 \option resultFormat json/array
 ​
 -- 再次查询
 SELECT * FROM demo.employees;
 ​
 -- 切换回表格格式
 \option resultFormat table

或者用 shell.options.set() 方法(JS/Py 模式):

 // JS 模式
 shell.options.set('resultFormat', 'json/array');
 session.runSql("SELECT * FROM demo.employees");

4.5 进阶:管道 + jq 优雅处理 JSON 输出

将 MySQL Shell 的 JSON 输出与 jq 结合,可以实现强大的数据处理流水线:

 # 示例1:查询并以 JSON 数组输出,用 jq 提取 name 字段
 mysqlsh --sql --result-format=json/array -u root -p --no-password \
   -e "SELECT * FROM demo.employees;" 2>/dev/null | \
   jq '.[] | .name'
 ​
 # 输出:
 # "张三"
 # "李四"
 # "王五"
 ​
 # 示例2:过滤高薪员工并格式化输出
 mysqlsh --sql --result-format=json/array -u root -p \
   -e "SELECT * FROM demo.employees;" 2>/dev/null | \
   jq '.[] | select(.salary > 23000) | {姓名: .name, 薪资: .salary}'
 ​
 # 输出:
 # {"姓名":"张三","薪资":25000}
 # {"姓名":"王五","薪资":28000}
 ​
 # 示例3:导出为 JSON 文件
 mysqlsh --sql --result-format=json/array -u root -p \
   -e "SELECT * FROM demo.employees;" 2>/dev/null \
   > employees_export.json

⚠️ 注意2>/dev/null 用于过滤掉 MySQL Shell 的欢迎信息和查询状态信息(如 "3 rows in set"),只保留纯 JSON 数据。 --no-password 表示不交互输入密码(需在 .my.cnf 中预设)。

4.6 Python 调用示例

 import subprocess
 import json
 ​
 def mysql_query_to_json(sql: str, user: str, password: str, database: str):
     """通过 mysqlsh 执行 SQL 并返回 Python 字典列表"""
     
     cmd = [
         "mysqlsh", "--sql",
         "--result-format=json/array",
         "-u", user,
         f"--password={password}",
         "-D", database,
         "--execute", sql
     ]
     
     result = subprocess.run(
         cmd,
         capture_output=True,
         text=True
     )
     
     # 过滤掉非 JSON 行(欢迎信息等)
     lines = result.stdout.strip().split("\n")
     json_lines = [l for l in lines if l.startswith("[") or l.startswith("{")]
     json_str = "\n".join(json_lines)
     
     return json.loads(json_str)
 ​
 # 使用示例
 data = mysql_query_to_json(
     sql="SELECT name, salary FROM employees WHERE department='技术部'",
     user="root",
     password="your_password",
     database="demo"
 )
 ​
 for row in data:
     print(f"员工: {row['name']}, 薪资: {row['salary']}")

4.7 Shell 脚本集成示例

 #!/bin/bash
 # mysql_backup_json.sh - 以 JSON 格式导出全表数据
 ​
 USER="root"
 PASSWORD="your_password"
 DATABASE="demo"
 OUTPUT_DIR="./backups"
 ​
 mkdir -p "$OUTPUT_DIR"
 ​
 # 获取所有表名
 TABLES=$(mysqlsh --sql -u "$USER" --password="$PASSWORD" -D "$DATABASE" \
   --result-format=json/array \
   -e "SHOW TABLES;" 2>/dev/null | jq -r '.[] | keys[0] as $k | .[$k]')
 ​
 for table in $TABLES; do
     echo "正在导出表: $table ..."
     mysqlsh --sql -u "$USER" --password="$PASSWORD" -D "$DATABASE" \
       --result-format=json/array \
       -e "SELECT * FROM \`$table\`;" 2>/dev/null \
       > "${OUTPUT_DIR}/${table}_$(date +%Y%m%d).json"
 done
 ​
 echo "✅ 所有表已导出至: $OUTPUT_DIR"

五、总结与展望

核心回顾

要点

说明

🚀 定位

MySQL Shell 是 MySQL 新一代官方 CLI,支持 SQL/JS/Python 三语

📦 安装

全平台支持,Linux 推荐通用二进制包,macOS 用 Homebrew,Windows 用 Installer

🎯 JSON 输出

`--result-format=json

ndjson

json/array` 三种模式覆盖所有场景

🔗 管道集成

搭配 jq 可实现强大的 Shell 数据处理流水线

🐍 编程对接

json/array 格式可直接被 Python/JS 解析,无缝集成

何时使用哪种 JSON 格式?

 人工调试 + 日志     →  --result-format=json         (美化输出)
 流式管道 + ELK      →  --result-format=ndjson        (逐行紧凑)
 API 对接 + 编程      →  --result-format=json/array    (标准数组)

未来展望

随着 MySQL 9.7 LTS 的发布和 MySQL 8.0 进入 EoL(2026年4月),MySQL Shell 的功能还在持续增强——包括更好的 JSON 文档存储支持、增强的并行导入导出功能等。可以预见, MySQL Shell 将成为 MySQL 生态中越来越不可替代的核心工具

如果你还没有从传统 mysql 客户端切换到 mysqlsh,现在就是最好的时机。


参考资料:

原创

MySQL Shell 安装使用完全指南

本文链接: MySQL Shell 安装使用完全指南

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

文章目录