Configuring PHPMyAdmin to connect to remote database

8,222

You're reading a file in the wrong directory.

The settings are stored in config.inc.php at the root of phpMyAdmin's installation directory; e.g. /usr/share/webapps/phpMyAdmin/config.inc.php. Do not dig deeper than that.

(It's the same place where you can find files config.sample.inc.php, ChangeLog, favicon.ico, and such.)

Share:
8,222

Related videos on Youtube

Admin
Author by

Admin

Updated on September 18, 2022

Comments

  • Admin
    Admin over 1 year

    After Googling the possibility of using PHPMyAdmin to connect to remote databases, I found this article, which confirms that this is supported after a simple config edit.

    In the article, the author explains:

    The file config.inc.php contains the configuration settings for your phpMyAdmin installation. It uses an array to store sets of config options for every server it can connect to and by default there is only one, your own machine, or localhost. In order to connect to another server, you would have to add another set of config options to the config array. A set of config options would look something similar to this:

    $i++;
    $cfg['Servers'][$i]['host']          = '';
    $cfg['Servers'][$i]['port']          = '';
    $cfg['Servers'][$i]['socket']        = '';
    $cfg['Servers'][$i]['connect_type']  = 'tcp';
    $cfg['Servers'][$i]['extension']     = 'mysql';
    $cfg['Servers'][$i]['compress']      = FALSE;
    $cfg['Servers'][$i]['auth_type']     = 'config';
    $cfg['Servers'][$i]['user']          = 'username';
    $cfg['Servers'][$i]['password']      = 'password';
    

    Pay attention that the config array is called cfg and it's a multidimensional array and that all servers, have to be part of the $cfg["Servers"] inner array. The way this works is by using an incrementing variable $i that sets a different inner array for each server inside the $cfg["Servers"] array. For this to work you need to make sure each new set of config options starts with an incremented $i by using $i++.

    However, when I browsed for this file in my PHPMyAdmin files, I found its contents to be different than expected:

    <?php
    /* vim: set expandtab sw=4 ts=4 sts=4: */
    /**
     * Config file view and save screen
     *
     * @package PhpMyAdmin-Setup
     */
    
    if (!defined('PHPMYADMIN')) {
        exit;
    }
    
    /**
     * Core libraries.
     */
    require_once './libraries/config/FormDisplay.class.php';
    require_once './setup/lib/index.lib.php';
    require_once './setup/lib/ConfigGenerator.class.php';
    
    $config_readable = false;
    $config_writable = false;
    $config_exists = false;
    check_config_rw($config_readable, $config_writable, $config_exists);
    ?>
    <h2><?php echo __('Configuration file') ?></h2>
    <?php PMA_displayFormTop('config.php'); ?>
    <input type="hidden" name="eol" value="<?php echo htmlspecialchars(PMA_ifSetOr($_GET['eol'], 'unix')) ?>" />
    <?php PMA_displayFieldsetTop('', '', null, array('class' => 'simple')); ?>
    <tr>
        <td>
            <textarea cols="50" rows="20" name="textconfig" id="textconfig" spellcheck="false"><?php
                echo htmlspecialchars(ConfigGenerator::getConfigFile())
            ?></textarea>
        </td>
    </tr>
    <tr>
        <td class="lastrow" style="text-align: left">
            <input type="submit" name="submit_download" value="<?php echo __('Download') ?>" class="green" />
            <input type="submit" name="submit_save" value="<?php echo __('Save') ?>"<?php
    if (!$config_writable) {
        echo ' disabled="disabled"';
    } ?> />
        </td>
    </tr>
    <?php
    PMA_displayFieldsetBottomSimple();
    PMA_displayFormBottom();
    ?>
    

    Does anyone know where/how, in the more recent versions of PHPMyAdmin, this config data is stored and can be edited?

  • Admin
    Admin about 10 years
    Yep. Just discovered that, thanks. Tricky duplicate file names... Anyway, I'll accept this when the timer is up!
  • Admin
    Admin about 10 years
    Looking at this, it's a very weird albeit creative way to build a config.
  • Admin
    Admin about 10 years
    Once I updated the config, I got the option to connect to the remote database as expected, however, phpMyAdmin seems to be trying to use the password 'YES' rather than the one supplied in the config. Could you have a look at the updated config for my error? gist.github.com/jt0dd/11314779
  • Admin
    Admin about 10 years
    Ah, I see. That's my issue. Since 'user' alone is input whe dealing with mysql from the console, I didn't realize that the username takes that format.
  • user1686
    user1686 about 10 years
    @jt0dd: Clients (including phpMyAdmin) always use just the username, yes. The server gets the address directly from the OS after all. And "user"@"address" is just what the server searches for in the user table. My point was, if your account was created as "jt0dd"@"localhost" it won't work over the network.
  • Admin
    Admin about 10 years
    I see, I see! I just attempted to use 'root@<serverIP>' and was confused when phpMyAdmin tried root@serverIP@myIP - erm. I'm confused now, actually. phpMyAdmin sends root@myip - the remote MySQL server expects root@serverip? I must have that wrong.
  • Admin
    Admin about 10 years
    Ok, that's confusing. Perhaps I should post a new question for that solution
  • user1686
    user1686 about 10 years
    @jt0dd: PMA sends root. The server translates it to root@clientip (I'm quite sure it's the client address, not the server address), and if it sends an error, you see the translated form in the error message.