现在的位置: 首页 > 关系型数据库 > 备份恢复 > 正文

数据库崩溃,利用备份和日志进行灾难恢复

时间:2014年02月27日 | 分类:备份恢复 | 评论:0 条 | 浏览:1,802 次

在实际的工作中,我们可能经常会遇到数据库宕机,数据丢失的情况,下面,我将演示一个模拟环境

1.数据库正常启动插入数据:

  1. [root@client103 ~]# mysql -uroot -pkongzhong  
  2. mysql> use test;  
  3. mysql> insert into a select * from a;  
  4. #注: 这里不演示建表,默认大家都懂  
  5. # 下面进行一次全备  
  6. [root@client103 ~]#  innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306  /tmp/backup/ >/tmp/backup/innoback.log 2>&1  
  7.   
  8. # 再次插入数据  
  9. mysql> insert into a select * from a;  
  10. # 实行增量备份  
  11. [root@client103 ~]#  innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --incremental --incremental-basedir=/tmp/backup/2014-02-27_13-24-51/  /tmp/backup/  
  12.   
  13. # 再次插入数据  
  14. mysql> insert into a select * from a;  
  15. # 此时大家记录一下现在的总行数(一会还原需要核对数据的)  
  16. # 此时数据库宕机  
  17. #模拟宕机操作为:  
  18. # 1.将数据目录的下的二进制日志,复制到 /tmp/backup,一会需要重演日志(此步非常重要,复制操作默认大家会了)  
  19. # 2.删除数据目录下的所有文件,此时数据库就崩溃了(如果关闭数据库,是关不了,记得杀掉进程,kill -9 ....)  

2.数据库宕机后执行恢复操作

  1. # 全备应用日志  
  2. [root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-02-27_13-24-51/  
  3. # 增备应用日志  
  4. [root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-02-27_13-24-51/ --incremental-dir=/tmp/backup/2014-02-27_13-32-44/  
  5. # 应用完日志,利用全备恢复数据  
  6. [root@client103 ~]# innobackupex --copy-back /tmp/backup/2014-02-27_13-24-51/  
  7. # 修改数据目录权限为mysql:mysql  
  8. [root@client103 ~]# chown mysq:mysql /var/lib/mysql -R  
  9. # 启动数据库  
  10. [root@client103 ~]# /etc/init.d/mysql start  
  11. # 登陆数据库,查看数据行数,发现数值与崩溃前是不一致的,所以需要利用日志恢复  
  12. [root@client103 ~]# mysql -uroot -pkongzhong  
  13. mysql> use test;  
  14. mysql>  select count(*) from a;  
  15. # 查看最后一次增备完成时的日志文件名和pos号(备份时自动记录的)  
  16. [root@client103 ~]# cat /tmp/backup/2014-02-27_13-32-44/xtrabackup_binlog_info   
  17. mysql-103-bin.000005    3694  
  18. # 所以,我们使用二进制执行恢复时,起始点为3694  
  19. # 利用日志恢复  
  20. [root@client103 ~]# mysqlbinlog --start-pos=3694 /tmp/backup/mysql-103-bin.000005  |mysql -uroot -pkongzhong  
  21. # 此时在登陆数据库查看数据是否相符,请自行测试  
  22. mysql> use test;  
  23. mysql>  select count(*) from a;  

×