从Java简单备份和恢复mysql数据库

che*_*ish 15 java mysql database backup restore

如何从java代码备份mysql数据库,以便:

  1. 它的保存路径是动态分配的.
  2. Path中的空格不会产生问题.
  3. 使用执行的jar文件生成路径.
  4. 动态分配DBname,DBusername或DBpass.
  5. 创建专用文件夹以保存备份文件.

che*_*ish 24

注意:下面给出的代码是解决问题的一种方法,可能不是最好的方法.代码中的一切都是可变的.如果在环境变量中没有mysql,请在mysqldump和mysql之前添加路径(例如,对于XAMPP,C:\ xampp\mysql\bin\mysqldump)

(希望,这将解决您的问题.我花了一天时间来完全弄清楚所有事情并正确实施)

备份方法:

public static void Backupdbtosql() {
    try {

        /*NOTE: Getting path to the Jar file being executed*/
        /*NOTE: YourImplementingClass-> replace with the class executing the code*/
        CodeSource codeSource = YourImplementingClass.class.getProtectionDomain().getCodeSource();
        File jarFile = new File(codeSource.getLocation().toURI().getPath());
        String jarDir = jarFile.getParentFile().getPath();


        /*NOTE: Creating Database Constraints*/
        String dbName = "YourDBName";
        String dbUser = "YourUserName";
        String dbPass = "YourUserPassword";

        /*NOTE: Creating Path Constraints for folder saving*/
        /*NOTE: Here the backup folder is created for saving inside it*/
        String folderPath = jarDir + "\\backup";

        /*NOTE: Creating Folder if it does not exist*/
        File f1 = new File(folderPath);
        f1.mkdir();

        /*NOTE: Creating Path Constraints for backup saving*/
        /*NOTE: Here the backup is saved in a folder called backup with the name backup.sql*/
         String savePath = "\"" + jarDir + "\\backup\\" + "backup.sql\"";

        /*NOTE: Used to create a cmd command*/
        String executeCmd = "mysqldump -u" + dbUser + " -p" + dbPass + " --database " + dbName + " -r " + savePath;

        /*NOTE: Executing the command here*/
        Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
        int processComplete = runtimeProcess.waitFor();

        /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/
        if (processComplete == 0) {
            System.out.println("Backup Complete");
        } else {
            System.out.println("Backup Failure");
        }

    } catch (URISyntaxException | IOException | InterruptedException ex) {
        JOptionPane.showMessageDialog(null, "Error at Backuprestore" + ex.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

恢复方法:

public static void Restoredbfromsql(String s) {
        try {
            /*NOTE: String s is the mysql file name including the .sql in its name*/
            /*NOTE: Getting path to the Jar file being executed*/
            /*NOTE: YourImplementingClass-> replace with the class executing the code*/
            CodeSource codeSource = YourImplementingClass.class.getProtectionDomain().getCodeSource();
            File jarFile = new File(codeSource.getLocation().toURI().getPath());
            String jarDir = jarFile.getParentFile().getPath();

            /*NOTE: Creating Database Constraints*/
             String dbName = "YourDBName";
             String dbUser = "YourUserName";
             String dbPass = "YourUserPassword";

            /*NOTE: Creating Path Constraints for restoring*/
            String restorePath = jarDir + "\\backup" + "\\" + s;

            /*NOTE: Used to create a cmd command*/
            /*NOTE: Do not create a single large string, this will cause buffer locking, use string array*/
            String[] executeCmd = new String[]{"mysql", dbName, "-u" + dbUser, "-p" + dbPass, "-e", " source " + restorePath};

            /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/
            Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/
            if (processComplete == 0) {
                JOptionPane.showMessageDialog(null, "Successfully restored from SQL : " + s);
            } else {
                JOptionPane.showMessageDialog(null, "Error at restoring");
            }


        } catch (URISyntaxException | IOException | InterruptedException | HeadlessException ex) {
            JOptionPane.showMessageDialog(null, "Error at Restoredbfromsql" + ex.getMessage());
        }

    }
Run Code Online (Sandbox Code Playgroud)

  • 这个错误发生的原因是你没有把mysqldump.exe的路径,我有同样的错误,但是它的编码很完美.对于Windows:`String executeCmd ="C:\\ Program Files(x86)\\ MySQL \\ MySQL Workbench 6.1 CE \\ mysqldump -u"+ dbUser +" - p"+ dbPass +" - database"+ dbName + "-r"+ savePath;`由于存在问题,这不是最佳解决方案!抱歉我的英语 (3认同)
  • 您的方法“Backupdbtosql”在执行时显示错误。_Backuprestore 出错无法运行程序“mysqldump”;CreateProcess error=2,系统找不到指定的文件_ (2认同)
  • 我的朋友。首先感谢您提供完整的答案。其次,当我在Backupdbtosql()方法中执行命令时,此方法不运行并出现错误,这是未知选项'--database',我的解决方案是将--database替换为数据库 (2认同)
  • 非常感谢,因为它节省了我解决恢复选项的时间。 (2认同)

hd1*_*hd1 5

如果正确配置了Hibernate,那么这是蛋糕:

Session session = HibernateUtil.getSessionFactory().openSession();
// for every table, have the bean implement Serializable and use the next 4 lines
List <TblBean> tblCollection = session.createCriteria(TblBean.class).list();
FileOutputStream backup = new FileOutputStream("backupOf"+TblBean.getClass().getName()+".dat");
ObjectOutputStream backupWriter = new ObjectOutputStream(backup);
backupWriter.write(tblCollection);
Run Code Online (Sandbox Code Playgroud)

  • 这只是为了实现备份,它需要设置 Hibernate+ 你需要实现所有表的 bean(可能有 100 个)其他代码对于新手来说很简单且易于实现(尽管不安全且效率低下) (2认同)
  • 问题从“如何从 Java 代码备份 mysql 数据库”开始。正如您所指出的,我的回答以一种安全有效的方式做到了这一点,而其他代码没有做到这一点。 (2认同)