更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)mysql
在实际的工做中,咱们可能常常会遇到数据库宕机,数据丢失的状况,下面,我将演示一个模拟环境sql
[root@client103 ~]# mysql -uroot -pkongzhong mysql> use test; mysql> insert into a select * from a; #注: 这里不演示建表,默认你们都懂 # 下面进行一次全备 [root@client103 ~]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 /tmp/backup/ >/tmp/backup/innoback.log 2>&1 # 再次插入数据 mysql> insert into a select * from a; # 实行增量备份 [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> insert into a select * from a; # 此时你们记录一下如今的总行数(一会还原须要核对数据的) # 此时数据库宕机 #模拟宕机操做为: # 1.将数据目录的下的二进制日志,复制到 /tmp/backup,一会须要重演日志(此步很是重要,复制操做默认你们会了) # 2.删除数据目录下的全部文件,此时数据库就崩溃了(若是关闭数据库,是关不了,记得杀掉进程,kill -9 ....)
# 全备应用日志 [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 ~]# chown mysq:mysql /var/lib/mysql -R # 启动数据库 [root@client103 ~]# /etc/init.d/mysql start # 登录数据库,查看数据行数,发现数值与崩溃前是不一致的,因此须要利用日志恢复 [root@client103 ~]# mysql -uroot -pkongzhong mysql> use test; mysql> select count(*) from a; # 查看最后一次增备完成时的日志文件名和pos号(备份时自动记录的) [root@client103 ~]# cat /tmp/backup/2014-02-27_13-32-44/xtrabackup_binlog_info mysql-103-bin.000005 3694 # 因此,咱们使用二进制执行恢复时,起始点为3694 # 利用日志恢复 [root@client103 ~]# mysqlbinlog --start-pos=3694 /tmp/backup/mysql-103-bin.000005 |mysql -uroot -pkongzhong # 此时在登录数据库查看数据是否相符,请自行测试 mysql> use test; mysql> select count(*) from a;