MySQL备份与恢复

女爷i 2022-01-16 20:19 472阅读 0赞

1、备份的类型
冷备份:关闭数据、停止业务
温备份:加锁备份
热备份:在线备份,不会影响到也正常运行

2、备份方式
逻辑备份:基于SQL语句的备份
(1)mysqldump建库、建表、数据插入
(2)基于二进制日志:数据库的所有变化类的操作
(3)基于复制的备份:将二进制日志实时传送到另一台机器并且恢复
物理备份
(1)xtrabackup进行物理备份
(2)拷贝数据文件(冷备)

3、备份工具

  1. 1mysqldumpmysql原生自带很好用的逻辑备份工具
  2. 2mysqlbinlog,实现binlog备份的原生态命令
  3. 3xtrabackupprecona公司开发的性能很高的物理备份工具

mysqldump备份工具使用

优点:逻辑备份工具,都是SQL语句,都是文本格式,便于查看和编辑,更便于压缩
缺点:备份效率较慢

mysqldump常用参数:

-u -p -h -S -P
(1)全库备份
-A,
例子:
mysqldump -uroot -p123 -A >/backup/full.sql

(2)单库备份

例子:

  1. mysqldump -uroot -p123 -B lufei >/backup/lufei.sql
  2. mysqldump -uroot -p123 lufei >/backup/lufei1.sql
  3. -B,增加建库(create)及“use库”的语句,在将来恢复时,不需要手工进行建库和use
  4. 不加-B,需要恢复时,先创建库,use库下再进行恢复
  5. 另外,-B选项还可以实现,同时备份多个库,备份到同一个文件中
  6. mysqldump -uroot -p123 -B lufei oldboy>/backup/lufei_oldboy.sql
  7. 以下例子,如果不加-B,去备份,他的功能是备份路飞数据库下的oldboy
  8. mysqldump -uroot -p123 lufei oldboy>/backup/lufei_oldboy.sql
  9. mysqldump 1 1 2 3 >库1.sql

生产环境下,也要加的额外参数:
-R, 备份存储过程和函数数据
--triggers, 备份触发器数据

mysqldump -uroot -p123 -A -R --triggers >/backup/full.sql

-F, —flush-logs 刷新binlog日志,为了方便将来二进制日志截取时的起点

mysqldump -uroot -p123 -A -F >/backup/full.sql

--master-data={1|2} 告诉你备份时刻的binlog位置,一般我们选择使用2,以注释的方式记录二进制日志位置

锁表:适合所有引擎(myisam,innodb)
-x, —lock-all-tables
-l, —lock-tables

--single-transaction 对innodb引擎进行热备
通过快照的方式实现热备

压缩备份:

mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction |gzip >/backup/all_$(date +%F).sql.gz

mysqldump备份的恢复
使用source命令进行恢复:
mysql>set sql_log_bin=0;
mysql> source /opt/xxx.sql;

背景环境:
正在运行的网站系统,mysql数据库,数据量25G,日业务增量10-15M。
备份方式:
每天23:00点,计划任务调用mysqldump执行全备脚本
故障时间点:
上午10点,误删除了一个表
如何恢复?

思路:
1、断开业务,防止对数据库二次伤害,挂出维护页面
2、搭建备用库,恢复全备
3、截取昨天晚上23:00之后到上午10点误删除操作之前的二进制日志
4、恢复到备用库,验证数据可用性和完整性
5、两种方案恢复前端应用
a.备用库导出误删除的表,导入到生产库,开启业务
b. 直接将应用切割到备用库,替代生产库,开启业务

模拟故障并恢复:

1、原始数据:

  1. mysql> create database oldboy;
  2. mysql> use oldboy
  3. mysql> create table t1 (id int,name varchar(20));
  4. mysql> insert into t1 values (1,'zhang3');
  5. mysql> insert into t1 values (2,'li4');
  6. mysql> insert into t1 values (3,'wang5');
  7. mysql> commit;

2、模拟前一天晚上23:00全备
mysqldump -A -R --triggers --master-data=2 --single-transaction |gzip >/backup/all_$(date +%F).sql.gz

3、模拟白天(23:00-10:00)业务对数据的修改

  1. mysql> insert into t1 values (4,'zhang33');
  2. mysql> insert into t1 values (5,'li44');
  3. mysql> insert into t1 values (6'wang54');
  4. mysql> commit;

4、模拟故障
drop table t1;

5、恢复
(1)准备全备,并获取到备份文件中的binlog的截取起点

  1. gunzip all_2018-04-04.sql.gz
  2. -- CHANGE MASTER TO MASTER_LOG_FILE='my-bin.000004', MASTER_LOG_POS=731;

(2)截取二进制日志

  1. mysqlbinlog --start-position=731 --stop-position=1126 /data/binlog/my-bin.000004 >/backup/binlog.sql
  2. show binlog events in 'my-bin.000004'; ----》drop之前的position1126

(3)恢复全备+binlog

  1. set sql_log_Bin=0;
  2. source /backup/all_2018-04-04.sql;
  3. source /backup/binlog.sql

Xtrabackup物理备份工具

