Mysql1.5(binlog增量备份与恢复,innobackupex)

目录:一,增量备份与恢复

        二,mysql主从同步

一增量备份与增量恢复:

1启用Mysql服务的binlog日志文件,实现对数据的实时增量备份

     (1)binlog日志介绍

     (2)启用binlog日志

     (3)手动生成新的binlog日志文件

     (4)删除已有的binlog日志文件

     (5)使用binlog日志恢复数据

(1)binlog日志介绍:

mysql数据库服务日志文件的一种,记录用户连接

数据库服务器之后,执行的除查询之外的sql命令.

(2)启用binlog日志:

1,vim  /etc/my.cnf  (配置主配置文件)

[mysqld]

server_id=51 //定义主机编号
log_bin     //启动binlog日志
binlog_format="mixed"   //定义日志记录格式
记录格式:statement:记录每条修改数据的sql命令

                row :不记录sql语句安全上下文,仅保存哪条记录被修改
                mixed:以上两者的混合,记录sql命令并且记录安全上下文,和被修改的记录
2, systemctl restart mysqld  (重起服务)

日志文件默认的存储位置:

cd /var/lib/mysql/ 

主机名-bin.index  日志索引文件(记录当前已有的binlog日志文件名)

可以用cat查看它

主机名-bin.编号 记录sql命令的日志文件(里面存放的是二进制的执行码)

查看方式:

mysqlbinlog  [选项]   mysql51-bin.000001 

mysqlbinlog mysql51-bin.000001  | grep -i insert 

选项有:

--start-datetime="yyyy-mm-dd hh:mm:ss"  //开始日期时间

--stop-datetime="yyyy-mm-dd hh:mm:ss" //结束日期时间

--start-position=数字   --stop-position=数字

定义日志文件名字存储位置:

1,mkdir   /logdir   ; chown  mysql  /logidr

2,vim  /etc/my.cnf 

[mysqld]
server_id=51
log_bin="/logdir/hcy"
binlog_format="mixed"

3,systemctl restart mysqld

注:配置好后原先的日志文件就无效了,新生成的命令都是存在/logdir/下面.

 

(3)手动生成新的binlog日志文件

 为什么要手动生成新的binlog的日志文件?

系统默认的日志文件只有大于500M才会生成新的日志文件,且无法

对单独库单独表去记录日志文件.

1,在登陆状态下:

执行mysql->flush logs;

2在操作界面下:

执行mysql  -uroot  -p密码   -e 'flush logs'  

或者:mysqldump  -uroot -p密码  --fulsh-logs  库名 > xxx.sql 

3,重起mysqld服务也会新生成日志文件(生产环境下不会用这种)

 

(4)删除已有的binlog日志文件

使用系统命令删除rm(索引文件不会同步更新)

使用sql命令删除:

mysql->reset  master;删除所有的日志文件重新初始化日志文件

mysql->purge  master  logs to "日志名";删除指定编号之前的日志文件

 

(5)使用binlog日志恢复数据  的命令格式

mysqlbinlog  【选项】 日志文件名   | mysql  -uroot  -p密码

指定偏移量的选项:

--start-position=数字   --stop-position=数字

指定时间的选项:

--start-datetime="yyyy-mm-dd hh:mm:ss"  //开始日期时间

--stop-datetime="yyyy-mm-dd hh:mm:ss" //结束日期时间

 

2,使用第3方软件提供命令innobackupex

1,找资源安装软件包:

percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm

rpm -Uvh 查看依赖包,且安装依赖包,才能安装主包。

perl-DBD-mysql      perl-Digest-MD5

libev-4.15-1.el6.rf.x86_64.rpm 

rpm -qa | grep percona // 列出包名

rpm -ql percona-xtrabackup-24   //列出软件包提供的文件

/usr/bin/innobackupex (集成xtrabackup支持innodb 和 xtradb以及myisam)

/usr/bin/xtrabackup (只能备份innodb,和xtradb

 

2,使用innobackupex命令做备份要求?

 (1)确保数据库中的所有库,存储引擎是innodb。

(2)第一次要进行完全备份,备份3个主库

以上操作为必须项,主要为软件搭建环境。

 

注意:使用innobackupex命令去备份恢复的时候,要求/var/lib/mysql必须为空的 rm -rf /var/lib/mysql/*

 

3,innobackupex命令的语法格式

innobackupex   <选项>

--user用户   --password 密码  --databases  数据库名列表

--incremental 目录名   --incremental-basedir  目录名

 

innobackupex  --user root --password  123456  --databases="

mysql  performance_schema  sys  " 备份目录名  --no-timestamp(完全备份)

 

4,增量备份

innobackupex  --user root --password  123456  --databases="

 

mysql  performance_schema  sys  gamedb"   --incremental  目录名  

 --incremental-basedir=上一次备份数据存储的目录名  (增量备份)

 

注意事项:指定的备份的目录必须为空。

 

5,完全恢复

 

innobackupex --user root --password 123456 --databases="

mysql performance_schema sys gamedb" --apply-log --redo-only  完全备份目录

 

增量恢复:

 innobackupex --user root --password 123456 --databases="

 mysql performance_schema sys gamedb"   --apply-log  --redo-only   完全备份目录

 --incremental-dir=目录名

注意:指定目录名的时候要绝对路径,尽量加“”引号。

日志回滚完成后要先删除清空/var/lib/mysql/目录下的所有文件,然后载拷贝文件。

并且要chown -R mysql:mysql 给/var/lib/mysql/* 

 

拷贝文件:

innobackupex --user root --password 123456 --databases="

mysql performance_schema sys gamedb" --copy-back 存储完全备份数据的目录

 

备份配置文件说明:

cat xtrabackup_checkpoints (记录sql命令操作序列号)

backup_type = full-backuped  //备份类型(完全备份)

from_lsn = 0   //日志序列号

to_lsn = 4624642  //日志序列号

last_lsn = 4624651 //日志序列号
compact = 0
recover_binlog_info = 0

xtrabackup_logfile(存放记录sql命令与xtrabackup_checkpoints的序列号对应关系

库目录:(存放sql命令执行后所产生的数据)

 使用  innobackupex完全备份恢复单个表

完全备份:

innobackupex  --user root --password 888888 --databases="gamedb" /gamedball --no-timestamp

模拟误删:mysql -> drop table 库.表;

然后创建回来:mysql -> create table 库.表(字段,约束条件)

注意:要求要和原来的字段,宽度,约束条件一样。

删除表空间:alter table  库.表  discard  tablespace;

导出表信息:innobackupex  --user root --password 密码  

--databases="gamedb.b"  --apply-log --export  /gamedball

拷贝表信息文件到数据库目录下并修改用户和组:

cp  /gamedball/gamedb/b.{cfg,exp,ibd}     /var/lib/mysql/gamedb/

chown  mysql:mysql  /var/lib/mysql/gamedb/b.*

最后一步骤:导入表空间.!

import  导入表空间  alter  table 库.表  import   tablespace;

 

 

 

 

 

 

 

 

 

 

 

    

 

posted @ 2018-03-31 18:34  virlix  阅读(163)  评论(0编辑  收藏  举报