数据库崩溃,利用备份和日志进行灾难恢复
在实际的工作中,我们可能经常会遇到数据库宕机,数据丢失的情况,下面,我将演示一个模拟环境
1.数据库正常启动插入数据:
[root@client103~]#mysql-uroot-pkongzhong mysql>usetest; mysql>insertintoaselect*froma; #注:这里不演示建表,默认大家都懂 #下面进行一次全备 [root@client103~]#innobackupex--user=root--password=kongzhong--defaults-file=/etc/my.cnf--port=3306/tmp/backup/>/tmp/backup/innoback.log2>&1 #再次插入数据 mysql>insertintoaselect*froma; #实行增量备份 [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/ #再次插入数据 mysql>insertintoaselect*froma; #此时大家记录一下现在的总行数(一会还原需要核对数据的) #此时数据库宕机 #模拟宕机操作为: #1.将数据目录的下的二进制日志,复制到/tmp/backup,一会需要重演日志(此步非常重要,复制操作默认大家会了) #2.删除数据目录下的所有文件,此时数据库就崩溃了(如果关闭数据库,是关不了,记得杀掉进程,kill-9....)
2.数据库宕机后执行恢复操作
在实际的工作中,我们可能经常会遇到数据库宕机,数据丢失的情况,下面,我将演示一个模拟环境 1.数据库正常启动插入数据: [root@client103~]#mysql-uroot-pkongzhong mysql>usetest; mysql>insertintoaselect*froma; #注:这里不演示建表,默认大家都懂 #下面进行一次全备 [root@client103~]#innobackupex--user=root--password=kongzhong--defaults-file=/etc/my.cnf--port=3306/tmp/backup/>/tmp/backup/innoback.log2>&1 #再次插入数据 mysql>insertintoaselect*froma; #实行增量备份 [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/ #再次插入数据 mysql>insertintoaselect*froma; #此时大家记录一下现在的总行数(一会还原需要核对数据的) #此时数据库宕机 #模拟宕机操作为: #1.将数据目录的下的二进制日志,复制到/tmp/backup,一会需要重演日志(此步非常重要,复制操作默认大家会了) #2.删除数据目录下的所有文件,此时数据库就崩溃了(如果关闭数据库,是关不了,记得杀掉进程,kill-9....) 2.数据库宕机后执行恢复操作 #全备应用日志 [root@client103~]#innobackupex--apply-log/tmp/backup/2014-02-27_13-24-51/ #增备应用日志 [root@client103~]#innobackupex--apply-log/tmp/backup/2014-02-27_13-24-51/--incremental-dir=/tmp/backup/2014-02-27_13-32-44/ #应用完日志,利用全备恢复数据 [root@client103~]#innobackupex--copy-back/tmp/backup/2014-02-27_13-24-51/ #修改数据目录权限为mysql:mysql [root@client103~]#chownmysq:mysql/var/lib/mysql-R #启动数据库 [root@client103~]#/etc/init.d/mysqlstart #登陆数据库,查看数据行数,发现数值与崩溃前是不一致的,所以需要利用日志恢复 [root@client103~]#mysql-uroot-pkongzhong mysql>usetest; mysql>selectcount(*)froma; #查看最后一次增备完成时的日志文件名和pos号(备份时自动记录的) [root@client103~]#cat/tmp/backup/2014-02-27_13-32-44/xtrabackup_binlog_info mysql-103-bin.0000053694 #所以,我们使用二进制执行恢复时,起始点为3694 #利用日志恢复 [root@client103~]#mysqlbinlog--start-pos=3694/tmp/backup/mysql-103-bin.000005|mysql-uroot-pkongzhong #此时在登陆数据库查看数据是否相符,请自行测试 mysql>usetest; mysql>selectcount(*)froma;
以上就是本文的全部内容,希望大家可以喜欢。