繁体   English   中英

通过 Java 每天根据预定时间自动备份 MySql DB

[英]Automatic backup of MySql DB daily based on scheduled time through Java

我正在尝试根据计划时间(每天)从 Java 应用程序(IDE Eclipse)备份 mysql DB,但似乎无法在指定路径中找到文件。 在控制台中打印其他部分,没有找到我出错的地方..请任何人帮我解决这个问题..提前谢谢..

package com.cerner.automation.eboard.service;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
public class UtilityService {

// Destination to create dump-date.sql file on daily basis
private static final String repo = "\"C:/DB_backup/dump-date.sql\""; //$NON-NLS-1$

/*
 * sec min hour(24) * & ? this is the syntax for daily job Here it is opted
 * to execute at 06:00 AM everyday
 */
private static final String CRON_MARIADB_DUMP = "00 00 18 * * ?"; //$NON-NLS-1$

@Scheduled(cron = CRON_MARIADB_DUMP)
public boolean dbBackup(String dbName, String dbUserName, String dbPassword, String path, String date) {
    String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + "--add-drop-database -B " + dbName + " -r " + path; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    Process process;
    try {
        System.out.println(executeCmd);// this out put works in mysql shell

        process = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", executeCmd }); //$NON-NLS-1$//$NON-NLS-2$
        // process = Runtime.getRuntime().exec(executeCmd);
        int processComplete = process.waitFor();

        if (processComplete == 0) {
            System.out.println("Backup created successfully"); //$NON-NLS-1$
            return true;
        }
        System.out.println("Could not create the backup");//$NON-NLS-1$

    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return false;
}

public static void main(String[] args) {
    String date = new SimpleDateFormat("ddMMyyyy").format(new Date());// $NON-NLS-1$ //$NON-NLS-1$

    UtilityService us = new UtilityService();
    us.dbBackup("root", "root", "eboard", repo, date); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    System.out.println("Completed..."); //$NON-NLS-1$
}

}

这是代码,当我运行它时,控制台打印如下..

mysqldump -u root -peboard--add-drop-database -B root -r "C:/DB_backup/dump-date.sql"
Could not create the backup
Completed...

可能是您用来与 MySQL 交谈的 ID 的权限问题。 但是,如果您在 mysqldump 命令中添加--verbose ,您可以深入挖掘。 这会启用详细模式,并且通常对控制台日志很有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM