通用 根据更新日期 来备份mysql 数据库(增量备份)

13 篇文章 1 订阅
8 篇文章 0 订阅

由于新装了个ssd,原来的机械盘作为副盘。

一直对ssd的可靠性保留怀疑的态度,于是,在机器上装了svn,把平时的ssd的资料使用svn提交到副盘。

mysql数据库都是自己平时开发的小项目,特点是,开发完成之后就停止更新,于是不可能每次都备份全部的数据库,这是非常浪费的

于是写脚本如下,脚本可以想起来就执行一次,也可以加入windows计划或者linux crontab,不会造成太大的额外负担

$host = 'localhost';
$user = 'root';
$pass = '';
$mysql_dump_bin = 'D:\wamp\bin\mysql\mysql5.5.16\bin\mysqldump';
$mysql_backup_dir = 'E:\db_backup';
$mysql_backup_flag = $mysql_backup_dir . '\\flag.txt';
touch($mysql_backup_flag);
try{
	$db_link = mysql_connect('localhost','root','');
	mysql_select_db('information_schema',$db_link);
	$time_flag = file_get_contents($mysql_backup_flag);
	$dbs = array();
	$q = mysql_query("select distinct `TABLE_SCHEMA` from `TABLES` where `UPDATE_TIME` > '{$time_flag}'",$db_link);
	while($obj = mysql_fetch_object($q)){
		if($obj->TABLE_SCHEMA == 'information_schema' || $obj->TABLE_SCHEMA == 'performance_schema')
			continue;
		$dbs[] = $obj->TABLE_SCHEMA;
	}
	if($dbs){
		if($pass){
			$pass_str = '-p'.$pass;
		}
		
		foreach($dbs as $db){
			echo "backup {$db} ....\n";
			system("{$mysql_dump_bin} -u{$user} {$pass_str} {$db} > {$mysql_backup_dir}\\{$db}-last.sql");
			echo "backup {$db} done.\n";
		}

		$q = mysql_query("select max(`UPDATE_TIME`) as n from `TABLES`",$db_link);

		$time_flag = mysql_result($q,0,'n');
		echo "Writing last back time.\n";
		file_put_contents($mysql_backup_flag,$time_flag);
		echo "All done.";
	}else{
		echo "Nothing to do. Done.";
	}
	
}catch(Exeption $e){
	die('Mysql server is not running.');
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值