
在使用phpmyadmin管理多个数据库服务器时,开发者常遇到一个困扰:即使在config.inc.php文件中添加了多个服务器配置,phpmyadmin登录界面也可能只显示一个服务器,或者出现空白页面的异常。这通常是由于对phpmyadmin配置数组$cfg['servers']的索引处理不当,以及对不同服务器配置块的组织方式理解有误导致的。
例如,直接在配置文件中通过手动递增 $i 变量来定义服务器,或者混合使用动态(如通过外部变量$dbname、$dbserver等)和静态配置,往往会导致索引冲突或配置被覆盖。phpMyAdmin要求每个服务器配置都必须拥有一个唯一的、从1开始递增的数字索引。如果索引处理不当,后续的配置可能会覆盖之前的配置,或者导致phpMyAdmin无法正确解析所有服务器信息,进而无法在登录界面展示服务器选择下拉列表。
为了解决上述问题,phpMyAdmin官方推荐使用一种结构化的方式来配置多个服务器,即通过一个循环来动态生成每个服务器的配置块。这种方法确保了每个服务器都拥有独立的配置,并且索引处理得当。这种模式在phpMyAdmin的安装目录下的examples/config.manyhosts.inc.php示例文件中可以找到。
核心思想是创建一个包含所有服务器主机地址的数组,然后遍历这个数组,为每个主机地址生成一个独立的服务器配置。
以下是根据官方推荐并结合实际需求优化的多服务器配置示例。请将此代码段添加到您的phpMyAdmin配置文件(通常是/etc/phpmyadmin/config.inc.php或/usr/share/phpmyadmin/config.inc.php)中。
立即学习“PHP免费学习笔记(深入)”;
<?php
// 初始化服务器索引。phpMyAdmin的服务器数组从1开始。
$i = 0;
// 定义所有需要管理的数据库主机列表。
// 可以包含主机名、IP地址,如果端口不是默认的3306,请在主机名后加上冒号和端口号。
$hosts = [
'localhost', // 本地MySQL服务器
'172.18.0.1:3307' // Docker容器或其他远程MySQL服务器,指定IP和端口
];
// 遍历主机列表,为每个主机生成独立的服务器配置
foreach ($hosts as $host) {
$i++; // 每次循环递增服务器索引
// 基本连接参数
$cfg['Servers'][$i]['host'] = $host;
$cfg['Servers'][$i]['port'] = ''; // 如果主机名已包含端口,此处留空
$cfg['Servers'][$i]['socket'] = ''; // 如果使用TCP连接,此处留空
$cfg['Servers'][$i]['connect_type'] = 'tcp'; // 连接类型:tcp 或 socket
$cfg['Servers'][$i]['extension'] = 'mysqli'; // 推荐使用mysqli扩展
// 认证方式
// 'cookie':通过登录表单输入用户名密码
// 'config':在配置文件中硬编码用户名密码(安全性较低,不推荐用于生产环境)
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = ''; // 如果auth_type是'config',在此处填写用户名
$cfg['Servers'][$i]['password'] = ''; // 如果auth_type是'config',在此处填写密码
// 服务器在phpMyAdmin登录界面下拉列表中的显示名称
// 可以根据实际情况自定义,例如 '本地开发环境' 或 'Docker数据库'
if ($host == 'localhost') {
$cfg['Servers'][$i]['verbose'] = '本地MySQL';
} elseif ($host == '172.18.0.1:3307') {
$cfg['Servers'][$i]['verbose'] = 'Docker实例数据库 (172.18.0.1:3307)';
} else {
$cfg['Servers'][$i]['verbose'] = $host; // 默认显示主机名
}
// phpMyAdmin高级功能配置(可选,推荐配置以获得完整功能)
// 这些是phpMyAdmin内部用于存储书签、关系、历史等功能的数据库和表。
// 通常需要创建一个名为 'phpmyadmin' 的数据库,并导入phpMyAdmin提供的SQL脚本。
$cfg['Servers'][$i]['controluser'] = 'pma'; // phpMyAdmin控制用户
$cfg['Servers'][$i]['controlpass'] = 'pmapass'; // phpMyAdmin控制用户密码
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; // phpMyAdmin控制数据库
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
// 其他可选设置
$cfg['Servers'][$i]['compress'] = FALSE; // 是否启用压缩连接
$cfg['Servers'][$i]['only_db'] = ''; // 如果只想显示特定数据库,在此处填写数据库名
// $cfg['Servers'][$i]['AllowNoPassword'] = TRUE; // 允许无密码登录(不推荐)
}
?>配置参数详解:
通过采用结构化的循环配置方式,您可以轻松地在phpMyAdmin中管理多个数据库服务器。这种方法不仅解决了服务器无法显示的问题,还提高了配置的可维护性和清晰度。遵循本文提供的示例和注意事项,您将能够高效地利用phpMyAdmin的强大功能来管理您的所有MySQL/MariaDB数据库实例。
以上就是phpMyAdmin多服务器管理配置指南的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号