Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
phpMyAdmin复制错误:./libraries/dbi/DBIMysqli.class.php298_Mysql_Phpmyadmin_Replication_Mariadb - Fatal编程技术网

phpMyAdmin复制错误:./libraries/dbi/DBIMysqli.class.php298

phpMyAdmin复制错误:./libraries/dbi/DBIMysqli.class.php298,mysql,phpmyadmin,replication,mariadb,Mysql,Phpmyadmin,Replication,Mariadb,只需在运行于ubuntu 16.04的mysql 5.7主机和运行于我的Asustor NAS AS204-TE的MariaDB 10.0.28从机之间设置二进制日志复制 几次尝试后,复制工作正常,但我唯一担心的是当我从主页点击“复制”视图时,phpmyadmin显示两条错误消息 错误1: Warning in ./libraries/dbi/DBIMysqli.class.php#298 mysqli_fetch_array(): Malformed server packet. Field

只需在运行于ubuntu 16.04的mysql 5.7主机和运行于我的Asustor NAS AS204-TE的MariaDB 10.0.28从机之间设置二进制日志复制

几次尝试后,复制工作正常,但我唯一担心的是当我从主页点击“复制”视图时,phpmyadmin显示两条错误消息

错误1:

Warning in ./libraries/dbi/DBIMysqli.class.php#298
 mysqli_fetch_array(): Malformed server packet. Field length pointing 0 bytes after end of packet

Backtrace

./libraries/dbi/DBIMysqli.class.php#298: mysqli_fetch_array(
object,
integer 1,
)
./libraries/DatabaseInterface.class.php#2760: PMA_DBI_Mysqli->fetchAssoc(object)
./libraries/DatabaseInterface.class.php#2069: PMA_DatabaseInterface->fetchAssoc(object)
./libraries/replication_gui.lib.php#612: PMA_DatabaseInterface->fetchResult(
string 'SHOW SLAVE HOSTS',
NULL,
NULL,
)
./libraries/replication_gui.lib.php#56: PMA_getHtmlForReplicationSlavesTable(boolean true)
./server_replication.php#56: PMA_getHtmlForMasterReplication()
错误2:

Warning in ./libraries/dbi/DBIMysqli.class.php#298
 mysqli_fetch_array(): Error while reading a row

Backtrace

./libraries/dbi/DBIMysqli.class.php#298: mysqli_fetch_array(
object,
integer 1,
)
./libraries/DatabaseInterface.class.php#2760: PMA_DBI_Mysqli->fetchAssoc(object)
./libraries/DatabaseInterface.class.php#2069: PMA_DatabaseInterface->fetchAssoc(object)
./libraries/replication_gui.lib.php#612: PMA_DatabaseInterface->fetchResult(
string 'SHOW SLAVE HOSTS',
NULL,
NULL,
)
./libraries/replication_gui.lib.php#56: PMA_getHtmlForReplicationSlavesTable(boolean true)
./server_replication.php#56: PMA_getHtmlForMasterReplication()
因此,按照一点逻辑,错误消息似乎围绕列出连接到主节点的从属节点而展开。因此,我单击错误上的“全部忽略”,然后单击“显示连接的从属服务器”链接,该链接只显示一个提示,以确保在从属服务器上设置了-report host=xxx。我已经确认mysql MariaDB实例正在从机上使用所需参数启动,并通过主机上的命令行进入mysql,并发出SHOW slave HOSTS命令;给我以下输出

mysql> show slave hosts;
+-----------+----------+------+-----------+------------+
| Server_id | Host     | Port | Master_id | Slave_UUID |
+-----------+----------+------+-----------+------------+
|         2 | blacknas | 3306 |         1 |            |
+-----------+----------+------+-----------+------------+
1 row in set (0.00 sec)

我不清楚下一步应该做什么来进一步调试这个问题,所以希望有人能给我指点一下?

好的,我自己回答这个问题,因为我觉得用PHP提交bug需要一段时间

这不是phpMyAdmin的错误,而是由PHP中的mysqli扩展生成的错误,可以使用下面的代码进行复制,因为代码片段属于nijel,他在github上发现了我的问题

<?php
error_reporting(E_ALL);

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

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

$query = "SHOW SLAVE HOSTS";
$result = mysqli_query($link, $query);

/* get associative array */
while (($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) !== null) {
    print_r($row);
}

/* free result set */
mysqli_free_result($result);

/* close connection */
mysqli_close($link);
?>
我相信mysqli扩展之所以抱怨,是因为发出的命令应该返回4个值,但在我的用例中,它只返回3个值。这是因为MariaDB slave没有实现server_uuid特性,而它的MySQL对应项因此从slave到guest的返回值不完整,这与错误消息所说的内容有些一致。我向PHP提交的bug有望澄清mysqli扩展是否能够更好地容忍这些细微差别。由于我的复制用例是由开发人员记录的,我本以为应该这样做,但事实并非如此

无论如何,为了在某种程度上证明我的理论,我创建了一个测试容器,部署了ubuntulamp包和phpmyadmin,并重新创建了这个场景,但对主服务器和从服务器都使用了mysql。随着服务器uuid的实现,“SHOW SLAVE HOSTS;”命令返回所有4个值,并且上面的测试脚本以及phpMyAdmin不再发出呜呜声


复制确实在起作用,所以这是一个让我很烦恼的问题。

所以我在任何地方都找不到任何其他关于同一问题的参考资料,我想我可能需要在github上升级到一个问题,除非有人能提供替代方案?提出了一个问题,很快就解决了,并得出结论这是一个PHP到mysql的问题。现在,我们已经通过ubuntu的bug fix在经过测试的最新PHP7.0.17包中发现了一个bug,但问题仍然存在。现在已经提出了php。