【问题标题】:Duplicate MySQL database via SSH通过 SSH 复制 MySQL 数据库
【发布时间】:2021-01-04 22:27:17
【问题描述】:

假设我有database1 和database2。

database1 - 包含数据

database2 - 为空。


我想通过 SSH 将所有数据从 database1 复制到 database2 - 复制 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

【问题讨论】:

标签: mysql database ssh copy


【解决方案1】:

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

mysqldump -u <local-user> -p <local-db> | gzip | ssh user@hostname \
  "gunzip | mysql -u <remote-user> -p<password> <remote-db>"

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

更高级的版本:

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

高级版:

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

  • 使用pv显示进度指示器

  • 使用tee保存转储副本

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

【讨论】:

  • 处理远程密码的一种方法是使用远程服务器上的选项文件,例如在 ~/.my.cnf 中(参见dev.mysql.com/doc/refman/5.7/en/password-security-user.html)。
  • 我认为 gzip/xz 等不必要地使这复杂化,并且根据具体情况,您可能无法从压缩中受益。如果我认为需要压缩,我会使用“ssh -C”。这是我通常使用的准系统版本:$ ssh remotehost mysql -e "'create database dbname'"$ mysqldump dbname | ssh remotehost mysql dbname 请注意,需要使用愚蠢的双引号,每个涉及的主机一对。另请注意,我的~/.my.cnf 文件中有所需的位,不需要将用户名/密码放在命令行上。
【解决方案2】:

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

mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz'

解压文件

gunzip /tmp/yourfile.sql.gz

接下来您必须在 S2 上导入

mysql -h<host> -u<user> -p<password> < /tmp/yourfile.sql

享受

【讨论】:

  • 什么是“猫”?我应该更换它还是什么?
  • cat 是一个用于在屏幕上显示文件内容的 linux 命令(尝试阅读手册:man cat)
  • 基本上没有命令可以在不同的服务器上复制数据库。这个动作是由几个命令组成的。
【解决方案3】:

使用以下 2 个命令:

mysqldump -u customers -p customers > customers.dump



mysql -u new_customers -p new_customers < customers.dump

(您可能会因为无法写入目录而被拒绝访问,因此您可能必须使用cd 更改目录)

来源:http://support.tigertech.net/mysql-duplicate

【讨论】:

    【解决方案4】:

    您需要做的第一件事是 ssh 进入您想要复制或复制数据库到另一台服务器的服务器。

    对我有用的命令是:

    mysqldump -u <database-user> -p<database-password> <database-name> | xz | ssh <target-ssh-username>@<target-hostname> \ "tee remote-dump.sql.xz | unxz | mysql -u <target-database-user> -p<target-database-password> <target-database-name>"
    

    注意:-您可以使用 .cnf 文件来存储数据库的用户名和密码。因为我的执行量很小,所以我没有使用它。
    链接:https://www.techiecorner.com/1619/how-to-setup-mysqldump-without-password-in-cronjob/

    输入命令后。它会提示你

    **The authenticity of host 'w01b3a99.kasserver.com (85.13.164.141)' can't be established.**
    
    Are you sure you want to continue connecting (yes/no)?
    

    输入是

    然后它会提示你输入

    *target-user@target-hostname* ssh password
    

    输入target-user的密码密码

    这将是静默执行。一段时间后,您的命令执行将完成。

    我没有使用pv -W,因为我使用的是Cloudways Server。 pv 尚未安装。他们不允许 root 访问来安装任何包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2016-09-08
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多