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

我在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 。 将输出redirect到计算机上的本地文件:

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

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

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

 mysqldump -u remoteusername -p remotepassword -h your.site.com databasename > dump.sql mysql -u localusername -p localpassword databasename < dump.sql 

一旦你匹配所有的密码,你可以使用pipe道。

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

  • 您正在使用不正确的密码
  • 尝试将客户端主机的IP地址parsing为名称时,MySQL服务器出错
  • 没有权限授予用户

您可以尝试下列其中一个步骤:

要通过以下方式重置远程用户的密码:

 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!" 

通常我们的数据库真的很大,需要花费时间直接从远程机器转储到其他机器上,正如我们上面提到的其他朋友一样。

在这种情况下,您可以使用MYSQLDUMP命令在远程计算机上执行转储

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

并使用Linux SCP Command将该文件从远程服务器传输到您的机器

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

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

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

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

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

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

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

步骤4:将sql文件移动到您的本地主机安装文件夹中,该文件位于mysql.exe所在的位置。 我使用统一服务器,这将是在C:\uniserver\core\mysql\bin\ ,与XAMPP它将是C:\xampp\mysql\bin

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

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

第6步:等待…取决于文件大小。 您可以检查phpmyadmin中的进度,看到新创build的表。

第7步:完成。 转到你的本地phpmyadmin来检查数据库是否已经填满了整个数据。

希望有所帮助。 祝你好运!

注1:当启动uniformer-server时,你可以为mysql指定一个密码。 这是你必须使用上面的YOURPASSWORD。

注2:如果login不起作用,并且遇到密码问题,请检查您的密码是否包含特殊字符! 。 如果是这样,那么你可能需要逃避他们\!

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

 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 

在我的情况下YourHostNamelocalhostDestinationPath是下载的path; 您可以拖放所需的目标文件夹,并将其粘贴到path中。

那么密码可能会被问到:

 Enter password: xxxxxxxx 

更好的是使用一个线索:

将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