通过SSH复制MySQL数据库

enl*_*loz 7 mysql database ssh copy

让我们说我有database1database2.

database1 - 包含数据

database2 - 是空的.


我想所有的数据从复制database1database2通过SSH -复制database1.

我应该使用什么命令?


我试过了

mysqldump -u user -p database1 > database1.sql
Enter password: mysqldump: Got error: 1045: Access denied for user 'user'@'localhost' (using password: NO) when trying to connect
Run Code Online (Sandbox Code Playgroud)

dan*_*opa 5

这会将数据库从S1复制到S2

mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz'
Run Code Online (Sandbox Code Playgroud)

解压缩文件

gunzip /tmp/yourfile.sql.gz
Run Code Online (Sandbox Code Playgroud)

接下来你必须在S2上导入

mysql -h<host> -u<user> -p<password> < /tmp/yourfile.sql
Run Code Online (Sandbox Code Playgroud)

请享用


Jam*_*mes 5

仅需一个命令即可通过SSH复制MySQL数据库:

mysqldump -u <local-user> -p <local-db> | gzip | ssh user@hostname \
  "gunzip | mysql -u <remote-user> -p<password> <remote-db>"
Run Code Online (Sandbox Code Playgroud)

请注意,您必须首先创建远程数据库。

更高级的版本:

mysqldump -u <local-user> -p <local-db> | xz | pv -W | ssh user@hostname \
"tee remote-dump.sql.xz | unxz | mysql -u <remote-user> -p<password> <remote-db>"
Run Code Online (Sandbox Code Playgroud)

进阶版本:

  • 使用xz/ 具有更好的压缩效果unxz(尽管请注意,压缩速度不会成为瓶颈-如果xz在100%CPU下,则它可能已成为瓶颈,并且您可能会更好gzip

  • 使用显示进度指示器 pv

  • 保存转储的副本,使用 tee

我唯一未解决的问题是如何避免在远程命令中指定密码。能够在命令行上以交互方式输入此密码真是太好了–如果有人知道怎么做,请输入提示音。