【问题标题】:Create mysql backup from server, download locally with scp and replace mamp database从服务器创建mysql备份,用scp本地下载并替换mamp数据库
【发布时间】:2011-03-09 07:05:36
【问题描述】:

我正在创建一个用于我的 Mac OS X 终端 (bash) 的 sn-p,这将允许我一步完成以下操作:

  1. 通过 ssh 登录我的服务器
  2. 为我的 Wordpress 数据库创建一个 mysqldump 备份
  3. 将备份文件下载到我的本地硬盘
  4. 替换我本地的 Mamp Pro mysql 数据库

这个想法是创建我当前在线网站的本地版本以进行开发。到目前为止,我有这个:

ssh server 'mysqldump -u root -p'mypassword' --single-transaction wordpress_database > wordpress_database.sql' && scp me@myserver.com:~/wordpress_database.sql /Users/me/Downloads/wordpress_database.sql && /Applications/MAMP/Library/bin/mysql -u root -p'mylocalpassword' wordpress_database < /Users/me/Downloads/wordpress_database.sql

显然我对此有点陌生,而且我认为我有很多不必要的冗余。但是,它确实有效。哦,ssh 命令ssh server 正在工作,因为我已经在本地 .ssh 文件中创建了一个别名来执行该操作。

以下是我需要帮助的:

  1. 可以缩短吗?变得更简单了吗?
  2. 我这样做是否正确?有没有更好的方法?
  3. 如何在其中添加 gzip 压缩?

感谢您对此提供的任何指导。谢谢。

【问题讨论】:

  • 在命令行上传递密码是一种糟糕的安全做法。将密码放入文件中,执行chmod 400 passwordfile 并使用... -p$(&lt;passwordfile) ...

标签: mysql bash macos terminal code-snippets


【解决方案1】:

您可以一步将其从服务器转储到本地数据库中(使用 gzip 进行压缩):

ssh server "mysqldump -u root -p'mypassword' --single-transaction wordpress_database | gzip -c" | gunzip -c | /Applications/MAMP/Library/bin/mysql -u root -p'mylocalpassword' wordpress_database

这里的双引号很关键,因为您希望gzip 在服务器上执行,而gunzip 在本地执行。

我还将我的 mysql 密码存储在 ~/.my.cnf(和 chmod 600 该文件)中,这样我就不必在命令行上提供它们(系统上的其他用户可以看到它们) ):

[mysql]
password=whatever

[mysqldump]
password=whatever

【讨论】:

  • 请注意,如果您使用这种方法,如果您的连接在中间中断(断开连接等),您的本地数据库将最终处于不一致状态(仅创建部分表)跨度>
  • 哦,这真是太棒了。 ~/.my.cnf 文件在服务器上吗?还是本地机器?
  • @ryanprayogo 实际上,我对此很好,因为本地副本仅用于开发,并且我是唯一可以访问的人。
  • 好的,看来我需要两个 .my.cnf 文件,一个在本地机器上用于 mysql 命令,一个在服务器上用于 mysqldump 命令。它是否正确?服务器上的那个是否出于某种原因存在安全风险?
  • @leggo-my-eggo,是的,每台机器上都需要一个 .my.cnf。如果服务器上有其他用户,我会认为 .my.cnf less 存在安全风险。如果您将该文件的权限更改为 600(所有者读/写),那么它只能由您和 root 访问。但是,如果您在命令中输入密码,那么系统上的任何其他人都可以通过进程列表获取密码。
【解决方案2】:

我也会这样做。

回答你的问题 #3:

问:我如何在其中添加 gzip 压缩?

答:您可以在mysqldump 命令之后运行gzip wordpress_database.sql,然后运行scp gzip 压缩文件(wordpress_database.sql.gz)

【讨论】:

  • 如果我这样做,那么我想我需要在本地数据库覆盖之前解压缩它?
  • 这是正确的。这可以通过gunzip wordpress_database.sql.gz 完成
【解决方案3】:

有一个 python 脚本可以将 sql 转储文件下载到本地。您可以查看脚本并进行一些修改以执行您的要求:

download-remote-mysql-dump-local-using-python-script

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多