通用 根据更新日期 来备份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
    评论
MySQL数据库增量备份是一种备份策略,只备份自上次全量备份以来的数据变化。下面是一种常见的实现方法: 1. 首先,执行一次全量备份,将整个数据库备份到一个文件中。 ``` mysqldump -u <username> -p<password> --single-transaction --flush-logs --master-data=2 --all-databases > full_backup.sql ``` 这个命令会生成一个名为 `full_backup.sql` 的文件,其中包含了所有数据库的数据和结构。 2. 然后,将MySQL日志文件复制到备份目录中。MySQL的日志文件包括二进制日志文件(binary log)和错误日志文件(error log),其中二进制日志文件记录了所有数据更改的详细信息。 3. 每次进行增量备份时,首先确定上次备份结束后的二进制日志文件名和位置。可以通过查询MySQL的变量 `show master status` 获取到当前正在使用的二进制日志文件名和位置。 4. 将上次备份之后的新的二进制日志文件拷贝到备份目录中。如果有多个新的二进制日志文件,需要全部拷贝。 5. 使用 `mysqlbinlog` 工具解析这些新的二进制日志文件,并将其中的SQL语句保存到一个新的文件中。 ``` mysqlbinlog <binary_log_file> > incremental_backup.sql ``` 这个命令会生成一个名为 `incremental_backup.sql` 的文件,其中包含了所有新的数据变更操作语句。 6. 将全量备份文件和增量备份文件按需恢复到目标MySQL服务器上。可以使用 `mysql` 命令执行这些SQL文件。 ``` mysql -u <username> -p<password> < full_backup.sql mysql -u <username> -p<password> < incremental_backup.sql ``` 通过以上步骤,你可以实现MySQL数据库增量备份。每次备份只需要备份变化的数据,可以减少备份时间和存储空间的占用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值