上次讲备份的各种工具
冷备份,可以先把服务停止,通过cp复制,tar打包把文件拷贝出来,恢复的时候,把文件复制到mysql目录里,然后重启服务
热备份,用户可以读写,不影响备份过程
温备份,只能读不能写,,myisam因为没有事务日志,就不能用热备份
数据库的备份工具
用lvm和cp,tar,可以实现几乎热备,因为lvm是在磁盘上开辟一个空间,速度很快,先加所,快照速度很快,然后解锁,这样用户的访问基本不受影响
现在实现下基于lvm的实现
要把数据库放到逻辑卷的空间,才能实现快照,那就需要先把数据库迁移到逻辑卷里
创建逻辑卷
把数据库文件和binlog放到两个卷组
缩小下空间,不然电脑空间不够
存盘
同步
创建物理卷
创建卷组
创建逻辑卷 -L容量 -n命名 指定哪个卷组
创建一个放二进制的
创建文件系统格式化逻辑卷
这时候就要把数据迁移到这两个逻辑卷里
先创建挂载目录
永久挂载需要写进文件
挂载上了,这两个文件权限有问题
现在只要把数据库迁移进去就好了
先修改mysql配置文件
重启服务
现在把数据进行导入
有了数据以后,这个数据库就可以实现用户访问了
现在备份期间,就需要暂时不让用户去写
逻辑卷快照要使用的话,在同一个卷组中就需要有剩余空间
禁止写操作
短暂的锁定,还需要记录当前的数据库日志位置以及一些相应的内容
比如刷新数据库,就是生成一个新的日志文件
要记住这个mster的值,稍后要使用
现在去对表操作,就不允许了
查是可以的
**现在就可以对数据库做快照
-s快照 -p r只读 为了安全
**
快照做完就可以对数据库解锁
用户就可以进行一些操作了
快照怎么去访问,就需要找个文件夹挂载一下
产生问题的原因就是快照跟逻辑卷的uuid都是一样的
文件系统里不允许同样的uuid挂载
所以用下面的方法
就成功挂载上了
把它拷贝出来,或者打包
这样数据和属性都有了
、
快照实际上是把数据库的更改,只有对数据库发生更改就会把旧数据推送到快照里,所以这样就带来,快照对于数据库更改就比较慢,
把数据备份完就赶紧要删除快照,不删除快照,用户访问数据库的速度就比较慢
快照没了,用户就恢复了对于数据库的访问
如果做完备份,数据库崩溃了
这是在快照做好之后创建的,这些操作记录在二进制文件里
总之数据库发生变化了
现在进行搞破坏,先把数据库删除了
怎么恢复数据,先停止服务,把之前备份文件拷贝过来
就有数据了
现在启动服务,里面的数据就是我们做快照的数据,但是里面的数据不是最新的
现在需要把二进制日志导入进来,就要先把二进制文件导出来
加个读锁,现在数据库就不能为用户进行访问
从这之前的内容都是没有进行备份的,都是二进制内容
、
**4和5发生的变化就是最新的变化
245之后的内容全要
**
245之后内容全要
5里面的东西也要追加
**现在可以把数据库进制用户访问,比如把网络服务关掉 skip networking
这项加了以后,用户就无法直接连接数据库了,不支持网络连接只支持你自己链接
**
3306端口就没打开
导入脚本
现在就需要立即回复数据库,不能让别人一直访问不了
一般还原数据库都是要禁止别人访问的
现在数据库就全了
现在重启了,用户也可以进行操作了
后续的部分就是还原的过程
这就是用cp和lvm实现了一个几乎热备的还原
有了思路了,以后数据库出现问题,二进制文件就一定要保护好
上次介绍 了mysqldump。,选项要根据具体情况,不一定非要使用
具体在生产中该如何使用,结合不同的存储引擎,使用合适的选项
基于数据库个数刷新的
实现机制就是在备份数据库的时候,加锁,备份完后,再备份第二个数据库的时候再加锁,就是在备份不同数据库中,不是同一时间加锁的,这就带来,比如第一个数据库需要10分钟,10分钟用户可以修改第二个数据库
当我们备份完第一个数据库了,就释放锁 了,备份第二个数据库,就造成备份的点不一致了,
因为用这种方法就不能保证多个数据库备份是一个时刻的
所以要配合其他选项 比如single-transaction或者-x 配合masterdata,将只刷新一次日志
不同存储引擎推荐的备份,myisam不支持事务,只支持温备
对于这一项,innodb用不着,但是innodb用不着,因为支持事务,用不着温备
现在看一下innodb数据库将来适合哪些备份
single transaction等于开启一个事务,确保备份的数据库都在一个点上,因为事务的隔离性,就看不到别人的脏数据,
默认的级别是,可重复读,会产生幻读,最起码备份下来的数据是一致的
由于是基于事务的机制
所以别的用户该访问访问,该写写
但是这个程度只能一定程度上的防止数据不一致,但有些防不住
DDL语言,数据库事务是无法避免的,删除表,修改表
如果有个人进行这样的操作,那对于备份来讲,还是不确保一致性的,只能防止一些基本的DML增删改的操作
DDL语言是回滚不了的
开启一个事务,删除表,是不能撤销的,因为除了DML都是隐式提交,都是自动提交的,不需要commit
加quick提高备份速度
强烈建议在innodb用这种选项
-A 备份所有数据库
-F生成新的二进制文件
-E有些事件需要备份
-R存储过程和存储函数
事实上-Amysql数据库就包括了ER,所以-E,-R加不加无所谓
single-transaction可以避免数据库加锁,别人访问不了
master-data=1 会在进制文件里,会加一个时间位置和文件名,就知道基于哪个文件备份的和从哪里开始备份了
flush-privileges刷新策略,使权限生效
-hex-blob转换成16进制保存
写一个脚本,每天2点进行备份
将来是要放在计划任务里的
暂时不需要用户账号
就这次成功,其他都失败
如何还原
还原都有原则,期间不让用户访问
还原了数据就出来了