【问题标题】:ssh mysqldump from oscent to remote serverssh mysqldump 从 oscent 到远程服务器
【发布时间】:2012-10-12 17:38:23
【问题描述】:

我正在尝试创建 mysql 数据库的自动备份,从我的虚拟主机到我的 NAS 存储。

我才刚刚开始学习 shell 命令,所以请多多包涵 - 我目前发现的是:

mysqldump 
   -uusername 
   -ppassword 
   --opt database_name | 
   gzip -c | 
   ssh user@ipaddress 
   "cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz"

但这似乎返回以下错误:

-bash: /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz: 没有这样的文件或目录

有谁知道如何解决这个问题并将其实际保存到指定的存储中?

【问题讨论】:

  • 你使用什么存储引擎? mysqlhotcopy 对于 MyISAM 来说要快得多
  • 不太确定 - 我如何找到这些信息?
  • SHOW TABLE STATUS FROM your_db;Engine 专栏

标签: mysql linux ssh mysqldump remote-server


【解决方案1】:

改变

cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz

cat > /path-to-the-directory-on-nas/`date +%Y-%m-%d_%H.%I.%S`.sql.gz

确保该文件夹已存在。至少在我的 Ubuntu 上工作过 :)

【讨论】:

  • 谢谢 raynix - 我会再试一次。
  • 恐怕也没有用。我已经用 pwd 检查了目录并将其复制到命令中以确保它是正确的路径等。但仍然 - 不走运 - 不知道它可能是什么。
  • 还要确保您可以输入该目录并可以在那里写入文件。
  • 虚拟主机是 CentOs 6.2,我不是 100% 安装在我的 Qnap NAS 上,但我相信它是一些 Linux 风格的。
【解决方案2】:

检查远程服务器上是否存在目录 /path-to-the-directory-on-nas/

如果丢失,您可以使用以下命令通过 ssh 创建它:

 ssh user@ipaddress mkdir -p /path-to-the-directory-on-nas/

(如果需要创建多个目录树,则使用-p)

如果您想创建带有时间戳的目录,您应该执行以下操作:

 ssh user@ipaddress mkdir -p /path-to-the-directory-on-nas/$(date '+%Y%M%D')/'

如果选择在目录路径中包含时间戳,则需要将其包含在 mysqldump 命令使用的路径中。

示例:

成功创建文件到远程系统上存在的远程目录/var/tmp

 $ date | ssh user@ipaddress 'cat > /var/tmp/file.txt'
 $ ssh user@ipaddress cat /var/tmp/file.txt
 Fri Oct 12 19:39:16 EST 2012

尝试写入不存在的目录时出现相同的错误。

 $ date | ssh user@ipaddress 'cat > /var/Xtmp/file.txt'
 bash: /var/Xtmp/file.txt: No such file or directory

【讨论】:

  • 谢谢 dannyla - 您能否解释一下我如何在远程服务器上使用当前日期和时间创建目录?
  • 使用与创建转储文件相同的过程,但是您可能需要删除一些时间分辨率(例如秒)。 ssh user@ipaddress mkdir -p /path-to-the-directory-on-nas-$(date '+%Y-%m-%d_%H')/
【解决方案3】:

您应该进一步调试。先试试吧

cat > /path-to-the-directory-on-nas/test.sql.gz. 

之后,如果日期有效,您应该尝试:

echo $(date +%Y-%m-%d_%H.%I.%S)

然后您将知道路径是否存在或 date... 是否失败。从您的错误消息看来,日期似乎是问题所在,但您需要先确定。然后您可以尝试将日期分配给变量:

#!/bin/bash
 filename=$(date +%Y-%m-%d_%H.%I.%S);
    mysqldump 
       -uusername 
       -ppassword 
       --opt database_name | 
       gzip -c | 
       ssh user@ipaddress 
     "cat > /path-to-the-directory-on-nas/$filename.sql.gz"

【讨论】:

    【解决方案4】:

    替换

    ssh user@ipaddress 
       "cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz"
    

    ssh user@ipaddress 
       "cat > /path-to-the-directory-on-nas/"$(date +%Y-%m-%d_%H.%I.%S)".sql.gz"
    

    【讨论】:

    • 谢谢 YaK - 不幸的是它似乎没有任何区别。
    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多