zoukankan      html  css  js  c++  java
  • MySql数据备份

    MySql数据备份

    1. cmd 环境下备份

    cmd环境下备份mysql数据库可用到如下命令:

    1、备份某表

    mysqldump -u username -p dbname table1 table2 ...> BackupName.sql

    参数说明

    dbname表示数据库的名称;

    table1table2表示需要备份的表的名称,为空则整个数据库备份;

    BackupName.sql表示备份文件的名称,文件名前面可以加上一个绝对路径。

    2、备份多个数据库

    mysqldump -u username -p -databases dbname1 dbname2 > BackupName.sql

    3、备份所有数据库

    mysqldump -u username -p -all-databases > BackupName.sql

    4、数据还原

    mysql -u root -p [dbname] < backup.sql

    2. 调用mysqldump.exe备份

    有时候在java代码中需要定时作业备份,实现自动备份。这时候可采用如下方式进行数据备份。大致流程是:

    1、创建bat文件

    2、调用bat文件,获取输入流写入备份文件中

    代码示例如下:

    package com.hymake.xmq;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.Calendar;
    import java.util.Date;
    
    /**
     * MySql数据备份工具类
     * @author xiongmq
     *
     */
    public class MySqlBackup {
        
        public static void main(String[] args) {
            doBackup();
        }
    
        //mySql数据备份
        public static boolean doBackup(){
            boolean flag=false;
            //设置备份信息
            String databaseName="weixin";//数据库名字
            String mysqldumpUrl="C:\Program Files\MySQL\MySQL Server 5.5";//mysql安装位置
            String savePath="d:\数据备份"; //备份文件保存位置
            String host="127.0.0.1";//主机ip
            String port="3306";//端口
            String userName="root";//登录名
            String password="123456";//登录密码
            //初始化bat文件
            String dataBackupBatPath = System.getProperty("java.io.tmpdir")+ "\dataBackup.bat";
            //创建bat文件,好做调用
            getBackupBat(dataBackupBatPath);
            //拼凑备份命令
            StringBuilder cmdStr=new StringBuilder();
            cmdStr.append(dataBackupBatPath);
            Calendar cal = Calendar.getInstance();
            Date now =new Date();
            cal.setTime(now);
            String year=String.valueOf(cal.get(Calendar.YEAR));
            String month=cal.get(Calendar.MONTH)+1<10?"0"+String.valueOf(cal.get(Calendar.MONTH)+1):String.valueOf(cal.get(Calendar.MONTH)+1);
            String date=cal.get(Calendar.DATE)<10?"0"+String.valueOf(cal.get(Calendar.DATE)):String.valueOf(cal.get(Calendar.DATE));
            String hour=cal.get(Calendar.HOUR_OF_DAY)<10?"0"+String.valueOf(cal.get(Calendar.HOUR_OF_DAY)):String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
            String minute=cal.get(Calendar.MINUTE)<10?"0"+String.valueOf(cal.get(Calendar.MINUTE)):String.valueOf(cal.get(Calendar.MINUTE));
            String sec=cal.get(Calendar.SECOND)<10?"0"+String.valueOf(cal.get(Calendar.SECOND)):String.valueOf(cal.get(Calendar.SECOND));
            String sqlFielName=databaseName+"_"+year+month+date+hour+minute+sec;
            String sqlFielPath=year+"\"+month;
            cmdStr.append(" ""+savePath+""");
            cmdStr.append(" ""+sqlFielPath+""");
            //获取数据库位置
            cmdStr.append(" ""+mysqldumpUrl+""");
            cmdStr.append(" "+host);
            cmdStr.append(" "+port);
            cmdStr.append(" "+userName);
            cmdStr.append(" "+password);
            cmdStr.append(" "+databaseName);
            cmdStr.append(" "+sqlFielName);
            try {
                //执行命令
                Process p = Runtime.getRuntime().exec(cmdStr.toString());
                InputStream fis=p.getInputStream();
                InputStreamReader isr=new InputStreamReader(fis);
                BufferedReader br=new BufferedReader(isr);
                while((br.readLine())!=null) {
                    flag=true;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return flag;
        }
        
        /**
         * 创建bat文件
         * @param tempPath
         */
        public static boolean getBackupBat(String tempPath){
            boolean flag=false;
            StringBuilder  content=new StringBuilder();
            content.append("SET BACK_DIR=%1");
            content.append("
    ");
            content.append("md %BACK_DIR%\%2"); 
            content.append("
    ");
            content.append("SET BACK_PATH=%BACK_DIR%\%2");
            content.append("
    ");
            content.append("SET MYSQL_PATH=%3");
            content.append("
    ");
            content.append("%MYSQL_PATH%\bin\mysqldump.exe --opt -h%4 -P%5 -u%6 -p%7 %8> %BACK_PATH%\%9.sql ");
            content.append("
    ");
            content.append("echo 数据备份完毕!"); 
            String directoryPath = tempPath.substring(0, tempPath.lastIndexOf("\"));
            String fileName = tempPath.substring(tempPath.lastIndexOf("\") + 1, tempPath.length());
            boolean checkDirectoryIsExist = new File(directoryPath).exists();
            if(!checkDirectoryIsExist){
                new File(directoryPath).mkdirs();
            }
            try{
              File file = new File(directoryPath + File.separator + fileName);
              BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
              bw.write(content.toString());
              flag = true;
              bw.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
            return flag;
        }
    }
  • 相关阅读:
    文件操作
    三级菜单(低端版VS高端版)
    字符串内置方法
    简单购物车的实现
    pandas常用函数
    1.在CentOS 7上安装Docker
    2. IDEA 在同一工作空间创建多个项目
    7.SpringMVC注解@RequestParam全面解析
    6.@RequiresPermissions 注解说明
    1. 构建第一个SpringBoot工程
  • 原文地址:https://www.cnblogs.com/xmqa/p/7047847.html
Copyright © 2011-2022 走看看