我在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数据库从远程服务器复制到本地计算机?
答案 0 :(得分:97)
假设以下命令成功运行:
mysql -u username -p -h remote.site.com
mysqldump
的语法相同,并将数据库转储输出到stdout
。将输出重定向到计算机上的本地文件:
mysqldump -u username -p -h remote.site.com DBNAME > backup.sql
将DBNAME
替换为您要下载到计算机的数据库的名称。
答案 1 :(得分:16)
检查语法并一次执行一个命令,然后验证输出。
mysqldump -u remoteusername -p remotepassword -h your.site.com databasename > dump.sql
mysql -u localusername -p localpassword databasename < dump.sql
匹配所有密码后,您可以使用管道。
答案 2 :(得分:2)
这可能有不同的原因,如:
您可以尝试以下步骤之一:
通过以下方式重置远程用户的密码:
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';
希望这会对你有所帮助,如果没有,你将不得不通过documentation
答案 3 :(得分:2)
请检查这个要点。
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!"
答案 4 :(得分:2)
我们的数据库通常非常庞大,需要花时间将转储直接从远程机器转移到其他机器上,正如我们上面其他朋友所建议的那样。
在这种情况下,您可以使用MYSQLDUMP Command
在远程计算机上进行转储MYSQLDUMP -uuser -p --all-databases&gt; file_name.sql 强>
将该文件从远程服务器传输到您的计算机scp user @ remote_ip:〜/ mysql_dump_file_name.sql ./
答案 5 :(得分:1)
将mysql数据库从远程服务器复制到本地计算机
我遇到了同样的问题。我无法用其他答案完成任务。所以这就是我最终如何做到的(是的,初学者教程):
步骤1:在本地phpmyadmin中创建一个新数据库。
步骤2:将远程服务器上的数据库转储到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
步骤5:按如下方式执行mysql.exe
:
mysql.exe -u root -pYOURPASSWORD YOURLOCALDBNAME < dbdump.sql
步骤6:等待......取决于文件大小。您可以查看phpmyadmin中的进度,查看新创建的表。
第7步:完成。转到本地phpmyadmin检查数据库是否已填满整个数据。
希望有所帮助。祝你好运!
注1:启动uniformer-server时,可以为mysql指定密码。这是你必须在YOURPASSWORD上面使用的那个。
注意2:如果登录不起作用并且您遇到密码问题,请检查密码是否包含!
等特殊字符。如果是这样,那么您可能需要将它们转义\!
。
注3:如果在导入后没有在本地数据库中找到所有mysql数据,可能是你的dbdump.sql的mysql指令有问题
答案 6 :(得分:0)
C:\Users\>mysqldump -u root -p -h ip address --databases database_name -r sql_file.sql
Enter password: your_password
答案 7 :(得分:0)
这个答案不是远程服务器而是本地服务器。逻辑应该是相同的。要将本地计算机MAMP数据库复制并备份到本地桌面计算机文件夹,请转到控制台,然后
mysqldump -h YourHostName -u YourUserNameHere -p YourDataBaseNameHere > DestinationPath/xxxwhatever.sql
就我而言,YourHostName
是localhost
。 DestinationPath
是下载的路径;您可以拖放所需的目标文件夹,它将粘贴路径。
然后可能会询问密码:
Enter password: xxxxxxxx
答案 8 :(得分:0)
更好的是使用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