簡體   English   中英

將mysql數據庫從遠程服務器復制到本地計算機

[英]Copy mysql database from remote server to local computer

我在 VPN 下,我沒有遠程服務器的 SSH 訪問權限。

我可以通過控制台連接到遠程數據庫

mysql -u username -p -h remote.site.com

現在我正在嘗試將遠程數據庫克隆到本地計算機

mysqldump -u username -p -h remote.site.com mysqldump | mysql -u root -ppassword webstuff

我有錯誤

mysqldump: Got error: 1045: Access denied for user 'webstaff'@'10.75.1.2' 
(using password: YES) when trying to connect

如何將mysql數據庫從遠程服務器復制到本地計算機?

假設以下命令成功運行:

mysql -u username -p -h remote.site.com

mysqldump的語法是相同的,並將數據庫轉儲輸出到stdout 將輸出重定向到計算機上的本地文件:

mysqldump -u username -p -h remote.site.com DBNAME > backup.sql

DBNAME替換為您要下載到計算機的數據庫的名稱。

檢查語法並一次執行一個命令,然后驗證輸出。

mysqldump -u remoteusername -p remotepassword -h your.site.com databasename > dump.sql

mysql -u localusername -p localpassword databasename < dump.sql

匹配所有密碼后,您可以使用管道。

通常我們的數據庫非常大,並且需要時間將轉儲直接從遠程機器轉移到其他機器,正如我們的其他朋友在上面建議的那樣。

在這種情況下,您可以做的是使用MYSQLDUMP 命令在遠程機器上進行轉儲

MYSQLDUMP -uuser -p --all-databases > file_name.sql

然后使用Linux SCP 命令將該文件從遠程服務器傳輸到您的機器

scp user@remote_ip:~/mysql_dump_file_name.sql ./

這可能有不同的原因,例如:

  • 您使用的密碼不正確
  • MySQL 服務器在嘗試將客戶端主機的 IP 地址解析為名稱時出錯
  • 沒有權限授予用戶

您可以嘗試以下步驟之一:

要重置遠程用戶的密碼,請執行以下操作:

SET PASSWORD FOR some_user@ip_addr_of_remote_client=PASSWORD('some_password');

通過以下方式授予用戶訪問權限:

GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES ON YourDB.* TO user@Host IDENTIFIED by 'password';

希望這對您有所幫助,否則您將不得不閱讀文檔

請檢查這個要點。

https://gist.github.com/ecdundar/789660d830d6d40b6c90

#!/bin/bash

# copymysql.sh

# GENERATED WITH USING ARTUR BODERA S SCRIPT
# Source script at: https://gist.github.com/2215200

MYSQLDUMP="/usr/bin/mysqldump"
MYSQL="/usr/bin/mysql"

REMOTESERVERIP=""
REMOTESERVERUSER=""
REMOTESERVERPASSWORD=""
REMOTECONNECTIONSTR="-h ${REMOTESERVERIP} -u ${REMOTESERVERUSER} --password=${REMOTESERVERPASSWORD} "

LOCALSERVERIP=""
LOCALSERVERUSER=""
LOCALSERVERPASSWORD=""
LOCALCONNECTION="-h ${LOCALSERVERIP} -u ${LOCALSERVERUSER} --password=${LOCALSERVERPASSWORD} "

IGNOREVIEWS=""
MYVIEWS=""
IGNOREDATABASES="select schema_name from information_schema.SCHEMATA where schema_name != 'information_schema' and schema_name != 'mysql' and schema_name != 'performance_schema'  ;"

# GET A LIST OF DATABASES
databases=`$MYSQL $REMOTECONNECTIONSTR -e "${IGNOREDATABASES}" | tr -d "| " | grep -v schema_name`

