【MySQL】MySQL Shell (交互式客户端和脚本工具)安装与使用

MySQL Shell,交互式客户端和脚本工具,官方推荐的现代命令行工具,用于替代传统的 mysql 命令行客户端。它提供了增强的功能、脚本支持以及现代化的 API。

一、MySQL Shell 介绍

  1. 官方现代工具: MySQL Shell 是 Oracle 官方开发和维护的下一代 MySQL 命令行客户端。
  2. 多语言支持:
    • SQL 模式: 执行标准的 SQL 语句(兼容传统的 mysql 客户端功能)。
    • JavaScript 模式: 使用 JavaScript 编写脚本,利用强大的 AdminAPI 管理 MySQL InnoDB Cluster、InnoDB ReplicaSet 等,并调用 X DevAPI
    • Python 模式: 使用 Python 编写脚本,同样可以调用 AdminAPIX DevAPI
    • 模式切换非常方便 (\sql, \js, \py)。
  3. 核心功能:
    • 交互式查询: 执行 SQL、JavaScript 或 Python 代码。
    • 脚本执行: 运行预先写好的 .sql, .js.py 脚本文件。
    • AdminAPI: 核心亮点! 用于简化部署、管理和监控
      • MySQL InnoDB Cluster (高可用集群,基于 Group Replication)
      • MySQL InnoDB ReplicaSet (异步复制管理)
      • 执行集群操作:创建、配置、添加/移除节点、切换主节点、检查状态、故障恢复等。
    • X DevAPI: 用于开发和执行使用 MySQL 文档存储(NoSQL)或关系型数据的应用程序。支持 CRUD 操作、关系表操作、事务等。
    • 报表生成: 内置 util 对象提供有用的报表功能(如 util.checkForServerUpgrade() 检查升级兼容性, util.exportJson(), util.importJson() 等)。
    • 代码自动补全: 提供上下文相关的代码补全(按 Tab 键),提高效率。
    • 语法高亮: 提高代码可读性。
    • 批量导入/导出: 提供高效的数据导入导出工具 (util.exportTable(), util.importTable())。
    • 连接管理: 支持多种连接方式(经典 MySQL 协议、X 协议),支持 URI 连接字符串,支持保存命名会话。
    • 输出格式化: 支持表格、JSON、制表符分隔等多种输出格式 (--result-format)。
  4. 目标用户:
    • 数据库管理员 (DBA): 管理 MySQL 高可用架构 (InnoDB Cluster/ReplicaSet) 的首选工具。
    • 开发者: 进行数据库交互、调试、编写数据库脚本(特别是使用 JavaScript/Python 的开发者)。
    • DevOps 工程师: 自动化数据库部署和管理任务。
    • 任何需要比传统 mysql 客户端更强大、更现代化功能的用户。

总结优势: 功能整合(AdminAPI, X DevAPI)、多语言脚本、现代化交互、强大的管理能力(尤其集群)、高效的导入导出。

二、MySQL Shell 安装

安装方法因操作系统而异:

  1. Linux (基于 APT - Debian/Ubuntu):

    # 添加 MySQL APT 仓库 (如果尚未添加)
    sudo apt update
    sudo apt install wget
    wget https://dev.mysql.com/get/mysql-apt-config_latest.deb
    sudo dpkg -i mysql-apt-config_latest.deb # 在配置界面选择 OK 即可
    sudo apt update
    # 安装 MySQL Shell
    sudo apt install mysql-shell
    
  2. Linux (基于 YUM/DNF - RHEL/CentOS/Oracle Linux/Rocky Linux):

    # 添加 MySQL YUM 仓库 (如果尚未添加)
    sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm # 替换 el9 为你的主版本号,如 el7, el8
    # 安装 MySQL Shell
    sudo yum install mysql-shell # 或者 sudo dnf install mysql-shell (较新系统)
    
  3. macOS (使用 Homebrew):

    brew install mysql-shell
    
  4. Windows:

    • 访问 MySQL 官方网站下载页面: https://dev.mysql.com/downloads/shell/
    • 选择适用于 Windows 的安装程序 (通常是 .msi 文件)。
    • 下载后双击运行安装程序,按照向导提示完成安装。通常会将 mysqlsh.exe 添加到系统路径中。
    • 或者使用 winget (Windows 包管理器):
      winget install MySQL.MySQL.Shell
      
  5. 通用方法 (二进制 Tarball / Zip):

    • 同样在上述下载页面,选择适用于你平台的 Tarball (Linux/macOS) 或 Zip (Windows) 压缩包。
    • 解压到目标目录。
    • 将解压目录下的 bin 子目录添加到你的系统 PATH 环境变量中,以便可以直接运行 mysqlsh (或 mysqlsh.exe)。

验证安装:
打开终端或命令提示符,输入:

mysqlsh --version

如果成功安装,会显示 MySQL Shell 的版本信息 (例如 mysqlsh Ver 8.0.36 for Linux on x86_64)。

