用JAVA实现不能相互通信的两台电脑间进行增量备份

         业务上有这么一个需求:有两台电脑都可以对同一数据库进行操作,但其中一台电脑始终离线,所以与其交互只能通过U盘拷数据库的东西进行增量备份与同步。

       分两步实现,先手动实现增量备份的功能,然后再通过java程序调用cmd命令自动执行。实现过程中参照下面链接,最关键的是java调用时,没有配置mysql环境变量。

http://www.jb51.net/article/27919.htm

1、先设置my.ini或者my.cnf(开启二进制日志功能)

C:\ProgramFiles\MySQL\MySQL Server 5.0\my.ini

开启后要找到[mysqld] 區段,並加上 log_bin 參數指定 Binary Log 的儲存位置 ( 類似 "交易記錄檔" )

[mysqld]

log_bin="d:\Backup\mysqllog\mysql-bin.log"

2、配置mysql环境变量(手动实现增量备份时不需要设置此项,用java程序调用命令时设置这项后就会方便很多)

右击桌面上的我的电脑/属性/高级/环境变量/系统变量/path添加C:\ProgramFiles\MySQL\MySQL Server 5.0\bin(要把mysql路径换成本机的)

3、用mysqldump备份,以防出错时恢复

只备份cardmsdb库

C:\ProgramFiles\MySQL\MySQL Server 5.0\bin>mysqldump -uroot -proot cardmsdb>d:\Backup\mysqllog\cardmsdb.sql

备份全部数据库

C:\ProgramFiles\MySQL\MySQL Server 5.0\bin>mysqldump -uroot -proot--single-transaction --flush-logs --master-data=2 --all-databases -r MySQLFull.sql

4、二进制文件按时间,数据库转成sql文件(其中”>>是在原文件后面继续加”)

C:\ProgramFiles\MySQL\MySQL Server 5.0\bin>mysqlbinlog --start-datetime="2013-01-2316:40:00" --stopdatetime="2013-01-24 00:00:00"--database=cardmsdbd:\Backup\mysqllog\mysqlbin.000001>d:\Backup\mysqllog\mysqlbin000001.sql

5、在另一台不通信的机器上执行sql文件(如果出错,则执行第三步的mysqlFull.sql)

进入Mysqlclient

mysql>sourced:/Backup/mysqllog/mysqlbin000001.sql

或者数据库查询,导入语句执行也行

6、通过java来执行上面一些语句(以mysqldump为例,其中source命令变成mysql命令)

String str = "cmd /c mysqldump -h localhost -uroot  -proot cardmsdb > "+filePath+"\\"+dataString+"fullBack.sql";

String str = "cmd /c mysql -h 192.168.0.168 -uroot  -proot cardmsdb < "+filePath;   //source命令

	Runtime rt = Runtime.getRuntime();
        System.out.println(str);
        Process pcs;
	try {
		pcs = rt.exec(str);
		BufferedReader br = new BufferedReader(new InputStreamReader(pcs.getErrorStream()));
	        String line = new String();
	        while ((line = br.readLine()) != null) {
	            System.out.println(line);
	        }
	        try {
	            pcs.waitFor();
	        } catch (InterruptedException a) {
	            System.err.println("processes was interrupted");
	        }
	        br.close();
	        pcs.exitValue(); 
	} catch (IOException e1) {
			// TODO Auto-generated catch block
		e1.printStackTrace();
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值