IBM Cloud Docs
管理 MySQL 连接

管理 MySQL 连接

与 IBM Cloud® Databases for MySQL 部署的连接使用资源,因此请考虑调整部署性能时需要多少连接。 MySQL 使用 max_connections 设置来限制连接数 (以及由连接使用的资源) ,以防止失控连接行为压倒部署的资源。

您可以使用 管理用户mysql来检查 max_connections 的值。 使用如下命令与 admin 用户一起检查 max_connections :

ibmclouddb=> SHOW max_connections;
 max_connections
-----------------
 200
(1 row)

如何计算 MySQL max_connections 变量

max_connections 是 MySQL 中的配置参数,用于确定可以与数据库服务器建立的最大并发连接数。

MySQL max_connections 基本公式

计算 max_connections 的基本公式为:

Available RAM = Global Buffers + (Thread Buffers x `max_connections`)

要检索缓冲区及其值的列表,请使用类似如下的命令:

SHOW VARIABLES LIKE '%buffer%';

MySQL 连接限制

在供应时, Databases for MySQL 将 MySQL 数据库的最大连接数设置为 200。 通过 更改 MySQL 配置来提高此值。

保留一些可用连接,因为许多连接是在内部保留的,以维护数据库的状态和完整性。

限制任何非管理员帐户的同时连接数。 例如,设置 max_user_connections=3 会将用户帐户限制为最多三个同时连接。

超过部署的连接限制将对数据库的运行状况产生负面影响,并导致应用程序无法访问该数据库。 达到连接限制后,任何启动新连接的尝试都会导致错误。

FATAL: remaining connection slots are reserved for
non-replication superuser connections

使用 admin 用户, mysqlSHOW GLOBAL STATUS访问有关与部署的连接的信息。

mysql> SHOW GLOBAL STATUS;
+-----------------------------------+------------+
| Variable_name                     | Value      |
+-----------------------------------+------------+
| Aborted_clients                   | 0          |
| Aborted_connects                  | 0          |
| Bytes_received                    | 155372598  |
| Bytes_sent                        | 1176560426 |
...
| Connections                       | 30023      |
| Created_tmp_disk_tables           | 0          |
| Created_tmp_files                 | 3          |
| Created_tmp_tables                | 2          |
...
| Threads_created                   | 217        |
| Threads_running                   | 88         |
| Uptime                            | 1389872    |
+-----------------------------------+------------+

要确定连接的位置,请使用类似如下的命令,在 threads_connected 变量的帮助下按数据库细分连接:

mysql> show status where `variable_name` = 'Threads_connected';

要进一步调查连接,请使用 SHOW PROCESSLIST 命令:

SHOW [FULL] PROCESSLIST;

结束 MySQL 连接

mysqld(即 MySQL Server) 的每个连接都在单独的线程中运行,并且可以使用类似如下的命令通过 processlist_id 语句停止:

KILL [CONNECTION | QUERY] processlist_id
  • 在停止连接正在运行的任何语句之后, KILL CONNECTION 将结束与 processlist_id相关联的连接。
  • KILL QUERY 结束正在运行连接的语句,但保留连接本身不变。

有关更多信息,请参阅 MySQL Reference Manual KILL Statement

结束 MySQL 连接

如果您的部署达到连接限制,或者您在连接到部署时迂到问题,并且怀疑大量连接是问题,请断开 (或结束) 与部署的所有连接。

在 UI 中的 设置 选项卡上,有一个按钮用于 End Connections 到您的部署。 请谨慎操作,因为这会中断与您的部署连接的任何内容。

在 CLI 中,使用如下命令结束与部署的连接:

ibmcloud cdb deployment-kill-connections <deployment name or CRN>

您还可以使用 Cloud Databases API 来执行结束所有连接操作。

MySQL 连接池

防止超过连接限制并确保高效处理来自应用程序的连接的一种方法是通过连接池。

MySQL 连接器 使您能够从其他语言或环境 (包括 ODBC, Java (JDBC) , C++ , Python, PHP , Perl, Ruby以及本机 C 和嵌入式 MySQL 实例) 连接和运行 MySQL 语句。

例如,使用 MySQL Connector/J 的连接池可以提高性能,同时降低总体使用率。 MySQL Connector/Python 还允许使用 mysql.connector.pooling 模块进行优化。