MySQL程序之:使用类似URI的字符串或键值对连接到服务器

本节介绍使用类似URI的连接字符串或键值对来指定如何为MySQLShell等客户端建立到MySQL服务器的连接。

以下MySQL客户端支持使用类似URI的连接字符串或键值对连接到MySQL服务器:

  • MySQL Shell
  • 实现X DevAPI的MySQL连接器

本节记录了所有有效的类似URI的字符串和键值对连接参数的影响,其中许多与命令行选项指定的相似:

  • 使用类似URI的字符串指定的参数使用myuser@example.com:3306/main-schema等语法。
  • 使用键值对指定的参数使用以下语法{user:'myuser', host:'example.com', port:3306, schema:'main-schema'}

连接参数不区分大小写。如果指定,每个参数只能给出一次。如果一个参数被指定多次,则会发生错误。

基础连接参数

以下讨论描述了指定与MySQL的连接时可用的参数。这些参数可以使用符合基本类似URI语法的字符串(请参阅使用类似URI的连接字符串进行连接)或作为键值对(请参阅使用键值对进行连接)提供。

  • scheme:要使用的传输协议。X协议连接使用mysqlx,经典MySQL协议连接使用mysql。如果未指定协议,服务器会尝试猜测协议。支持域名系统SRV的连接器可以使用mysqlx+srv方案(请参阅使用DNS SRV记录的连接)。
  • user:MySQL为用户帐户提供鉴权过程。

  • password:用于鉴权过程的密码。在连接规范中指定显式密码不安全且不推荐。稍后的讨论将展示如何导致密码出现交互式提示。

  • host:运行服务器实例的主机。该值可以是主机名、IPv4地址或IPv6地址。如果未指定主机,则默认为localhost

  • port:目标MySQL服务器侦听连接的TCP/IP网络端口。如果未指定端口,则X协议连接默认为33060,经典MySQL协议连接默认为3306。

  • socket:Unix套接字文件的路径或Windows命名管道的名称。值是本地文件路径。在类似URI的字符串中,它们必须使用百分比编码或用括号包围路径进行编码。括号消除了百分比编码字符的需要,例如/目录分隔符字符。例如,要使用Unix套接字连接为root@localhost/tmp/mysql.sock,使用百分比编码指定路径为root@localhost?socket=%2Ftmp%2Fmysql.sock,或使用括号作为root@localhost?socket=(/tmp/mysql.sock)

  • schema:连接的默认数据库。如果未指定数据库,则连接没有默认数据库。

Unix对localhost的处理取决于传输协议的类型。使用经典MySQL协议的连接处理localhost与其他MySQL客户端相同的方式,这意味着localhost被假定为基于套接字的连接。对于使用X协议的连接,localhost的行为不同之处在于它被假定为表示环回地址,例如IPv4地址127.0.0.1。

附加连接参数