# COPY ALL TABLES
for db in $databases; do
    # GET LIST OF ITEMS
    views=`$MYSQL $REMOTECONNECTIONSTR --batch -N -e "select table_name from information_schema.tables where table_type='VIEW' and table_schema='$db';"
    IGNOREVIEWS=""
    for view in $views; do
        IGNOREVIEWS=${IGNOREVIEWS}" --ignore-table=$db.$view " 
    done
    echo "TABLES "$db
    $MYSQL $LOCALCONNECTION --batch -N -e "create database $db; "
    $MYSQLDUMP $REMOTECONNECTIONSTR $IGNOREVIEWS --compress --quick --extended-insert  --skip-add-locks --skip-comments --skip-disable-keys --default-character-set=latin1 --skip-triggers --single-transaction  $db | mysql $LOCALCONNECTION  $db 
done

# COPY ALL PROCEDURES
for db in $databases; do
    echo "PROCEDURES "$db
    #PROCEDURES
    $MYSQLDUMP $REMOTECONNECTIONSTR --compress --quick --routines --no-create-info --no-data --no-create-db --skip-opt --skip-triggers $db | \
    sed -r 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' | mysql $LOCALCONNECTION  $db 
done

# COPY ALL TRIGGERS
for db in $databases; do
    echo "TRIGGERS "$db
    #TRIGGERS
    $MYSQLDUMP $REMOTECONNECTIONSTR  --compress --quick --no-create-info --no-data --no-create-db --skip-opt --triggers $db | \
    sed -r 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' | mysql $LOCALCONNECTION  $db 
done

# COPY ALL VIEWS
for db in $databases; do
    # GET LIST OF ITEMS
    views=`$MYSQL $REMOTECONNECTIONSTR --batch -N -e "select table_name from information_schema.tables where table_type='VIEW' and table_schema='$db';"`
    MYVIEWS=""
    for view in $views; do
        MYVIEWS=${MYVIEWS}" "$view" " 
    done
    echo "VIEWS "$db    
    if [ -n "$MYVIEWS" ]; then
      #VIEWS
      $MYSQLDUMP $REMOTECONNECTIONSTR --compress --quick -Q -f --no-data --skip-comments --skip-triggers --skip-opt --no-create-db --complete-insert --add-drop-table $db $MYVIEWS | \
      sed -r 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g'  | mysql $LOCALCONNECTION  $db  
    fi    
done

echo   "OK!"

將mysql數據庫從遠程服務器復制到本地計算機

我遇到了同樣的問題。 我無法用其他答案完成它。 所以這是我最終做到的(是的,初學者教程):

第 1 步:在本地 phpmyadmin 中創建一個新數據庫。

第 2 步:將遠程服務器上的數據庫轉儲到 sql 文件中(這里我使用了 Putty/SSH):

mysqldump --host="mysql5.domain.com" --user="db231231" --password="DBPASSWORD" databasename > dbdump.sql

第三步:通過FTP客戶端下載dbdump.sql文件(應該在根目錄下)

第四步:將sql文件移動到你的localhost安裝文件夾, mysql.exe所在的位置。 我正在使用統一服務器,這將在C:\\uniserver\\core\\mysql\\bin\\ ,使用 XAMPP 將是C:\\xampp\\mysql\\bin

第五步:執行mysql.exe如下:

 mysql.exe -u root -pYOURPASSWORD YOURLOCALDBNAME < dbdump.sql

第 6 步:等待...取決於文件大小。 您可以在 phpmyadmin 中查看進度,查看新創建的表。

第 7 步:完成。 轉到您本地的 phpmyadmin 以檢查數據庫是否已填滿整個數據。

希望有幫助。 祝你好運!


注1:啟動uniformer-server時,可以為mysql指定密碼。 這是您必須在上面用於 YOURPASSWORD 的那個。

注意 2:如果登錄失敗並且遇到密碼問題,請檢查您的密碼是否包含特殊字符,例如! . 如果是這樣,那么您可能需要逃避它們\\! .

注3:如果導入后本地db中不能找到所有mysql數據,可能是你的dbdump.sql的mysql指令有問題

更好的是使用oneliner:

將 remoteDB 轉儲到 localDB:

mysqldump -uroot -pMypsw -h remoteHost remoteDB | mysql -u root -pMypsw localDB

將 localDB 轉儲到 remoteDB:

mysqldump -uroot -pmyPsw localDB | mysql -uroot -pMypsw -h remoteHost remoteDB
C:\Users\>mysqldump -u root -p -h ip address --databases database_name -r sql_file.sql
Enter password: your_password

這個答案不是遠程服務器,而是本地服務器。 邏輯應該是一樣的。 要將我的本地機器 MAMP 數據庫復制並備份到我的本地台式機文件夾,請轉到控制台然后

mysqldump -h YourHostName -u YourUserNameHere -p YourDataBaseNameHere > DestinationPath/xxxwhatever.sql

在我的情況下YourHostNamelocalhost DestinationPath是下載的路徑; 您可以拖放所需的目標文件夾,然后將路徑粘貼到其中。

然后可能會詢問密碼:

Enter password: xxxxxxxx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM