如何从本地计算机上mysqldump远程数据库


176

我需要在远程服务器上执行数据库的mysqldump,但该服务器未安装mysqldump。我想在我的机器上使用mysqldump连接到远程数据库并在我的机器上进行转储。

我试图创建一个ssh隧道,然后进行转储,但这似乎不起作用。我试过了:

ssh -f -L3310:remote.server:3306 user@remote.server -N

隧道创建成功。如果我做

telnet localhost 3310

我得到一些显示正确服务器mysql版本的内容。但是,执行以下操作似乎尝试在本地连接

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name

9
由于这个问题与管理更重要而不是编程,我想说serverfault.com上的友善人士可以为您提供更好的帮助。
Piskvor在

看一下MSQL WorkBench 5.2.22。它可以轻松地使您执行此操作。
加里2010年

1
注意:要转储远程mysql服务器,请包含--host = sqlserver.host.name --port = 3306
ro0ter

我投票的题外话,因为它属于对DBA,收了这个问题
侯爵洛恩的

Answers:


244

正如我在serverfault上尚未看到的那样,答案很简单:

更改:

ssh -f -L3310:remote.server:3306 user@remote.server -N

至:

ssh -f -L3310:localhost:3306 user@remote.server -N

并更改:

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name

至:

mysqldump -P 3310 -h 127.0.0.1 -u mysql_user -p database_name table_name

(不要使用localhost,这是可能通过套接字而不是通过端口连接的这些“特殊含义”废话之一)

编辑:好,详细说明:如果将host设置为localhost--socket则假定已配置(或默认)选项。请参见手册中有关寻求/使用选项文件的信息。在Windows下,这可以是命名管道。


3
当心:localhost通常默认为::1IPv6,不是127.0.0.1
polkovnikov.ph

109

可以在本地对远程服务器调用mysqldump。

对我有用的示例:

mysqldump -h hostname-of-the-server -u mysql_user -p database_name > file.sql

我遵循了有关连接选项的mysqldump 文档


9
之前无需再打开ssh隧道。+1
学习者

1
最简单的方法,无需通过ssh连接并将文件带回本地计算机!只是直接带转储!
theGabyRod 18'July

3
这很危险,非常危险。它要求mysql的端口向公众开放。这很容易被机器人强行强迫。
volkovmqx

5
进入VPN怎么样?还是从您通过SSH进入的有权访问数据库计算机的计算机中进行转储?该端口不需要是公共的。
Ondrej Burkert

3
重要的是要记住这里-p是密码参数,而不是数据库名称。但是将其以纯文本格式存储是不安全的,因此添加-p意味着在登录时会提示您输入密码。也许这只是我,但是mysql,因此mysql转储语法从未一切向前伸直尽可能命令行参数。
anon58192932 '18

0

在此页面上有以下内容:

比较两个MySQL数据库

我对其进行了修改,以便可以在不同的主机中使用ddbb。

#!/ bin / sh

echo“用法:dbdiff [user1:pass1 @ dbname1:host] [user2:pass2 @ dbname2:host] [ignore_table1:ignore_table2 ...]”

转储(){
  up = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %%:*}; pass = $ {up ## *:}; dbname = $ {down %%:*}; host = $ {down ## *:};
  mysqldump --opt --compact --skip-extended-insert -u $ user -p $ pass $ dbname -h $ host $ table> $ 2
}

rm -f /tmp/db.diff

# 比较
up = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %%:*}; pass = $ {up ## *:}; dbname = $ {down %%:*}; host = $ {down ## *:};
对于`mysql -u $ user -p $ pass $ dbname -h $ host -N -e“ show table” --batch`中的表;做
  如果[“`echo $ 3 | grep $ table`” =“”]; 然后
    回声“比较'$表'...”
    转储$ 1 /tmp/file1.sql
    转储$ 2 /tmp/file2.sql
    差异-up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  其他
    回声“忽略'$表'...”
  科幻
做完了
少/tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

远程服务器上的mysqldump使用SSL

1- SSL安全

192.168.0.101-远程服务器

192.168.0.102-本地服务器

Remore服务器

CREATE USER 'backup_remote_2'@'192.168.0.102' IDENTIFIED WITH caching_sha2_password BY '3333333' REQUIRE SSL;

GRANT ALL PRIVILEGES ON *.* TO 'backup_remote_2'@'192.168.0.102';

FLUSH PRIVILEGES;

--

本地服务器

sudo /usr/local/mysql/bin/mysqldump \
 --databases test_1 \
 --host=192.168.0.101 \
 --user=backup_remote_2 \
 --password=3333333 \
 --master-data \
 --set-gtid-purged \
 --events \
 --triggers \
 --routines \
 --verbose \
 --ssl-mode=REQUIRED \
 --result-file=/home/db_1.sql

===================================

2-SSL安全性(REQUIRE X509)

192.168.0.101-远程服务器

192.168.0.102-本地服务器

Remore服务器

CREATE USER 'backup_remote'@'192.168.0.102' IDENTIFIED WITH caching_sha2_password BY '1111111' REQUIRE X509;

GRANT ALL PRIVILEGES ON *.* TO 'backup_remote'@'192.168.0.102';

FLUSH PRIVILEGES;

--

本地服务器

sudo /usr/local/mysql/bin/mysqldump \
 --databases test_1 \
 --host=192.168.0.101 \
 --user=backup_remote \
 --password=1111111 \
 --events \
 --triggers \
 --routines \
 --verbose \
 --ssl-mode=VERIFY_CA \
 --ssl-ca=/usr/local/mysql/data/ssl/ca.pem \
 --ssl-cert=/usr/local/mysql/data/ssl/client-cert.pem \
 --ssl-key=/usr/local/mysql/data/ssl/client-key.pem \
 --result-file=/home/db_name.sql

[注意]

在本地服务器上

/ usr / local / mysql / data / ssl /

-rw------- 1 mysql mysql 1.7K Apr 16 22:28 ca-key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28 ca.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28 client-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28 client-key.pem

从(REQUIRE X509)的远程服务器复制此文件,或者如果没有(REQUIRE X509)的SSL则不复制


在远程服务器上

/ usr / local / mysql / data /

-rw------- 1 mysql mysql 1.7K Apr 16 22:28  ca-key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  ca.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  client-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  client-key.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  private_key.pem
-rw-r--r-- 1 mysql mysql  451 Apr 16 22:28  public_key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  server-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  server-key.pem

my.cnf

[mysqld]
# SSL
ssl_ca=/usr/local/mysql/data/ca.pem
ssl_cert=/usr/local/mysql/data/server-cert.pem
ssl_key=/usr/local/mysql/data/server-key.pem

提高密码安全性

https://dev.mysql.com/doc/refman/8.0/zh-CN/password-security-user.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.