使用 gzip 将 mysqldump 到远程 mysql 数据库

使用 gzip 将 mysqldump 到远程 mysql 数据库

我正在尝试使用 gzip 压缩将数据从一个 MySQL 服务器传输到另一个。到目前为止,我所做的是:

mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | gzip -c | mysql -h [host] -u [user] -p[pwd]

当然,这行不通,因为压缩数据正在导入到远程数据库中。在导入之前,我该如何解压远程服务器上的数据 - 或者这行不通,我需要使用 SSH 吗?

谢谢

答案1

您可以通过多个 SSH 管道。

例如:

ssh user@host1 "mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | gzip -c" | ssh user@host2 "gzip -c -d | mysql -h [host] -u [user] -p[pwd]"

稍微分解一下,您有两个 SSH 命令,它们互相连接:

  • 第一个运行mysqldump,然后将结果通过管道传输到gzip,后者又将结果发送到 STDOUT。
  • 第二条命令采用 STDIN 并将其解压缩,然后将其通过管道传送到mysql命令。

当您结合这两个命令时,您可以直接使用 SSH 在两个主机之间传递数据。

以下是实践示例:

cwatson@zeus:~$ ssh tyr

cwatson@tyr:~$ echo stuff123tyr > testfile.txt
cwatson@tyr:~$ cat testfile.txt
stuff123tyr
cwatson@tyr:~$ logout

ssh tyr "cat ~/testfile.txt | gzip -c" | ssh thor "gzip -c -d > ~/testfile.txt"

cwatson@zeus:~$ ssh thor
Last login: Fri Feb 26 17:28:01 2016 from host217-44-218-9.range217-44.btcentralplus.com
cwatson@thor:~$ cat testfile.txt
stuff123tyr

答案2

通过使用参数--compress,MySQL客户端可以将压缩数据发送到远程服务器。因此,传输命令行可以修改为:

mysqldump -u [user] -p[pwd] --compress --no-create-db --no-create-info [db] [table] | \
 mysql --compress -h [host] -u [user] -p[pwd]

请注意,数据将以未加密的形式通过网络发送。如果您担心,通过 SSH 传输转储是更好的选择。

答案3

是的,您需要使用某种远程执行才能让远程端进行解压缩:

mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | gzip -c | ssh [host] "gunzip | mysql -h localhost -u [user] -p[pwd]"

然而请记住,ssh 默认会透明地进行压缩 - g(un)zip 步骤是不必要的。

mysqldump -u [user] -p[pwd] --no-create-db --no-create-info [db] [table] | ssh [host] mysql -h localhost -u [user] -p[pwd] 应该足够了

答案4

预先请求

  • 如果不存在,则创建发件人数据库
  • 如果不存在则创建接收方数据库
  • 如果路径未改变,文件将保存在主目录中
  • 确保你使用了正确的凭证
  • 要获取接收者用户,请在命令行上键入此内容(ctrl+alt+t)--->whoami
  • 要获取接收器 IP 地址,请在命令行中输入此内容 (ctrl+alt+t) --->ifconfig |grep "inet addr"|head -1

mysqldump -u{sender dbuser} -p{sender dbpassword} {sender database name} | gzip -cf | ssh {receiver user}@{receiver ip address} ' cat >/home/myfilename.gz | gzip -dc < myfilenamegz |mysql -u{receiver username} -p{receiver dbuser} {receiver dbname} '

  • 从命令中删除{ }并插入您的值

相关内容