Java程序定时备份MySql数据库

神马都是浮云 》》 直接上代码

以下是我整个工具类里的代码 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import com.ihandy.ssp.platform.comm.core.serverdb.dao.TlDatabaseInfoMapper;
import com.ihandy.ssp.platform.comm.core.serverdb.model.TlDatabaseInfo;
import com.ihandy.ssp.platform.comm.core.serverdb.model.TlDatabaseInfoExample;

private static Logger logger = LoggerFactory.getLogger(DatabaseUtil.class); 
    @Autowired
    private TlDatabaseInfoMapper tlDatabaseInfoMapper; //此是我在数据库中配置的数据库的相关信息
    /**
     * @param hostIP ip地址,可以是本机也可以是远程
     * @param userName 数据库的用户名
     * @param password 数据库的密码
     * @param savePath 备份的路径
     * @param fileName 备份的文件名
     * @param databaseName 需要备份的数据库的名称
     * @return
     */
    @Scheduled(cron = "0 0 12 * * ?")
    public boolean backup() {
        TlDatabaseInfoExample example = new TlDatabaseInfoExample();
        List tlDatabaseInfoList = tlDatabaseInfoMapper.selectByExample(example);
        for(TlDatabaseInfo tlDatabaseInfo : tlDatabaseInfoList){
            String hostIP = tlDatabaseInfo.getIp();
            String userName = tlDatabaseInfo.getUserName();
            String password = tlDatabaseInfo.getPassWord();
            String savePath = tlDatabaseInfo.getSavePath();
            String fileName = tlDatabaseInfo.getFileName();
            String databaseName = tlDatabaseInfo.getDatabaseName();
            logger.info(hostIP+databaseName+"数据库开始备份....");
            fileName +=".sql"; 
            File saveFile = new File(savePath);
            if (!saveFile.exists()) {// 如果目录不存在
                saveFile.mkdirs();// 创建文件夹
            }
            if (!savePath.endsWith(File.separator)) {
                savePath = savePath + File.separator;
            }

            PrintWriter printWriter = null;  
            BufferedReader bufferedReader = null;  
            try {  
                printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));  
                Process process = Runtime.getRuntime().exec(" mysqldump -h" + hostIP + " -u" + userName + " -p" + password + " --set-charset=UTF8 " + databaseName);  
                InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");  
                bufferedReader = new BufferedReader(inputStreamReader);  
                String line;  
                while((line = bufferedReader.readLine())!= null){  
                    printWriter.println(line);  
                }  
                printWriter.flush();  
                try {
                    if(process.waitFor() == 0){//0 表示线程正常终止。  
                        logger.info(hostIP+databaseName+"数据库备份成功!");
                        return true;  
                    }
                } catch (InterruptedException e) {
                    logger.info("数据库备份异常:{}",e.getMessage());
                    e.printStackTrace();
                }  
            }catch (IOException e) {
                logger.info("数据库备份异常:{}",e.getMessage());
                e.printStackTrace();  
            } finally {  
                try {  
                    if (bufferedReader != null) {  
                        bufferedReader.close();  
                    }  
                    if (printWriter != null) {  
                        printWriter.close();  
                    }  
                } catch (IOException e) {  
                    logger.info("数据库备份异常:{}",e.getMessage());
                    e.printStackTrace();  
                }  
            }  
        }
        return false;  
    }

你可能感兴趣的:(MySql数据库)