关于二进制相关的各种变量,如何操作二进制相关日志
show master status 可以查看新的二进制文件的位置
位置和文件大小其实一样,
将来可以设置哪些数据库的修改才记录二进制日志,默认情况所有对数据库的更改都记录日志
查看二进制文件的内容
从446之后的三条指令
必须借助工具才能查看里面的二进制文件
乱码敲reset命令
mysqlbinlog工具可以直接操作二进制文件
相当于直接以文本方式打开了
这些就相当于位置
可以看从什么开始,到什么时候结束的内容
也可以按照时间,从这个时间点往后的
如果有人发生误操作,以某个时间去看二进制日志,就可以去看,
比如现在把表删除了
二进制日志文件之前的位置
现在8210
比如现在23:44,估摸是23:40以后删的表,就找23:40以后的内容
利用这一点可以还原
先试试把记录格式换成行格式
重新启动数据库
现在变成行的了
删除teacher表里第5行开始的记录
生成新的二进制日志了
记录行,更改的记录几行就有几条,不加选项基于base64编码,update和delete都用base编码显示了,=等号代表凑整+v就现实sql语句样式
二进制日志和数据库文件分离存放
创建一个准备存放二进制文件的目录
原来的文件可以删除了,在指定目录/data下就生成了两个文件,将来可以利用二进制日志做数据库的还原
insert语句一执行,就会记录都二进制日志文件中
现在可以导出里面的内容
记录的就是对数据的操作
先把刚才加的记录删除
指定数据库导入
利用二进制丢失的数据可以利用这种方式找回
flush logs可以切换日志
每次flush都会生成新的二进制文件
可以删除二进制日志
磁盘文件也删除了
索引文件也更新了
resetmaster是彻底删除 需要10以上版本支持
重新开始计数
这个命令比较危险,把二进制日志全部删除了
备份工具
数据库的备份与二进制都是密切相关的
**完全备份就是把整个mysql所有内容备份,包括用户数据,系统数据全部备份
部分备份,就是备份表和数据库
增量备份 (备份上一次完全备份或者增量备份到现在的完全变化
**
如果 星期四系统崩溃了
第一步,要还原数据库就需要先还原全部备份,还有就是必须按照顺序234增量备份,
但是增量备份到出问题的时间的中间的数据就需要二进制文件了默认mysql设置是不符合生产要求的
事务日志和数据库文件最好路径要按照默认的,最好放在独立的目录里,一般就是独立的磁盘
还有就是
innodb数据库所有数据文件挤在一个文件里了,要分开,每个表,innodb_per_table
还有就是建立账号
用户链接还存在名字解析的问题,DNS解析禁用了 ,skip——name——resolvf
用户的sql缓存默认是0 (0代表没有空间不缓存)
数据库建立起来,但是每个表还没有索引,看情况还要给某些字段加索引(要用慢查询扫描的观察观察)
差异备份是前一次完全备份到当次的差异备份的数据变化,周二的差异备份,仍然是周日的完全备份到到周二差异备份的数据变化
好处是把前面的都备份了,假如周四系统又崩溃了
把完全备份和最后的差异备份还原就足够了
增量备份是还原慢,备份快,差异备份就是还原快,备份慢
这一段也是用二进制日志还原,差异备份其实本质也是用的二进制的完全备份是肯定要做的,因为是后续备份的基础
冷备就是数据库关了再备份,关了就等于读写都操作不了了
热备就是读写都能执行,希望用户一直能够访问
(myisam不支持热备,因为是不支持事务,只能温备)
温备就是加上读锁,只能读不能进行写操作
早期版本,数据库都放在一个文件里,后面都是分开放,放在ibd,frm放表定义
冷备
找一个新主机没有数据库的
两个数据库要还原记得,版本要一致
之前的数据库停止
新安装的机器目录是空的
把必要的文件进行复制,可以把目录打包直接过去,也可以scp复制过去
新机器上就有文件了
修改复制过去的所属权限
按照道理是需要两边配置文件一样的
数据都在,这就是冷备份
物理备份是复制文件
逻辑备份就是,从数据库利用mysql协议,导出,简单地说就是执行select语句,等于进行全盘扫描放到一个磁盘文件里,
由于是执行数据库的查询导出操作,要去利用mysql协议进行访问,相对来讲,速度是比较慢的,
因为是利用查询语句来备份,所以跟存储引擎也就没有关系,占用空间小
可能丢失精度,因为数据库存,不一定存文本和数字之类的,很多情况下会存二进制数据,比如一些小的文件,图片,
放到数据库有好处就是数据库可以设置权限,但是导出来就有可能丢失这些精度
不够现在类似这样的图片一般不放在数据库里,一般放在文件里,数据库存文件路径
也可以用逻辑卷的快照来备份,基于逻辑卷的快照可以扩展空间
冷备份,可以先把服务停止,通过cp复制,tar打包把文件拷贝出来,恢复的时候,把文件复制到mysql目录里,然后重启服务
热备份,用户可以读写,不影响备份过程
温备份,只能读不能写,,myisam因为没有事务日志,就不能用热备份
innodb支持事务,默认事务可重复读,可重复读代表在一个事务所看到的数据都是一致的,
DDL语言是不支持事务的(表定义语言)
mysqldump
把mysql的文件组成一个巨大的sql文件
备份所有数据库,带有创建数据库的指令。create database
这样就把数据库里所有内容导出
这个表太大了,使用truncate 清空
默认显示当前数据库,创建和增加的,现在里面是没有create database语句的,也就是将来还原需要先把数据库创建了,再导入这个文件
导入出hellodb数据库内容
假设现在把数据库内容删除
磁盘上对应的hellodb文件夹也没了
直接执行这个备份sql文件是缺少数据库的
需要创建一个数据库,也可以不叫原来的数据库名字
导入备份的文件
现在就有数据了
这样使用是不推荐的,因为很容易创建的库跟之前的结构特性不一样,带来一些恢复上的问题
推荐使用-B备份或者-A
-B代表对数据库做备份,是可以指定多个数据库的
-B会显示create命令,相对来讲可以保留原来数据库的所有内容
之前的这个文件就是类似-B选项导出,有create信息
所有这个还原很简单直接导入即可,这样就不用手动创建数据库
mysql数据库放了一些用户信息,也需要备份
-E备份调度器,计划任务
存储过程和函数
这些都包含在-A里了
默认字符集就是UTF8
二进制日志如果不启用,就使用不 了,备份的时候标识出当时做备份的二进制日志位置
、这里显示的就是二进制日志当前在哪里,也就是能够知道还原从什么时候开始的二进制文件
当前是16288
加上master-data再次做一次备份
当前文件记录了,changa master 备份的时间点
现在在数据库里做一些修改操作
同样二进制文件发生了变化
之后不小心把目录删除了
当前数据库就显示没了
数据库还原,首先把刚才的备份导入,导入的时候记得先把二进制日志先停了
当前二进制路径是16672
出现错误时因为,虽然库没了,但是表的记录信息还在
现在内容已经生成
重新删除,虽然把目录删了,但是以为表还在内存中存在
重新启动数据库
代表是数据库信息并没有全部清除
这么删除目录,表信息还保留
这样就先把之前hello数据库拷贝到hellodb
有个文件夹名,重新拷贝
重新启动下数据库
可以能处于锁的状态
停了数据库再拷贝
复制过来后重新启动数据库
还是有问题,可能再performance_schema还记录一些信息
换个方式还原,这个备份基于二进制文件
换一个数据库名字,这样还原就还原到hellodb2里了
想要把这个数据库恢复到最新状态
重新对hellodb2做下完全备份,然后进行修改,修改之后备份还原
日志从头来
现在对数据库做备份
这里写了备份时间时245
重新对数据库做修改
二进制日志增长了
假设数据库不小心删除了
如何还原
首先断开网络不要继续访问了
停止二进制日志记录
导入文件
把做过备份之后的修改恢复,把245之后的还原
找到二进制文件把245之后的导出,里面有个drop部分语句
把drop记录删除
再把这个文件读入
还原到较新状态了
记得把二进制日志开启