三、MySQL Shell 基本使用

  1. 启动 MySQL Shell:

    mysqlsh
    

    这会进入交互式 Shell 环境,默认模式通常是 JavaScript (JS>)。

  2. 连接到 MySQL 服务器:

    • URI 方式 (推荐):
      mysqlsh user@host:port
      # 或在 Shell 内:
      \connect user@host:port
      
      例如,连接本地 MySQL (127.0.0.1:3306) 上的 root 用户:
      mysqlsh root@localhost
      # 或指定端口
      mysqlsh root@127.0.0.1:3307
      
      系统会提示输入密码。注意:密码直接在命令行输入可能不安全(会被ps等命令看到)。 更安全的方式是只输入 mysqlsh\connect 后按提示输入密码。
      • 使用 --password-p 参数在连接字符串中指定密码 (不推荐,不安全)
        mysqlsh user:password@host:port
        
    • 经典方式: 使用类似传统 mysql 的参数:
      mysqlsh --user=user --host=host --port=port
      
      • 同样会提示输入密码,或者使用 --password/-p (也需谨慎)。
  3. 模式切换:

    • \sql: 切换到 SQL 模式 (SQL>)。在此模式下可以直接执行 SQL 语句。
    • \js: 切换到 JavaScript 模式 (JS>) (默认)。
    • \py: 切换到 Python 模式 (Py>)。
  4. 执行命令:

    • 交互式执行:
      • 在 SQL 模式下 (SQL>),输入 SQL 语句并按回车执行。例如:
        SQL> USE mydatabase;
        SQL> SELECT * FROM mytable;
        
      • 在 JavaScript 模式 (JS>) 下,可以输入 JS 代码或调用 API。例如:
        JS> session.runSql("SHOW DATABASES;"); // 在 JS 中执行 SQL
        JS> dba.getCluster().status(); // 调用 AdminAPI 检查集群状态
        
      • Python 模式 (Py>) 类似。
    • 执行脚本文件:
      mysqlsh --file=myscript.js # 执行 JavaScript 文件
      mysqlsh --file=myscript.py # 执行 Python 文件
      mysqlsh --file=myscript.sql # 执行 SQL 文件 (会在默认模式下执行 SQL 语句)
      # 或者在 Shell 内:
      JS> \source myscript.js
      SQL> \source myscript.sql
      
    • 执行单条命令/脚本 (非交互式):
      mysqlsh -e "session.runSql('SELECT NOW();')" user@host # JS 命令
      mysqlsh --sql -e "SELECT NOW();" user@host # SQL 命令 (需要 --sql 参数)
      mysqlsh --sqlc -e "SELECT NOW();" user@host # SQL 命令,输出格式类似传统 mysql (--sqlc)
      
  5. 使用 AdminAPI (核心 - 通常在 JS/Py 模式下):

    • 获取 dba 对象:
      JS> var dba = dba.getDba(); // 或者直接用 dba
      
    • 创建 InnoDB Cluster:
      JS> dba.createCluster('myCluster');
      
    • 获取已存在的 Cluster 对象:
      JS> var myCluster = dba.getCluster('myCluster'); // 或 dba.getCluster()
      
    • 向集群添加实例:
      JS> myCluster.addInstance('user@newhost:3306');
      
    • 检查集群状态:
      JS> myCluster.status();
      JS> myCluster.describe(); // 更详细配置
      
    • 管理 ReplicaSet:
      JS> dba.createReplicaSet('myReplicaSet');
      JS> var myReplicaSet = dba.getReplicaSet('myReplicaSet');
      JS> myReplicaSet.addInstance('user@newhost:3306');
      JS> myReplicaSet.status();
      
  6. 输出格式化:

    • 在交互式 Shell 中,结果默认以漂亮的表格或 JSON 格式显示。
    • 使用 --result-format 选项或在 Shell 内用 \option 设置:
      mysqlsh --result-format=json/table/vertical/csv/ndjson/tabbed
      JS> \option --result-format=table
      
  7. 帮助和文档:

    • \?\help: 显示 Shell 内置命令帮助。
    • \help AdminAPI: 显示 AdminAPI 相关帮助。
    • \help dba: 显示 dba 对象的帮助。
    • \help util: 显示 util 对象(实用工具)的帮助。
    • \show: 显示可用对象及其方法 (在 JS/Py 模式下)。
  8. 退出 MySQL Shell:

    \quit
    

    或者按 Ctrl+D (Linux/macOS) / Ctrl+Z 然后回车 (Windows)。

一个简单示例流程 (创建集群 - 需多实例支持):

# 1. 启动 Shell 并连接到一个将成为集群种子节点的 MySQL 实例 (已配置好 Group Replication 前提条件)
mysqlsh root@primaryhost:3306
# 输入密码

# 2. 切换到 JS 模式 (如果默认不是)
JS> \js

# 3. 检查实例是否满足创建集群条件
JS> dba.checkInstanceConfiguration('root@primaryhost:3306')
# 根据输出修复任何报告的问题 (可能需要运行 dba.configureInstance())

# 4. 创建集群
JS> var myCluster = dba.createCluster('prodCluster')

# 5. 添加第二个实例
JS> myCluster.addInstance('root@secondaryhost1:3306')
# 输入实例密码

# 6. 添加第三个实例
JS> myCluster.addInstance('root@secondaryhost2:3306')
# 输入实例密码

# 7. 检查集群状态
JS> myCluster.status()

重要提示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴雨日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值