分享到

简介

在使用 MySQL 数据库时,首先需要考虑的是如何连接和与数据库实例进行交互。这需要数据库客户端(你用来与数据库交互的组件)和数据库服务器(存储、组织和提供数据访问的实际 MySQL 实例)之间的协调。

因此,你需要了解如何通过提供所需信息进行认证以作为客户端连接。在本指南中,我们将介绍如何使用原生的 mysql 命令行客户端 连接到 MySQL 数据库——这是与数据库实例交互最常见和最有用的方式之一。

在另一篇配套指南中,你可以了解如何 配置 MySQL 的认证以满足你的项目需求。建议阅读这两篇指南,以更全面地了解 MySQL 中认证的工作原理。

关于 mysql 客户端的基本信息

mysql 客户端是 MySQL 的默认命令行客户端和 SQL shell。你可以使用它以交互方式启动与服务器的 shell 会话,也可以向其提供 SQL 文件以在没有用户交互的情况下运行。它在实现配置选项和设置环境时特别有用。在开发程序将使用的访问模式时,交互式探索和即席查询也是其强项。

连接和 认证 MySQL 服务器的方式取决于你的服务器配置。在以下部分,我们将介绍一些基本的连接选项。为了清晰起见,我们将区分本地连接和远程连接

  • 本地连接:客户端和 MySQL 实例位于同一服务器上的连接
  • 远程连接:客户端连接到运行在不同计算机上的网络可访问 MySQL 实例

让我们从连接到同一台计算机上的数据库开始。

使用 mysql 连接到本地数据库

在没有任何参数的情况下,mysql 命令会尝试连接到 Unix 套接字文件 以访问本地数据库。通常,默认的套接字文件位置由配置文件或编译时默认值确定。默认情况下,你的操作系统用户名将用于尝试连接到数据库。

因此,如果你的当前用户是本地数据库上的有效 MySQL 用户,你可以尝试输入以下内容进行连接

mysql

如果账户存在且不需要密码,或者为该账户配置了 MySQL 套接字认证,你将自动登录。如果 MySQL 中不存在该用户名,或者需要密码或其他认证,则该命令将失败。

要控制 mysql 尝试登录数据库的方式,请使用命令行选项在命令中传递额外信息

  • --user=<username>-u <username>:指定用于认证的 MySQL 用户名。
  • --password-p:告诉 MySQL 提示输入 MySQL 用户的密码。
  • --host=127.0.0.1-h 127.0.0.1:告诉 mysql 使用本地 TCP 回环地址而非 Unix 套接字连接到本地 MySQL 实例。如果你的 MySQL 服务器未配置使用 Unix 套接字,则此选项非常重要。

注意: MySQL 对 127.0.0.1 的解释与对 localhost 的解释不同。指定 127.0.0.1 表示你希望使用 TCP 连接,而 localhost 将使 MySQL 尝试使用 Unix 套接字连接到本地数据库。

因此,如果你需要以 MySQL 用户 eva 身份登录并使用密码,但仍使用 Unix 套接字连接,你可以输入

mysql --user=eva --password

mysql 客户端将提示你输入账户密码。

如果你想尝试以相同用户名通过 TCP 连接登录到本地数据库,你将输入

mysql --user=eva --password --host=127.0.0.1

默认的认证配置以及初始管理用户名和密码可能因 MySQL 的安装方式而异。然而,许多方法都会设置 MySQL 使用 Unix 套接字并包含一个默认的 root 用户作为管理账户。

在这些情况下,你可以通过输入以下内容以 root 用户身份登录数据库

mysql --user=root --password

系统将提示你输入安装期间选择或生成的管理密码以继续。

所有这些方法都允许你连接到本地 MySQL 数据库。

连接到远程数据库

如果你希望连接到远程 MySQL 数据库,你将需要提供远程主机的网络位置,并可能添加一些额外信息。