percona公司的备份工具,性能比较高。物理备份工具。
特点:
物理备份工具,在同级数据量基础上,都要比逻辑备份性能要好的多。
特别是在数据量比较大的时候,体现的更加明显。
备份方式:
1、拷贝数据文件
2、拷贝数据页
备份原理(innodb):
1、对于innodb表,可以实现热备
(1)在数据还有修改操作的时刻,直接将数据文件中的数据页备份
此时,备份走的数据对于当前mysql来讲是不一致。
(2) 将备份过程中的redo和undo一并备走。
(3)为了恢复的时候,只要保证备份出来的数据页LSN能和redo LSN匹配,
将来恢复的就是一致的数据。redo应用和undo的应用。
2、对与myisam表,实现自动锁表拷贝文件。

Xtrabackup软件安装:

1、安装

  1. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  2. yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
  3. wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
  4. yum -y install percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm

2、全备备份并恢复
mkdir /server/backup -p

--user=
--password=
--socket=
--no-timestamp

全备例子:

  1. innobackupex /server/backup/
  2. innobackupex --no-timestamp /server/backup/full

全备恢复例子:

1、恢复数据前的准备(合并xtabackup_log_file和备份的物理文件)
innobackupex --apply-log --use-memory=32M /server/backup/full/

2、模拟故障

  1. 停库:
  2. pkill mysqld
  3. 破坏数据:
  4. cd /application/mysql/data
  5. \rm -rf *

3、恢复

  1. cp -a /server/backup/full/* /application/mysql/data
  2. 或者
  3. innobackupex --copy-back /server/backup/full/
  4. 注意:恢复时,要确认数据路径是空的,并且数据库是停掉的
  5. chown -R mysql.mysql /application/mysql/data
  6. 启动:
  7. /etc/init.d/mysqld start
  8. mysql -e "select * from oldboy.t1"

xtrabackup 实现增量备份及故障恢复

周日全备,周一到周六做增量

  1. 1、周日全备:
  2. mkdir /backup/full
  3. innobackupex --user=root --password=123 --no-timestamp /backup/full/
  4. 2、模拟数据变化(周一数据变化)
  5. 3、第一增量(周一晚上增量):
  6. innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/full/ /backup/inc1
  7. 4、模拟数据变化(周二数据变化)
  8. 5、第二次增量(周二晚上增量):
  9. innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/inc1 /backup/inc2
  10. 6、模拟数据损坏

n多的操作。。。。。
周三上午10:00时刻,删除t1表

7、恢复数据:

  1. innobackupex --apply-log --redo-only /backup/full
  2. innobackupex --apply-log --redo-only --incremental-dir=/backup/inc1 /backup/full
  3. innobackupex --apply-log --incremental-dir=/backup/inc2 /backup/full
  4. innobackupex --apply-log /backup/full

作业:生产恢复案例:

背景:
1、xtrabackup备份策略每周日,full全备
2、xtrabackup周一到周六,inc1-inic6
3、总数据量200G
4、周三上午10点误删除表t1,数据量1G左右
5、周二晚上inc2备份完成之后到周三上午10点又做了很多操作

如何将数据库恢复到t1表误删除之前状态?

思路:
1、停业务,挂维护页
2、找备用库
3、合并full+inc1+inc2
4、截取周二晚上inc2备份后到周三上午10点,t1表删除之前的binlog日志
5、将合并后的full+截取的binlog恢复到备用库
6、验证数据可用性和完整性
7、使用备用库替代生产库使用或者将t1表导出并导入回生产库
8、业务恢复

思考:以上恢复策略是否可以优化?
为了恢复1G表,需要将整个全备恢复,有必要吗?有什么好的解决办法?

  1. drop table t1;
  2. create table t1 (id int,name varchar(20));
  3. alter table t1 discard tablespace;
  4. cd /application/mysql/data/oldboy
  5. cp /backup/full/oldboy/t1.ibd ./
  6. chown -R mysql.mysql *
  7. alter table t1 import tablespace;

转载于:https://blog.51cto.com/12083623/2359747

发表评论

表情:
评论列表 (有 0 条评论,472人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql备份恢复

    份与恢复 根据备份的方法不同可以将备份分为: Hot Backup:热备,数据库运行中直接备份,对正在运行的数据库操作没有任何影响。 Cold Backup:...

    相关 mysql备份恢复

    mysql数据库备份与恢复 一、为什么要备份 灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作测试等数据丢失场景 备份注意要点

    相关 mysql 备份恢复

    系统运行中,增量备份与整体备份 例:每周日备份一次,周一到周六备份当天 如果周五出了问题,可以用周日的整体+周一,二,三,四来恢复 备份工具: 有第

    相关 MySQL备份恢复

    1、备份的类型 冷备份:关闭数据、停止业务 温备份:加锁备份 热备份:在线备份,不会影响到也正常运行 2、备份方式 逻辑备份:基于SQL语句的备份 (1)

    相关 mysql备份恢复

    备份的重要性: 灾难恢复,测试应用,回滚数据修改,查询历史数据,审计等 造成数据丢失的原因有以下几种:程序错误,人为操作错误,运算错误,磁盘故障,灾难和盗窃 数据库的备