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;