- 创建测试库和表,并插入测试数据
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test`.`t_user`(`id`, `name`, `age`) VALUES (1, 'zhangsan', 20);
INSERT INTO `test`.`t_user`(`id`, `name`, `age`) VALUES (2, 'lisi', 21);
INSERT INTO `test`.`t_user`(`id`, `name`, `age`) VALUES (3, 'wangwu', 22);
INSERT INTO `test`.`t_user`(`id`, `name`, `age`) VALUES (4, 'zhaoliu', 30);
- 执行mysqldump导出数据
mysqldump -uroot -pjusthyc1234 --databases test > /data/dump_test.sql
#-u指定用户
#-p指定密码
#--databases 指定要备份的库,多个库以空格分隔,也可以指定--all-databases参数来备份全部的数据库
- 查看备份文件是否存在
- 此时更新id=4的记录的age字段为35(好可怜,马上要被辞退了。。。)
update t_user set age = 35 where id = 4;
- 假设有人执行了删库操作(新手会犯这类错误,删数据忘记加条件)
-- 删除数据忘记加条件
delete from t_user
- 不怕,我们有备份数据,紧急恢复下,把数据恢复到执行dump的那个状态
mysql -uroot -pjusthyc1234 test < /data/dump_test.sql
- 数据是恢复了,但是版本有点老了,丢掉了我们之前的update操作,这个咋办,没事,我们还有binlog日志,这个日志可以帮助我们增量恢复数据,来看一下binlog日志吧
mysqlbinlog --no-defaults --set-charset=utf8 mysql-bin.000001 -d test
#--no-defaults:忽略默认值
#--set-charset=utf8:指定字符集
#-d:指定数据库
好吧,一大推看不懂的东西 ,不过我们可以找到执行delete的那个时间点,我们只需要把数据恢复到这个时间点之前就好了
- 执行mysqlbinlog恢复数据,然后查询下数据,可以看到从dump到删库之前的数据改动恢复回来啦,可以下班回家啦
mysqlbinlog --no-defaults --set-charset=utf8 --start-datetime "2020-06-03 15:00:00" --stop-datetime "2020-06-03 16:18:19" /opt/mysql/binlogs/mysql-bin.000001 | mysql -uroot -p