- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
1.MySQL Shell ,MySQL DBA最佳工具-徐轶韬
内容介绍
本次分享将详细介绍MySQL最新的客户端工具MySQL Shell。MySQL Shell是全新开发的命令行客户端工具,不但支持对传统的SQL进行操作,也支持对Document Store的操作。除此之外,还内置了 APIs 和工具,可扩展功能并且开源!
作者信息
徐轶涛 甲骨文MySQL解决方案高级工程师,为中国及东北亚地区的MySQL用户提供MySQL相关产品的售前咨询,企业级产品介绍服务以及推广和普及MySQL数据库在社区的使用。
展开查看详情
1 .MySQL Shell MySQL DBA 的最佳工具 徐轶韬 MySQL Senior Solution Engineer MySQL, Oracle MySQL_SE MySQL解决方案工程师
2 .Safe harbor statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation. 2
3 .背景 MySQL 经历了26年的发展 流行的关系型数据库: • SQL • MySQL的命令行客户端: mysql 但是MySQL不仅仅是关系型数据库... 3
4 .MySQL Shell MySQL最新的命令行客户端 全新开发的工具,支持如下功能: • MySQL Document Store (NoSQL, X DevAPI) • JSON 文档 / SQL 表 • SQL, Python 和 JavaScript • 定制化 4
5 . MySQL Shell 的东西比表面上看到的要多得多! 5
6 .MySQL Shell DBA和开发者的工具箱: • 支持 SQL, JavaScript 和 Python • 命令自动补全 • 历史命令 • 集成内置帮助系统 • 可定制的提示/颜色 • 内置 APIs 和工具 • 可扩展 • 开源! 6
7 . MySQL Shell 概览 7
8 . MySQL Shell 概览 8
9 .MySQL 工具箱 MySQL 协议: • mysql • mysqlx 9
10 .MySQL 工具箱 MySQL 协议: ShellAPI: • mysql • OS 工具 • mysqlx • 通用函数 • 生成报告 • 生成插件 • 管理凭据 10
11 .MySQL 工具箱 MySQL 协议: ShellAPI: AdminAPI: • mysql • OS 工具 • InnoDB Cluster • mysqlx • 通用函数 • InnoDB ReplicaSet • 生成报告 • Sandboxes • 生成插件 • 管理凭据 11
12 .MySQL 工具箱 MySQL 协议: ShellAPI: AdminAPI: 工具: • mysql • OS 工具 • InnoDB Cluster • 升级检查 • mysqlx • 通用函数 • InnoDB • JSON 导入 ReplicaSet • 生成报告 • 并行导入表 • Sandboxes • 生成插件 • 转储实例和模式 • 管理凭据 • 转储加载 12 Copyright © 2020, Oracle and/or its affiliates
13 .支持多语言 • SQL • JavaScript • 完整的 JS 引擎 (V8) • 全部的核心语言功能 • Python • 3.6+ 13
14 .友好的体验 • 自动补全 • 定制提示符(带有颜色和状态信息) 14
15 .友好的体验 • 自动补全 • 定制提示符(带有颜色和状态信息) • 历史命令; Pager: more/less 15
16 .友好的体验 • 整合内置帮助系统 • 访问方式: • \? <topic> • \help <topic> • 全部可用功能 16
17 .内置 APIs • APIs用于MySQL交互和管理 • 全部的APIs 在JavaScript 和 Python 中均可使用: • X DevAPI • ShellAPI • AdminAPI • 灵活性和选择性 17
18 .Database APIs 经典协议 // Print a welcome message println('Create a local MySQL account with special privileges.'); // Prompt for the username if not passed by argument if (sys.argv[1] == undefined) { username = shell.prompt('Please enter the username for the account: '); } else { username = sys.argv[1]; } // Prompt for the password pwd = shell.prompt('Please enter a password for the account ' + username + ': ', {type: 'password'}); 18
19 .Database APIs 经典协议 // List of required grants var grantsList = [ 'USAGE ON *.*', 'SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES ON world_x.*' ]; try { // Create the account session.runSql('CREATE USER ?@\'localhost\' IDENTIFIED BY ?', [username, pwd]); for (var grant in grantsList) { session.runSql('GRANT ' + grantsList[grant] + 'TO ?@\'localhost\'', [username]) } } catch (err) { (...) } 19
20 .多个MySQL连接 • 同时使用多个MySQL会话 • 使用 ShellAPI 和/或 X DevAPI Example in Python: session1 = mysql.get_session("admin@t480:3330") session2 = mysql.get_session("root@localhost:3306") session1.run_sql("SELECT @@hostname, @@port;") result = session2.run_sql("SELECT * FROM performance_schema.global_status;") row = result.fetch_all() print(row[10]) 20
21 .工具 • DBA 关注: • 升级检查器 • JSON 导入 • 并行导入表Parallel table import • Dump & load • 会话检查 • ShellAPI util 模块公开 21 Copyright © 2020, Oracle and/or its affiliates
22 .升级检查器 • 检查升级至MySQL8 的兼容性问题 • 5.7 à 8.0+ (当前的Shell版本支持) • 对要求的行为发出警告: • 弃用/冲突配置 • 需要更改模式的属性 • 检查.cnf 文件 // Available through the util object mysqlsh-js> util.checkForServerUpgrade("root@localhost"); 22
23 .升级检查器 23
24 .集成 API 的命令行 • 所有API都可以在命令行中使用 • 可使用特殊分隔符-- • 参数遵循适合命令行使用的语法: mysqlsh [shell options] -- <object> <command> [command options] Example: mysqlsh admin@t480 -- cluster status --extended=1 24
25 .集成 API 的命令行 • Puppet 集成Shell的升级检查器 : service { 'mysql': ensure => latest, enable => true, require => Package ['mysql-server-community'], before => Exec ['upgrade checker'] } exec { "upgrade checker": command => "mysqlsh -- util check-for-server-upgrade --user=root --host=localhost --port=33100 --password='mypassword'" require => service["mysql"] } 25
26 .JSON 导入 • 将JSON文档导入集合或关系型表 • 无需写多个 INSERT 语句和脚本 • 支持 BSON 数据类型 // Available through the util object mysqlsh-js> util.importJson("/home/miguel/banks.json", {schema: "docstore", collection: "banks"}) // Very handy to be used with the API command-line integration $ mysqlsh admin@localhost/docstore -- util import-json banks.json --collection=banks 26
27 .转储 & 加载 • 强大的实用程序,可以方便地进行转储和加载 : • 完整的数据库实例 • 一组模式的集合 • 聚焦易用性: // Dump and entire database instance, including users util.dumpInstance(...) // Dump a set of schemas util.dumpSchemas(...) // Load a dump into a target database util.loadDump(...) 27
28 .转储 & 加载 • 聚焦性能: • 多线程转储和加载 • 转储和加载并行执行 • 内置压缩(zstd & gzip) • 聚焦整合性: • 直接转储&加载至 OCI Object Storage • 兼容 OCI MySQL Database Service 28
29 .转储 & 加载 29