您可以指定连接的选项,通过附加?attribute=value作为类URI字符串中的属性,或者作为键值对。以下选项可用:

  • ssl-mode:连接所需的安全状态。以下模式是允许的:DISABLED、PREFERRED、REQUIRED、VERIFY_CA、VERIFY_IDENTITY,重要:VERIFY_CA并且VERIFY_IDENTITY是比默认的PREFERRED更好的选择,因为它们有助于防止中间人攻击。

  • ssl-ca:PEM格式的X.509证书颁发机构文件的路径。

  • ssl-capath:包含PEM格式的X.509证书授权文件的目录的路径。

  • ssl-cert:PEM格式的X.509证书文件的路径。

  • ssl-cipher:用于通过TLSv1.2使用TLS协议的连接的加密密码。

  • ssl-crl:包含PEM格式证书吊销列表的文件的路径。

  • ssl-crlpath:包含PEM格式证书吊销列表文件的目录的路径。

  • ssl-key:PEM格式的X.509密钥文件的路径。

  • tls-version:经典MySQL协议加密连接允许的TLS协议。此选项仅受MySQLShell支持。tls-version(单数)的值是逗号分隔的列表,例如TLSv1.2、TLSv1.3。有关详细信息,请参阅“加密连接TLS协议和密码”。此选项取决于未设置为DISABLED的ssl-mode选项。
  • TLS-版本:加密X协议连接允许的TLS协议。TLS-版本的值(复数)是一个数组,例如[TLSv1.2, TLSv1.3]。有关详细信息,请参阅,“加密连接TLS协议和密码”。此选项取决于未设置为DISABLED的ssl模式选项。
  • tls-ciphersuites:允许的TLS密码套件。tls-ciphersuites的值是TLS密码套件中列出的IANA密码套件名称列表。有关详细信息,请参阅“加密连接TLS协议和密码”。此选项取决于未设置为DISABLED的ssl-mode选项。
  • auth-method:用于连接的鉴权方法。默认为AUTO,表示服务器尝试猜测。以下方法是允许的:AUTO、MYSQL41、SHA256_MEMORY、FROM_CAPABILITIES、FALLBACK、PLAIN,对于X协议连接,任何配置auth-method都将被覆盖到以下鉴权方法序列:MYSQL41SHA256_MEMORYPLAIN

  • get-server-public-key:向服务器请求基于RSA密钥对的密码交换所需的公钥。通过SSL模式的经典MySQL协议连接到MySQL8+台服务器时使用DISABLED。在这种情况下,您必须指定协议。例如:

    mysql://user@localhost:3306?get-server-public-key=true

    此选项适用于使用caching_sha2_password鉴权插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换,也会忽略此选项,例如客户端使用安全连接连接到服务器时。

    如果给出server-public-key-path=file_name并指定有效的公钥文件,则它优先于get-server-public-key

  • server-public-key-path: PEM格式文件的路径名,其中包含服务器进行基于RSA密钥对的密码交换所需的公钥的客户端副本。通过SSL模式的经典MySQL协议连接到MySQL8+服务器时使用DISABLED

    此选项适用于使用sha256_password(已弃用)或caching_sha2_password鉴权插件进行身份验证的客户端。对于未使用这些插件之一进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换,也会忽略此选项,例如客户端使用安全连接连接到服务器时。

    如果给出server-public-key-path=file_name并指定有效的公钥文件,则它优先于get-server-public-key

  • ssh:使用SSH隧道连接到SSH服务器以访问MySQL服务器实例的URI。URI格式为[user@]host[:port]。使用uri选项指定目标MySQL服务器实例的URI。
  • uri:要通过SSH隧道从ssh选项指定的服务器访问的MySQL服务器实例的URI。URI格式为[scheme://][user@]host[:port]。不要使用基本连接参数(schemeuserhostport)来指定SSH隧道的MySQL服务器连接,只需使用uri选项。

  • ssh-password:连接到SSH服务器的密码。警告:在连接规范中指定显式密码不安全且不推荐。MySQLShell会在需要密码时以交互方式提示输入密码。

  • ssh-config-file:连接SSH服务器的SSH配置文件。如果未指定MySQLShell配置选项ssh.configFile,可以使用该选项将自定义文件设置为默认值。如果未设置ssh.configFile,则默认为标准SSH配置文件~/.ssh/config

  • ssh-identity-file:用于连接到SSH服务器的标识文件。如果未指定此选项,则默认为在SSH代理(如果使用)、SSH配置文件或SSH配置文件夹(~/. ssh/id_rsa~/.ssh/id_rsa

  • ssh-identity-pass:标识文件的密码由ssh-identity-file选项指定。警告:在连接规范中指定显式密码不安全且不推荐。MySQLShell会在需要密码时以交互方式提示输入密码。

  • connect-timeout:一个整数值,用于配置客户端(如MySQLShell)在停止尝试连接到无响应MySQL服务器之前等待的秒数。

  • compression:此选项请求或禁用连接的压缩。

    此选项可用的值是:required,请求压缩,如果服务器不支持,则失败;preferred,请求压缩并回退到未压缩的连接;disabled,请求未压缩的连接,如果服务器不允许,则失败。preferred是X协议连接的默认值,disabled是经典MySQL协议连接的默认值。有关X插件连接压缩控制的信息,请参阅“使用X插件进行连接压缩”。注:不同的MySQL客户端实现其对连接压缩的支持不同。有关详细信息,请参阅客户端的留档。

  • compression-algorithmscompression-level:这些选项在MySQLShell中提供,可以更好地控制连接压缩。您可以指定它们来选择用于连接的压缩算法以及用于该算法的数字压缩级别。您还可以使用compression-algorithms代替compression来请求连接的压缩。
  • connection-attributes:控制应用程序在连接时传递给服务器的键值对。有关连接属性的一般信息,请参见“性能架构连接属性表”。客户端通常定义一组默认属性,可以禁用或启用。例如:

    mysqlx://user@host?connection-attributes
    mysqlx://user@host?connection-attributes=true
    mysqlx://user@host?connection-attributes=false

    默认行为是发送默认属性集。除了默认属性之外,应用程序还可以指定要传递的属性。您可以将其他连接属性指定为连接字符串中的connection-attributes参数。connection-attributes参数值必须为空(与指定true相同)、Boolean值(truefalse以启用或禁用默认属性集)或列表或零个或多个key=value

    mysqlx://user@host?connection-attributes=[attr1=val1,attr2,attr3=]
    mysqlx://user@host?connection-attributes=[]

    应用程序定义的属性名称不能以_开头,因为这些名称是为内部属性保留的。

使用类似URI的连接字符串进行连接

您可以使用类似URI的字符串指定与MySQL Server的连接。此类字符串可以与带有--uri命令选项的MySQL Shell、MySQL Shell\connect命令和实现X DevAPI的MySQL Connectors一起使用。

类似URI的连接字符串具有以下语法:

[scheme://][user[:[password]]@]host[:port][/schema][?attribute1=value1&attribute2=value2...

重要:百分比编码必须用于类URI字符串元素中的保留字符。例如,如果指定包含@字符的字符串,则该字符必须替换为%40。如果在IPv6地址中包含区域ID,则用作分隔符的%字符必须替换为%25

MySQLShell的shell.parseUri()shell.unparseUri()方法可用于解构和组装类似URI的连接字符串。给定一个类似URI的连接字符串,shell.parseUri()返回一个字典,其中包含字符串中找到的每个元素。shell.unparseUri()将URI组件和连接选项的字典转换为有效的类似URI的连接字符串,用于连接到MySQL,可以在MySQLShell或实现X DevAPI的MySQL连接器中使用。

如果建议在类URI字符串中未指定密码,则交互式客户端会提示输入密码。以下示例显示如何使用用户名user_name指定类URI字符串。在每种情况下,都会提示输入密码。

  • 与侦听端口33065的本地服务器实例的X协议连接。

    mysqlx://user_name@localhost:33065

  • 与侦听端口3333的本地服务器实例的经典MySQL协议连接。

    mysql://user_name@localhost:3333

  • 使用主机名、IPv4地址和IPv6地址与远程服务器实例的X协议连接。

    mysqlx://user_name@server.example.com/
    mysqlx://user_name@198.51.100.14:123
    mysqlx://user_name@[2001:db8:85a3:8d3:1319:8a2e:370:7348]

  • 使用套接字的X协议连接,使用百分比编码或括号提供路径。

    mysqlx://user_name@/path%2Fto%2Fsocket.sock
    mysqlx://user_name@(/path/to/socket.sock)

  • 可以指定表示数据库的可选路径。

    # use 'world' as the default database
    mysqlx://user_name@198.51.100.1/world# use 'world_x' as the default database, encoding _ as %5F
    mysqlx://user_name@198.51.100.2:33060/world%5Fx

  • 可以指定一个可选查询,每个查询都包含key=value对或单个key。要指定多个值,请用字符分隔它们,允许混合使用key=valuekey。值可以是list类型,列表值按外观排序。字符串必须以百分比编码或用括号括起来。以下是等效的。

    ssluser@127.0.0.1?ssl-ca=%2Froot%2Fclientcert%2Fca-cert.pem\
    &ssl-cert=%2Froot%2Fclientcert%2Fclient-cert.pem\
    &ssl-key=%2Froot%2Fclientcert%2Fclient-keyssluser@127.0.0.1?ssl-ca=(/root/clientcert/ca-cert.pem)\
    &ssl-cert=(/root/clientcert/client-cert.pem)\
    &ssl-key=(/root/clientcert/client-key)

  • 要指定用于加密连接的TLS版本和密码套件:

    mysql://user_name@198.51.100.2:3306/world%5Fx?\
    tls-versions=[TLSv1.2,TLSv1.3]&tls-ciphersuites=[TLS_DHE_PSK_WITH_AES_128_\
    GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256]

    前面的示例假定连接需要密码。对于交互式客户端,在登录提示时请求指定用户的密码。如果用户帐户没有密码(这是不安全的,不推荐使用),或者使用套接字对等凭据鉴权(例如,Unix套接字连接),则必须在连接字符串中明确指定不提供密码,也不需要密码提示。为此,请在字符串中的user_name之后放置:,但不要在其后面指定密码。例如:

    mysqlx://user_name:@localhost
使用键值对进行连接

在MySQLShell和一些实现X DevAPI的MySQL连接器中,您可以使用键值对来指定到MySQLServer的连接,这些键值对是为实现提供的语言自然结构。例如,您可以使用键值对作为JavaScript中的JSON对象或Python中的字典来提供连接参数。无论键值对的提供方式如何,概念都保持不变:可以为本节中描述的键分配用于指定连接的值。您可以使用MySQLShell的shell. connect()方法或InnoDB簇的dba.createCluster()方法中的键值对来指定连接,也可以使用一些实现X DevAPI的MySQL连接器来指定连接。

通常,键值对由{和}字符包围,字符用作键值对之间的分隔符。:字符用于键和值之间,字符串必须分隔(例如,使用'字符)。与类似URI的连接字符串不同,不需要百分比编码字符串。

指定为键值对的连接具有以下格式:

{ key: value, key: value, ...}

可以用作连接键的参数在基本连接参数中进行了描述。

如果键值对中未指定密码(建议这样做),则交互式客户端会提示输入密码。以下示例显示如何使用用户名“user_name”的键值对指定连接。在每种情况下,都会提示输入密码。

  • 与侦听端口33065的本地服务器实例的X协议连接。

    {user:'user_name', host:'localhost', port:33065}

  • 与侦听端口3333的本地服务器实例的经典MySQL协议连接。

    {user:'user_name', host:'localhost', port:3333}

  • 使用主机名、IPv4地址和IPv6地址与远程服务器实例的X协议连接。

    {user:'user_name', host:'server.example.com'}
    {user:'user_name', host:198.51.100.14:123}
    {user:'user_name', host:[2001:db8:85a3:8d3:1319:8a2e:370:7348]}

  • 使用套接字的X协议连接。

    {user:'user_name', socket:'/path/to/socket/file'}

  • 可以指定一个可选的schema,它代表一个数据库。

    {user:'user_name', host:'localhost', schema:'world'}

前面的示例假定连接需要密码。对于交互式客户端,在登录提示时请求指定用户的密码。如果用户帐户没有密码(这是不安全的,不推荐使用),或者使用套接字对等凭据鉴权(例如,Unix套接字连接),则必须明确指定不提供密码,也不需要密码提示。为此,请在password键后使用''提供空字符串。例如:

{user:'user_name', password:'', host:'localhost'}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3183.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch使用教程(2)-torch包

1、简介 torch包是PyTorch框架最外层的包,主要是包含了张量的创建和基本操作、随机数生成器、序列化、局部梯度操作的上下文管理器等等,内容很多。我们基础学习的时候,只有关注张量的创建、序列化,随机数、张量的数学数学计算等常…

Matplotlib基础

概述 1、什么是Matplotlib 是专门用于开发2D图表(包括3D图表)以渐进、交互式方式实现数据可视化 2、为什么要学习Matplotlib 可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。 能将数据进行可视化,更直观的呈现使数据…

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好,因为工具代表着一定的先进性;但是IDEA 2024好好的给我上了一课,比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…

EI Scopus双检索 | 2025年第四届信息与通信工程国际会议(JCICE 2025)

会议简介 Brief Introduction 2025年第四届信息与通信工程国际会议(JCICE 2025) 会议时间:2025年7月25日-27日 召开地点:中国哈尔滨 大会官网:www.jcice.org 由黑龙江大学和成都信息工程大学主办,江苏科技大学协办的2025年第四届信…

JavaWeb 前端基础 html + CSS 快速入门 | 018

今日推荐语 指望别人的救赎,势必走向毁灭——波伏娃 日期 学习内容 打卡编号2025年01月17日JavaWeb 前端基础 html CSS018 前言 哈喽,我是菜鸟阿康。 今天 正式进入JavaWeb 的学习,简单学习 html CSS 这2各前端基础部分&am…

Flask学习入门笔记

Flask学习入门笔记 前言1. 安装Flask2. 创建一个简单的Flask应用3. 路由与视图函数3.1 基本路由3.2 动态路由3.3 HTTP方法 4. 请求与响应4.1 获取请求数据4.2 返回响应 5. 模板渲染5.1 基本模板渲染5.2 模板继承 6. 静态文件6.1 静态文件的目录结构6.2 在模板中引用静态文件6.2…

菜品管理(day03)

公共字段自动填充 问题分析 业务表中的公共字段: 而针对于这些字段,我们的赋值方式为: 在新增数据时, 将createTime、updateTime 设置为当前时间, createUser、updateUser设置为当前登录用户ID。 在更新数据时, 将updateTime 设置为当前时间…

Python股票量化交易分析-开发属于自己的指标

需求:股票的量化交易指标很多,我想做一个自己的量化交易图表: 展示每天交易量和股价振幅的关系图进一步的话想知道单位金额对股价振幅的影响,最终实现大概估计需要多少买入成交量能拉升多少股价) , 目前未…

python爬虫爬取淘宝商品比价||淘宝商品详情API接口

最近在学习北京理工大学的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息,现整理如下: 功能描述:获取淘宝搜索页面的信息,提取其中的商品名称和价格 探讨:淘宝的搜索接口 翻页的处理 技术路线:requests…

OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为已校准的立体相机的每个头计算校正变换。 cv::stereoRectify 是 OpenCV 中用于立体校正的函数,它基于已知的相机参数和相对位置&am…

1.17组会汇报

STRUC-BENCH: Are Large Language Models Good at Generating Complex Structured Tabular Data? STRUC-BENCH:大型语言模型擅长生成复杂的结构化表格数据吗?23年arXiv.org 1概括 这篇论文旨在评估大型语言模型(LLMs)在生成结构…

【机器学习实战入门】使用 Pandas 和 OpenCV 进行颜色检测

Python 颜色检测项目 今天的项目将非常有趣和令人兴奋。我们将与颜色打交道,并在项目过程中学习许多概念。颜色检测对于识别物体来说是必要的,它也被用作各种图像编辑和绘图应用的工具。 什么是颜色检测? 颜色检测是检测任何颜色名称的过程…

【k8s面试题2025】3、练气中期

体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…

数智化转型 | 星环科技Defensor 助力某银行数据分类分级

在数据驱动的金融时代,数据安全和隐私保护的重要性日益凸显。某银行作为数字化转型的先行者,面临着一项艰巨的任务:如何高效、准确地对分布在多个业务系统、业务库与数仓数湖中的约80万个字段进行数据分类和分级。该银行借助星环科技数据安全…

mac配置 iTerm2 使用lrzsz与服务器传输文件

mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…

redis 分布式重入锁

文章目录 前言一、分布式重入锁1、单机重入锁2、redis重入锁 二、redisson实现重入锁1、 添加依赖2、 配置 Redisson 客户端3、 使用 Redisson 实现重入锁4、 验证5、运行项目 三、redisson分布式锁分析1、获取锁对象2、 加锁3、订阅4、锁续期5、释放锁6、流程图 前言 通过前篇…

【git】如何删除本地分支和远程分支?

1.如何在 Git 中删除本地分支 本地分支是您本地机器上的分支,不会影响任何远程分支。 (1)在 Git 中删除本地分支 git branch -d local_branch_name git branch 是在本地删除分支的命令。-d是一个标志,是命令的一个选项&#x…

关于 Cursor 的一些学习记录

文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1:提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…

使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级的封装(包括调用Json文件))

一、API的选择 我们进行接口测试需要API文档和系统,我们选择JSONPlaceholder免费API,因为它是一个非常适合进行接口测试、API 测试和学习的工具。它免费、易于使用、无需认证,能够快速帮助开发者模拟常见的接口操作(增、删、改、…

【Rust自学】13.2. 闭包 Pt.2:闭包的类型推断和标注

13.2.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中,我们会讨论 Rust 的一…