在實際運維中,常需從一台應用伺服器(或跳板機)連線至另一台獨立的資料庫伺服器,執行查詢、備份還原或資料遷移操作。本文整理標準的 mysql 客戶端指令用法。
mysql -u<使用者名稱> -p<密碼> -h<遠程DB主機IP> [-P<連接埠>] [<資料庫名稱>]
-u:指定資料庫使用者帳號。-p:緊接密碼(無空格),或留空 -p 讓終端機互動式輸入(更安全)。-h:指定遠程 MySQL 伺服器 IP 或主機名。-P(大寫):指定連接埠,預設 3306 可省略。$ mysql -uadmin -p -h 10.103.28.25
Enter password: ********
Welcome to the MySQL monitor...
mysql> SHOW DATABASES;
+--------------------------+
| Database |
+--------------------------+
| information_schema |
| mvf_for_ykew_development |
| test |
+--------------------------+
3 rows in set (0.00 sec)
利用 Shell 重導向(<)將本地 SQL 檔案管線傳輸至遠程資料庫執行,適合大量資料初始化或跨機房遷移。
mysql -u<使用者> -p<密碼> -h<遠程IP> <目標資料庫名> < /本地路徑/備份檔.sql
# 匯入至指定資料庫
mysql -uadmin -pSecretPass -h 10.103.28.25 mvf_for_ykew_development < /tmp/db_bak.20140509.sql
關鍵點:
db_bak.20140509.sql)存放在發起連線的客戶端機器本地磁碟(範例中為 /tmp)。mvf_for_ykew_development)必須在遠程 MySQL 實例中預先存在。| 錯誤現象 | 可能原因 | 解決方向 |
|---|---|---|
| ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect | 遠程 MySQL 的 user 表無該客戶端 IP 的授權記錄 | 在遠程 DB 執行 GRANT ALL ON *.* TO 'user'@'客戶端IP' IDENTIFIED BY 'pass'; FLUSH PRIVILEGES; 或修改 bind-address |
| ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (110) | 網路不通/防火牆阻擋 3306 埠/MySQL 未監聽公網 IP | 檢查 telnet IP 3306、雲端安全組/防火牆規則、my.cnf 的 bind-address = 0.0.0.0 |
| ERROR 1049 (42000): Unknown database 'xxx' | 指定的目標資料庫不存在 | 先建立資料庫 CREATE DATABASE xxx; 或確認拼寫 |
-p 互動輸入或 --defaults-extra-file 指定加密設定檔。--ssl-mode=REQUIRED)並限制來源 IP(防火牆/安全組/資料庫白名單)。掌握上述指令與排查思路,即可高效完成跨伺服器的 MySQL 遠程運維與資料遷移任務。