如何检测连接的数据库是 MariaDB 还是 MySQL?

Posted

技术标签:

【中文标题】如何检测连接的数据库是 MariaDB 还是 MySQL?【英文标题】:How can I detect whether connected database is MariaDB or MySQL? 【发布时间】:2017-09-22 12:06:57 【问题描述】:

我的 php 应用程序有要求,包括“mysql 5.7+ 或 MariaDB 10.2+”。我如何判断这些替代方案中的哪一个是满意的?

我知道如何比较版本号,也知道如何从数据库中获取版本号,但我不知道如何确定它是哪种数据库。

我试过了

select version()

这仅返回版本号和服务器操作系统信息,而不是数据库类型。

【问题讨论】:

【参考方案1】:

VARIABLES 中查找aria_block_size。它的存在几乎肯定意味着某些版本的 MariaDB 而不是 MySQL,也不是 Percona。 (至少在不久的将来。)

version的开头部分:

“5.7”和“8.0”暗示MySQL或Percona;这并不意味着 MariaDB。 "10.2" 暗示 MariaDB; MySQL 和 Percona 不太可能在很长一段时间内达到“10”。

您需要什么功能? Percona 有可能在 MariaDB 10.2 来自 MySQL 之前对其进行改造。

即使version5.1.53-rel11.7-log5.5.35-0ubuntu0.12.04.2-log,第一部分也会为您提供 MySQL/MariaDB/Percona 版本的重要部分。

Percona 版本如下所示:5.5.31-30.3-log5.6.30-76.3-56-log5.6.19-67.0-log -- 请注意初始 3 之后的额外 2 或 3 个数字。

MariaDB 总是以 N.N.N-MariaDB 开头

Oracle 的 MySQL 以N.N.N 开头,但可能会以-enterprise(付费版)、-community(免费版)、-0ubuntu0(由 Ubuntu 移植)、-Debian 等继续。

MariaDB:5.1、5.2、5.3、5.4、5.5、10.0、10.1、10.2、10.3、10.4、10.5 Oracle 和 Percona:5.1、5.5、5.6、5.7、8.0

8.0 周期才刚刚开始。这意味着 5.6 即将关闭,而 5.7 还剩下一些生命,但不会有太多新内容。

澄清什么是“主要”版本。 对于 MySQL(和 Percona),这些是“主要的”,它们不是 连续':5.1、5.5、5.6、5.7、8.0。 对于 MariaDB:5.1、5.2、5.3、5.4、5.5、10.0、10.1、10.2、10.3、10.4、10.5。

【讨论】:

是的,一次把专业从 5 换到 8 意味着他们不想很快赶上。 我添加了更多版本信息。 添加了“主要”版本的列表。 MySQL(和朋友)不考虑“5”。成为“主要”。相反,5.7 是主要的; 5.7.17 是“次要的”。【参考方案2】:
$info = $pdo->query("SHOW VARIABLES like '%version%'")->fetchAll(PDO::FETCH_KEY_PAIR);
$server_vendor  = strtok($info['version_comment']," ");
$server_version = $info['version'];

【讨论】:

实际上这些变量中的任何一个都包含数据库服务器名称,所以你的命令也只给我关于版本和操作系统的信息。 在某些情况下,它们包括“MySQL”或“mariadb.org”。也许所有 MariaDB 案例;我不能说。【参考方案3】:

如果您尝试从 php 应用程序内部执行此操作,您可以( 哪个 php 版本?)对于 PHP 7,使用 mysqli_get_server_info;或

    <?php
    $link = mysqli_connect("localhost", "my_user", "my_password");

    /* check connection */
    if (mysqli_connect_errno()) 
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    

    /* print server version */
    printf("Server version: %s\n", mysqli_get_server_info($link));

    /* close connection */
    mysqli_close($link);
    ?>

会回来

服务器版本:5.5.5-10.1.23-MariaDB-9+deb9u1

php 7 http://php.net/manual/en/mysqli.get-server-info.php php 5 & http://php.net/manual/en/function.mysql-get-server-info.php

【讨论】:

以上是关于如何检测连接的数据库是 MariaDB 还是 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB 使用错误的主机,无法连接 php 应用程序

Centos下搭建MariaDB集群

mariadb和apache安装

Mariadb半同步复制,主从复制与双主复制

Eclipse - 如何添加新的 MariaDB 连接

如何将MariaDB与Grails连接?