55

我在 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数据库从远程服务器复制到本地计算机?

4

9 回答 9

106

假设以下命令成功运行:

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

for 的语法mysqldump相同,并将数据库转储输出到stdout. 将输出重定向到计算机上的本地文件:

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

替换DBNAME为您要下载到计算机的数据库的名称。

于 2013-03-15T14:47:28.893 回答
22

检查语法并一次执行一个命令,然后验证输出。

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

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

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

于 2013-03-15T14:47:29.113 回答
3

通常我们的数据库非常大,并且需要时间直接从远程机器转储到其他机器,正如我们的其他朋友在上面所建议的那样。

在这种情况下,您可以做的是使用MYSQLDUMP 命令在远程机器上进行转储

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

然后使用Linux SCP 命令将该文件从远程服务器传输到您的计算机

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

于 2016-08-11T04:34:38.697 回答
2

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

  • 您使用的密码不正确
  • 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';

希望这对您有所帮助,如果没有,那么您将不得不阅读文档

于 2013-03-15T14:43:00.633 回答
2

请检查这个要点。

https://gist.github.com/ecundar/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!"
于 2015-12-22T09:07:08.047 回答
1

将mysql数据库从远程服务器复制到本地计算机

我遇到了同样的问题。我无法用其他答案完成它。所以这就是我最终是如何做到的(是的,一个初学者教程):

第 1 步:在本地 phpmyadmin 中创建一个新数据库。

第二步:将远程服务器上的数据库转储到一个sql文件中(这里我使用了Putty/SSH):

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

第 3 步:通过 FTP 客户端下载dbdump.sql文件(应位于根文件夹中)

第 4 步:将 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的密码。这是您必须在上面为您的密码使用的那个。

注意 2:如果登录失败并且您遇到密码问题,请检查您的密码是否包含特殊字符,例如!. 如果是这样,那么您可能需要逃避它们\!

注意3:如果导入后本地db中不能找到所有mysql数据,可能是你的dbdump.sql的mysql指令有问题

于 2016-05-11T15:47:10.783 回答
1

最好使用 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
于 2017-09-07T17:19:43.383 回答
0
C:\Users\>mysqldump -u root -p -h ip address --databases database_name -r sql_file.sql
Enter password: your_password
于 2017-04-20T05:54:35.103 回答
0

这个答案不是远程服务器而是本地服务器。逻辑应该是一样的。要将我的本地计算机 MAMP 数据库复制并备份到我的本地桌面计算机文件夹,然后转到控制台

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

在我的情况下YourHostNamelocalhost. DestinationPath是下载路径;您可以拖放所需的目标文件夹,它会粘贴路径。

然后可能会询问密码:

Enter password: xxxxxxxx
于 2017-08-20T21:00:15.453 回答