MySQL中基于mysqldump和二进制日志log-bin进行逻辑备份以及基于时间点的还原
技术百科
巴扎黑
发布时间:2017-06-26
浏览: 次
本文出处:
本文仅模拟使用mysqldump和log-bin二进制日志进行简单测试,仅作为个人学习笔记,可能离实际应用还有很大差距,仅参考。
开启MySQL的bin-log二进制日志
模拟还原是需要mysqldump出来的文件和log-bin,因此需要开始log-bin二进制日志。
mysql5.7.18在开启二进制日志的时候除了要设置log-bin的位置之外,另外需要设置一个server-id,MySQL之前的版本应该不需要这个设置。
吐槽一下开源软件,基本上每个版本都有一些跟之前版本不一样的地方,网上查资料往往不好使,不同版本的情况下不少东西都是不一样的,这一点需要注
意。
重启之后,查询log_bin相关的变量
mysqldump备份(导出)数据的基本使用
mysqldump命令参数相当多,简单记录一下常用的命令,以及利用mysqldump备份(严格说是导出数据)和二进制日志log-bin进行数据库还原操作。
-- 备份testdb整个数据库,-l 表示给所有表上加一个读锁,-F (F要大写,小写不报错单页无效)表示滚动生成一个新的日志文件
mysqldump -u root -p -l -F -h localhost testdb > usr/local/mysqlbak/test20170607_data.sql
备份出来的文件就是create table和insert into table的脚本
-- 备份testdb数据库中的test_table1 test_table2两张表,加上--no-create-info就意味这个备份出来的文件不带create table的脚本,仅仅是insert into table的信息
mysqldump -uroot -p -h localhost testdb test_table1 test_table2 --no-create-info> usr/local/mysqlbak/test20170606_1.sql
-- 备份testdb数据库中的test2表中的一部分数据,也就是备份test_table1表中符合idmysqldump -uroot -p -h localhost testdb test_table1 --where "id > usr/local/mysqlbak/test20170606_2.sql
更多mysqldump的参数,参考:
另外,mysql log-bin的更换策略:
使用索引来循环文件,在以下条件将循环至下一个索引
1。服务器重启
2。服务器被更新
3。日志到达了最大日志长度 max_binlog_size
4。日志被刷新 mysql> flush logs;
利用mysqldump备份的文件和log-bin二进制日志进行还原
首先在以表中有数据的情况下进行备份
执行 mysqldump -u root -p -l -F -h localhost testdb --master-data=2 > usr/local/mysqlbak/test20170607_data.sql
这里加了一个--master-data=2的选项,目的是在备份文件中备注出来当前的log_bin的文件,
至于为什么要加这个命令,很多博客上都记录的是用mysqldump备份出来一个文件之后,修改数据,然后模拟数据库误删或者宕机还原怎么的,然后在使用mysqldump出来的文件还原之后,接着使用log-bin还原
虽然都是测试模拟,但是有一个明显的问题啊,怎么知道mysqldump之后日志是否发生了滚动,滚动了几次?
如果日志不滚动还要,按照时间点或者位置还原log-bin文件,如果滚动了,怎么知道滚动了几个日志文件呢
就需要在mysqldump执行的时候,记录下来刷新日志之后的新生成的log-bin文件,在使用日志还原的时候,才能判断使用哪些日志进行还原。
有了--master-data=2的选项,才知道mysqldump备份时候的log_file位置
然后继续往表中插入10条数据
然后模拟在某个时间点误删数据的情况,truncate测试表,测试表此时为空
首先利用mysqldump出来的文件还原数据库,mysqldump出来的文件备份是100行时候的数据
因为备份文件中备份的时候的数据是100行,这里还原之后是100行,没有问题。
然后接着利用log-bin按照时间点还原,上面说了,mysqldump出来的文件记录了日志刷新之后的log-bin的文件名称,
那么就可以判断日志是否发生了滚动,如果没有滚动,就按照下图最新的log-bin进行按照时间点进行还原。
进行一次mysqldump备份还原
mysql -u root -p testdb 进然后再行一次基于bin-log的时间点还原
mysqlbinlog --stop-datetime="2017-6-7 21:45:00" /var/lib/mysql/mysql-bin.000022 | mysql -u root -p testdb
然后数据就回来了。
当然这里仅仅是模拟操作,当然还有许多细节尚未确定,如果发生了日志滚动,要做基于时间点的还原,还要追究到究竟是基于哪个日志文件的时间点。
总结:
本文仅仅以一个简单的示例来模式数据库的还原操作,
mysqldump备份模式比较简单粗暴,仅仅是将数据导出为insert脚本,在还原较大数据时候会有性能问题,可能mysqldump就不适合了,就需要更为高效的xtrabackup来做备份还原了。
# 的是
# 几个
# 都是
# 数据库中
# 仅仅是
# 情况下
# 重启
# 发生了
# mysql
# 备份文件
# 动了
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么看电池循环次数_Win11笔记本电池
- GML (Geography Markup Lan
- Win11怎么关闭自动修复_跳过Win11开机自动
- c++中如何使用std::variant_c++1
- Win11怎么清理C盘系统错误报告_Win11清理
- 如何使用Golang sort排序切片_Golan
- 用lighttpd能运行php吗_lighttpd
- LINUX下如何配置VLAN虚拟局域网_在LINU
- Win10怎样安装PPT模板_Win10安装PPT
- 如何在Golang中处理数据库事务错误_回滚和日志
- Win11搜索栏无法输入_解决Win11开始菜单搜
- 如何在Golang中优化文件读写性能_使用缓冲和并
- Win11如何隐藏桌面图标 Win11一键隐藏/显
- PHP怎么接收前端传的时间戳_处理时间戳参数转换技
- Win10怎样设置多显示器_Win10多显示器扩展
- php中$this和::能混用吗_对象与静态作用域
- c++获取当前时间戳_c++ time函数使用详解
- Windows10系统怎么查看硬盘健康_Win10
- 如何使用Golang管理模块版本_Golanggo
- Win11怎么关闭VBS安全性_Windows11
- Windows如何使用注册表查找和删除项?(reg
- Win11如何关闭小娜Cortana Win11禁
- 如何在 Go 中可靠地测试含 time.Time
- Windows服务启动类型恢复方法_错误修改导致的
- 如何在Golang中实现文件下载_Golang文件
- c++中如何使用虚函数实现多态_c++多态性实现原
- 短链接怎么自定义还原php_修改解码规则适配需求【
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- Win11怎么关闭触控板_Win11笔记本禁用触摸
- Windows怎样关闭Edge新标签页广告_Win
- Win11怎么设置开机自动连接宽带_Windows
- 如何在Windows上设置闹钟和计时器_系统自带的
- 如何在Golang中实现自定义Benchmark_
- php会话怎么开启_session_start函数
- 如何使用Golang开发简单的聊天室消息存储_Go
- PHP主流架构如何处理会话管理_Session与C
- Python字符串处理进阶_切片方法解析【指导】
- Win11怎么关闭用户账户控制UAC_Window
- Windows电脑如何进入安全模式?(多种按键方法
- Python随机数生成_random模块说明【指导
- PythonWeb前后端整合项目教程_FastAP
- Win11怎么检查TPM2.0模块_Windows
- Python装饰器设计思路_功能增强机制说明【指导
- 小程序里php怎么变mp4_小程序调用php生成m
- Win11怎么更改管理员名字 Win11修改账户名
- Win10电脑C盘红了怎么清理_Windows10
- php订单日志怎么记录物流_php记录订单物流变更
- Python与OpenAI接口集成实战_生成式AI
- Win11 C盘满了怎么清理 Win11磁盘清理和
- Win11怎么更改鼠标指针方案_Windows11

QQ客服