可用的认证方法根据 MySQL 实例的配置而异。但最常见的是,你需要提供以下参数进行认证

选项描述
--host=-hMySQL 服务器的网络主机名或 IP 地址。
--port=-PMySQL 服务器运行的网络端口。如果服务器使用的是默认的 MySQL 端口 3306,则此参数可以省略。
--user=-u你希望连接的数据库用户名。如果未指定,将使用你的操作系统用户名。
--password-p表示你希望为指定账户提供密码。mysql 客户端在你按下 Enter 后将提示你输入密码。
MySQL 数据库你想要访问的 MySQL 数据库 名称。如果未指定,mysql 将连接到服务器,但不连接到特定的数据库。

连接到远程数据库的基本格式通常如下所示

mysql --host=<hostname> --port=<port> --user=<user> --password <database>

按下 Enter 后,mysql 客户端将提示你输入密码。如果认证成功,将启动一个新的交互式 MySQL 会话。

例如,我们可以设想连接到具有以下要求的数据库

  • 主机名:myhost
  • 端口:1234
  • 数据库:applicationdb
  • 用户名:myapplicationuser
  • 密码:mypass

使用以下选项调用 mysql 将允许你进行认证

mysql --host=myhost --port=1234 --user=myapplicationuser --password applicationdb

按下回车键后,系统会提示你输入密码,你可以用 mypass 进行认证。

调整 MySQL 服务器的认证配置

如果你想修改决定用户如何认证到 MySQL 实例的规则,你可以通过修改服务器配置来实现。你可以在本文中了解如何修改 MySQL 的认证配置。

结论

在本指南中,我们介绍了客户端的 MySQL 认证。我们演示了如何使用 mysql 命令行客户端连接到本地和远程数据库实例。

了解如何连接到各种 MySQL 实例是你开始使用数据库系统时需要理解的第一步。你可能运行一个不需要特殊认证的本地 MySQL 开发实例,但你在预生产和生产环境中的数据库几乎肯定需要认证。无论哪种情况,能够进行认证都将使你能够在不同环境中良好地工作。

常见问题

是的,你可以使用 Python 连接到 MySQL 数据库。你需要下载 MySQL Python 连接器并使用 connect() 构造函数。

连接器下载后,MySQL 提供了一份开发者指南

是的,你可以使用 Java 连接到 MySQL 数据库。你需要下载 MySQL Java 连接器。

MySQL 提供了一份连接器安装指南和入门示例。

如果你希望连接到远程 MySQL 数据库,你将需要提供远程主机的网络位置,并可能添加一些额外信息。

可用的认证方法根据 MySQL 实例的配置而异。但最常见的是,你需要提供以下参数进行认证

选项描述
--host=-hMySQL 服务器的网络主机名或 IP 地址
--port-PMySQL 服务器运行的网络端口。如果服务器使用的是默认的 MySQL 端口 3306,则此参数可以省略。
--user=-u你希望连接的数据库用户名。如果未指定,将使用你的操作系统用户名。
--password-p表示你希望为指定账户提供密码。mysql 客户端在你按下 Enter 后将提示你输入密码。
MySQL 数据库你想要访问的 MySQL 数据库名称。如果未指定,mysql 将连接到服务器,但不连接到特定的数据库。

MySQL 可以接受的连接数由 max_connections 变量控制。默认情况下,此值为 151。

如果需要,并且你的服务器有足够的 RAM 来支持增加的连接,你可以手动增加此值。

有几种方法可以识别 MySQL 数据库上的连接数。最常见的方法是通过 mysql 命令行。

你可以使用 threads_connected 变量,它会显示连接数。

你还可以使用 show processlist 命令,该命令指示服务器内正在执行的线程集当前正在执行的操作。

关于作者
Justin Ellingwood

Justin Ellingwood

自 2013 年以来,贾斯汀一直致力于撰写关于数据库、Linux、基础设施和开发者工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。
© . All rights reserved.