关于备份
1,备份目标
数据的一致性
服务的可用性
2.备份技术
1) 物理备份/冷备份
直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不 同的MySQL版本。
tar,cp,scp
拷贝数据, 优点快,缺点服务停止。
2) 逻辑备份/热备份
备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库。
mysqldump,mydumper
效率相对较低
备份模式
完全备份
增量备份 (连续回复)
特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所 以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢复,恢复时间长。
差异备份 (跳跃恢复)
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后 一次的差异版本(包含所有的差异),恢复速度介于完整备份和增量备份之间。
实战案例1
官方站点 Open Source Database Software Support & Services | Percona
1.安装
1)安装percona需要的mysql包
安装YUM仓库
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
yum工具: yum install -y yum-utils
查看mysql可用版本: yum repolist all | grep mysql
禁用80: yum-config-manager --disable mysql80-community
启用57: yum-config-manager --enable mysql57-community
yum install mysql-community-libs-compat -y
2),YUM安装percona-xtrabackup
yum -y install percona-xtrabackup-24.x86_64
本地RPM:percona-xtrabackup24.rpm.zip
查询安装结果: rpm -ql percona-xtrabackup-24
完全备份
1-1 完全备份流程
innobackupex --user=root --password='密码' /xtrabackup/full
ls /xtrabackup/full/ :查看备份目录。数据库,配置文件,日志文件
ls /xtrabackup/full/2017-08-01_00-00-02/
观看二进制日志位置: cat /xtrabackup/full/2017-08-01_00-00-18/xtrabackup_binlog_info
1-2 完全恢复流程
停止数据库: systemctl stop mysqld
清理环境(模拟损坏): rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log
生成回滚日志: innobackupex --apply-log /xtrabackup/full/2017-08-01_00-00-18/ (指定备份点)
恢复文件: innobackupex --copy-back /xtrabackup/full/2017-08-01_00-00-18/
登陆验证: ls /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'密码'
增量备份
2-1 增量备份流程
准备工作
使用指定的数据库
create database testdb;
use testdb;
create table test(id int);
insert into test values (1);
select * from test;
完整备份:周一
rm -rf /xtrabackup/*
date 09010000 时间建议靠后设置。
innobackupex --user=root --password='QianFeng@123' /xtrabackup
ll /xtrabackup/
增量备份:周二
date 09020000 更新时间
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test values (2)'
[root@localhost ~]# mysql -uroot -p'QianFeng@123' -e 'select * from testdb.test'
innobackupex --user=root --password='QianFeng@123' --incremental /xtrabackup/ -- incremental-basedir=/xtrabackup/2017-09-01_00-00-04 (basedir基于周一的备份。
会生成一个今天的。)
ls /xtrabackup/
增量备份:周三
date 09030000
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test values (3)'
innobackupex --user=root --password='QianFeng@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2017-09-02_00-00-26 (basedir基于周2的备份。
会生成一个今天的。)
ls /xtrabackup/
2-2 增量恢复流程
停止数据库 systemctl stop mysqld
清理环境 rm -rf /var/lib/mysql/*
周一 innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
周二 innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
--incremental-dir=/xtrabackup/2017-09-02_00-00-26
恢复 innobackupex --copy-back /xtrabackup/2017-09-01_00-00-06
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
差异备份
3-1 差异备份流程
rm -rf /xtrabackup/*
1.完整备份 周一
date 10010000
create database testdb;
use testdb;
create table test2(id int);
insert into test2 values(1);
select * from test2;
innobackupex --user=root --password='QianFeng@123' /xtrabackup
ll /xtrabackup/
2.差异备份 周二
date 10020000
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test2 values(2)'
innobackupex --user=root --password='QianFeng@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2017-10-01_00-01-12
差异备份 周三
date 10030000
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test2 values(3)'
innobackupex --user=root --password='QianFeng@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2017-10-01_00-01-12
差异备份 周四
date 10040000
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test2 values(4)'
innobackupex --user=root --password='QianFeng@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2017-10-01_00-01-12
3-2 差异恢复流程
停止数据库 systemctl stop mysqld
清理环境 rm -rf /var/lib/mysql/*
重演回滚redo log(周一,某次差异)--> 恢复数据
innobackupex --apply-log --redo-only /xtrabackup/2017-10-01_00-01-12
innobackupex --apply-log --redo-only /xtrabackup/2017-10-01_00-01-12 --incremental-dir=/xtrabackup/2017-10-04_00-00-29
innobackupex --copy-back /xtrabackup/2017-10-01_00-01-12
修改权限 chown -R mysql.mysql /var/lib/mysql/
启动mysqld systemctl start mysqld