【问题标题】:Use Java to remotely backup a MySQL database使用 Java 远程备份 MySQL 数据库
【发布时间】:2018-08-20 02:36:33
【问题描述】:

我尝试创建将通过 Java 远程备份 MySQL 数据库的软件。我无法访问任何控制台,但我能够运行 MySQL 命令和语句。我需要将数据库备份到“.sql”文件中,然后可以使用这些文件进行恢复。

如何在没有控制台的情况下备份 MySQL?可以做一个sqldump吗?

我目前的想法是对每个表执行以下程序:

  1. 使用 SHOW TABLES 列出要备份的表
  2. 获取表名
  3. 使用SHOW COLUMNS FROM tablename; 获取表架构
  4. 计算总行数
  5. 以 1000 行为增量从表中全选(以跟踪 下载百分比)
  6. 在执行此操作时,打开 FileOutputStream 以将数据写入 被接收到一个文件中。如果存在,它也会放置drop, 使用“.sql”中所见的架构、锁定和插入进行创建 文件。

有没有更好的方法来做到这一点,或者我的方法最适合我的情况?我的方法行得通吗?

【问题讨论】:

  • “更好的方法”是通过 SSH 或服务器端 cron 作业。
  • 是的,但我无权访问。这是我销售的 Backuo 软件,人们在 VPS 和其他类型的共享服务器上使用。

标签: java mysql


【解决方案1】:

您可以使用 JDBC 在数据库中触发纯 SQL 命令,就像使用 mysql 命令行界面时一样。这样您就可以完全控制转储的每个步骤,例如在获取 1000 秒增量时显示进度,写入并发日志或报告等。

【讨论】:

  • 所以基本上我提出的方法会起作用,它会让我展示进步吗?因为我需要展示进步。
  • 是的,当然。您可以预先对可以预期的数据数量进行计数查询,并开始逐页获取数据。这比通过 JVM 运行时调用 mysqldump 要做的工作要多得多,但是,您可以控制一切。
  • 我现在正在处理这个问题,我唯一遇到的问题是架构和 blob。有没有比SHOW COLUMNS FROM tablename; 更简单的获取模式的方法?
  • 我找到了一个神奇的 SQL 命令来满足我的需要:SHOW CREATE TABLE table; 给出了您在用于创建表的.sql 文件中看到的确切字符串。完美。
【解决方案2】:

您可以在 JAVA 或 Shell 脚本中运行以下命令

$ mysqldump -u [uname] -p[pass] db_name > <FILE_PATH>db_backup.sql

这会将您的数据库转储到文件中。

【讨论】:

  • 这不是只有在 MySQL 服务器在同一台机器上时才有效吗?我需要通过一种跟踪进度的方式远程完成。
  • 可以远程连接 MySQL for Java stackoverflow.com/a/2320117/2334568
  • 是的,我得到了那部分,但是我如何执行该命令来保存文件。我在 machine1 上,我需要在 machine2 上远程执行该命令,然后在跟踪进度的同时将文件从 machine2 获取到 machine1。
【解决方案3】:

您的想法是合理的,但是要实现很多东西(使用 JDBC 元数据获取表结构,定义自己的备份格式等)。

由于您可以使用 JDBC 连接到远程 MySQL,因此您拥有服务器的主机名/端口/用户名/密码。你能跑吗 String cmd = "mysqldump -h host -P port -u user -p password –database dbname > backup.sql"; Runtime rt = Runtime.getRuntime(); rt.exec(cmd);

确保 mysqldump 在您的 PATH 上。

【讨论】:

  • 不会在那台计算机上执行命令吗?我需要从不同的服务器远程执行此操作。另外,我将如何显示这方面的进展?
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 2019-07-14
  • 2021-09-12
相关资源
最近更新 更多