# 配置phpmyadmin連接多實例MySQL
### 步驟總結
1. 下載phpmyadmin
2. 配置phpmysql的配置文件
3. 所有庫有賬號通過遠程連接MySQL(mysql的grant授權)
4. 登錄測試(如果有做數據庫的主從要檢查用戶授權,防止數據的不一致)
### 環境說明
```
Linux版本于內核號 CentOS release 6.5 (Final) 2.6.32-431.el6.x86_64
PHP版本 5.3.28
Phpmyadmin版本 phpMyAdmin-4.4.15-all-languages
MySQL多實例 192.168.0.200:3307和192.168.0.200:3308(其中3307為master 3308為slave)
```
## 具體操作
### 方法一
通過修改 `phpmyadmin/libraries/config.default.php` 大概在805行的`$cfg['AllowArbitraryServer'] = true;` # allow login to any user entered server in cookie based authentication,效果如下圖:

進行登錄,當然這種方式依然得方法一中第四步的授權,這里就不在贅述。**(此方法測試未成功,繼續關注)**
#### 總結
缺點:登陸操作比較繁瑣,而且切換服務器時須首先退出當前所登陸的服務器
### 方法二
##### 1. 下載phpmyadmin
到`https://www.phpmyadmin.net/downloads/`下載`phpMyAdmin-4.4.15-all-languages`,解壓到網站根目錄下重命名為phpmyadmin
#### 2. 編輯配置文件
`cp config.sample.inc.php config.inc.php` 復制根目錄下的`config.sample.inc.php`為`config.inc.php`,使用 `sed -i '22,34s#^#//#g'` config.inc.php使用sed命令注釋掉之前相關行并編輯這個文件,添加一個$hosts數組和一個for循環
```
// /*
// * First server
// */
// $i++;
// /* Authentication type */
// $cfg['Servers'][$i]['auth_type'] = 'cookie';
// /* Server parameters */
// $cfg['Servers'][$i]['host'] = 'localhost';
// $cfg['Servers'][$i]['connect_type'] = 'tcp';
// $cfg['Servers'][$i]['compress'] = false;
// /* Select mysql if your server does not have mysqli */
// $cfg['Servers'][$i]['extension'] = 'mysqli';
// $cfg['Servers'][$i]['AllowNoPassword'] = false;
$hosts = array(
'1'=>array('host'=>'192.168.0.200','user'=>'phpmyadmin','password'=>'phpmyadmin','port'=>3307),
'2'=>array('host'=>'192.168.0.200','user'=>'phpmyadmin','password'=>'phpmyadmin','port'=>3308)
);
for($i=1,$j=count($hosts);$i<=$j;$i++){
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = $hosts[$i]['host']; //修改host
$cfg['Servers'][$i]['port'] = $hosts[$i]['port'];
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Servers'][$i]['user'] = $hosts[$i]['user']; //修改用戶名
$cfg['Servers'][$i]['password'] = $hosts[$i]['password']; //密碼
/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';
}
```
更改完成后刷新登錄頁面,發現是不是多了些什么?我們可以選擇不同的服務器(或者不同的端口)進行登錄了。

#### 3. 登錄到服務器授權不同的登錄賬號
由于這邊192.168.0.200:3307為master,我們在3307端口上進行授權:
`grant all privileges on *.* to 'phpmyadmin'@'192.168.0.%' identified by 'phpmyadmin' WITH GRANT OPTION;`
如果3307和3308已經實現了主從同步,那么我們可以通過用戶名為phpmyadmin和密碼為 phpmyadmin登錄了,但是這樣授權是十分不安全的。建議在生產環境中不要這么粗暴的使用,另外我們需要對slave實例進行回收權限,登錄192.168.0.3308,操作如下:
`REVOKE INSERT,ALTER,CREATE,DELETE,DROP,UPDATE ON *.* FROM 'phpmyadmin'@'192.168.0.%'`
另可以通過show privileges;查看更多授權權限以及相關作用。
效果如下

相關的增刪改操作提示無權限,防止用戶誤操作引起的主從同步數據的不一致。(這里也可以配置mysql庫的主從不同步,然后分別在3307和3308端口上授予用戶不同的權限即可)。
#### 總結
優點:登陸操作簡便,登陸后切換服務器無須退出當前連接。
### 特別說明
方法一、方法二不可混用,如果按照方法一進行了操作,那么方法二將無法生效
- 寫在前面
- MySQL的使用
- MySQL多表同時刪除方案
- MySQL跨表、多表更新SQL語句總結
- MySQL存儲引擎
- 安裝
- 常規方式編譯安裝MySQL
- 采用cmake方式編譯安裝MySQL
- 使用rpm包安裝MySQL
- 使用yum方式安裝MySQL
- 采用二進制方式免編譯安裝MySQL
- 多實例的安裝
- 什么是多實例
- 多實例的作用、問題以及應用場景
- 多實例安裝01【推薦】
- 多實例官方安裝方案02
- 啟動、用戶和權限管理
- 單實例MySQL的啟動和關閉的方法
- 設置及修改MySQL root用戶密碼
- 找回丟失的MySQL root用戶密碼
- 創建MySQL用戶及用戶權限管理
- 基礎命令的操作
- MySQL庫和表相關操作
- MySQL中的索引操作
- MySQL常用命令
- MySQL的錯誤代碼
- MySQL復習秘籍
- 備份與恢復
- 備份
- 恢復
- mysqlbinlog命令
- 服務日志
- 主從復制
- 主從復制部署配置問題匯總
- 主從復制讀寫分離
- 災難恢復
- 配置phpmyadmin連接多實例MySQL
- 其他相關
- Sphinx實驗
- 中文分詞技術
- MySQL語句大全
- 用戶創建、權限、刪除
- 數據庫與表顯示、創建、刪除
- 表復制及備份還原
- 數據庫表中數據操作
- 修改表的列與表名
- 修改表中的數據
- 查詢表
- 日志
- 批量修改Mysql表引擎為InnoDB的方法
- 數據庫抽象層 PDO
- PDO對象常用方法
- PDO 事務處理
- PDO 與 MySQLi 二者效率簡單比較
- 大小寫敏感性 lower_case_table_names
- CentOS7安裝MySQL5.7密碼查看與修改