MySQL物理备份

2020-09-25

物理备份

直接备份数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同版本的MySQL

三种备份方式比较

1.完整备份(全量备份)
每次都将所有数据进行完整的备份(不论备份前有没有对数据库修改),备份后会清除文件的存档属性,方便日后增量备份和差异备份进行版本比较。
特点:占用空间大,备份速度慢,但恢复速度快,一次性恢复到位

2.增量备份(与上一次备份比较)
其工作机制就是备份上一次备份后有变化的文件(即添加了存档属性的文件),并把这些存档属性清除。
特点:备份体积小,速度快,但恢复时必须按备份的时间顺序将逐个备份版本进行恢复,因此恢复时间长

3.差异备份(与第一次完整备份比较)
每次都是将第一次完整备份之后所有修改过的文件进行备份,且不用清除文件的存档属性(但第一次完整备份后是需要清除存档属性的)
特点:占用空间比增量备份大,比完整备份小,恢复时只需恢复第一个备份的版本和最后一个版本即可,速度介于完备和增备之间

安装xtrabackup
[root@localhost ~]# wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
[root@localhost ~]# rpm -ivh percona-release-0.1-4.noarch.rpm
[root@localhost ~]# vim /etc/yum.repos.d/percona-release.repo
修改以下两条配置
ff2.png
[root@localhost xtrabackup]# yum -y install percona-xtrabackup-24.x86_64
完整备份+数据恢复
#创建备份目录
[root@localhost ~]# mkdir /xtrabackup
#完整备份的命令
[root@localhost ~]# innobackupex --user=root --password='123' --port=3306 --socket=/usr/local/mysqld/tmp/mysql.sock /xtrabackup        #最后一行出现completed OK!说明成功
#查看备份目录是否产生备份文件
[root@localhost ~]# ls /xtrabackup/2020-09-25_14-33-49/

#数据恢复
1.停止数据库
[root@localhost ~]# systemctl stop mysqld
2.清除旧数据
[root@localhost ~]# rm -rf /var/lib/mysql/*      (yum安装的数据存储目录)
[root@localhost ~]# rm -rf /usr/local/mysqld/data/*   (源码安装的数据存放目录)
[root@localhost ~]# rm -rf /var/log/mysqld.log    #可选操作
[root@localhost ~]# rm -rf /var/log/mysql-slow/slow.log      #可选操作
3.验证恢复
[root@localhost ~]# innobackupex --apply-log /xtrabackup/2020-09-25_14-33-49/     #最后一行出现completed OK!说明成功
4.确认配置文件里关于数据存储目录的设置
[root@localhost ~]# vim /etc/my.cnf
datadir = /usr/local/mysqld/data
5.正式恢复数据
[root@localhost ~]# innobackupex --copy-back /xtrabackup/2020-09-25_14-33-49/
6.修改数据目录的属性
[root@localhost ~]# chown mysql.mysql  /var/lib/mysql/*  -R
7.启动数据库
[root@localhost ~]# systemctl start mysqld
8.登录数据库查看是否有数据
增量备份+数据恢复

假设周一做了全量备份,以下是周二,模拟有新数据的加入并做增量备份

#模拟数加入数据
mysql> create database db2;
mysql> use db2;
mysql> insert into t2 values(1,'dd'),(2,'ss');
#增量备份命令
[root@localhost ~]# innobackupex --user=root --password='123' --port=3306 --socket=/usr/local/mysqld/tmp/mysql.sock --incremental /root/ --incremental-basedir=/root/xbackup/2020-09-25_15-01-05/      #指定备份文件存放的路径(注意增量备份的文件不能和全量备份的文件放在同一目录,否则之后数据回滚会报错),然后指向上一次备份的文件

以下是模拟周三新增的数据和增量备份

mysql> insert into t2 values(3,'kk'),(4,'pp');
[root@localhost ~]# innobackupex --user=root --password='123' --port=3306 --socket=/usr/local/mysqld/tmp/mysql.sock --incremental /root/ --incremental-basedir=/root/xbackup/2020-09-25_16-04-21    #基于前一次备份的文件

恢复数据

1.停止数据库
[root@localhost ~]# systemctl stop mysqld
2.清理数据
(保险起见可以先把数据目录下的文件mv走,以防万一)
[root@localhost ~]# rm -rf /var/lib/mysql/*  (yum装的)
[root@localhost ~]# rm -rf /usr/local/mysqld/data/*   (源码装的)
3.依次回滚(从周一开始)
[root@localhost ~]# innobackupex --apply-log --redo-only /root/xbackup/2020-09-25_15-01-05     #周一的 全备
[root@localhost ~]# innobackupex --apply-log --redo-only /root/xbackup/2020-09-25_15-01-05 --incremental-dir=/root/2020-09-25_16-04-21     #周二的增量
[root@localhost ~]# innobackupex --apply-log --redo-only /root/xbackup/2020-09-25_15-01-05 --incremental-dir=/root/2020-09-25_16-26-04      #周三的增量
4.正式恢复数据
[root@localhost ~]# innobackupex --copy-back /root/xbackup/2020-09-25_15-01-05
5.修改属性
[root@localhost ~]# chown mysql.mysql /usr/local/mysqld/data/* -R
6.启动数据库
[root@localhost ~]# systemctl start mysqld
7.登录数据库查看数据是否恢复
差异备份+数据恢复

延续使用上面的数据,并模拟周四增加数据和做差异备份

#模拟增加数据
mysql> create database db3;
mysql> use db3
mysql> create table t3(id int,sex char(20));
mysql> insert into t3 values(1,'m'),(2,'f'),(3,'m');
#差异备份
[root@localhost ~]# innobackupex --user=root --password='123' --port=3306 --socket=/usr/local/mysqld/tmp/mysql.sock --incremental /root/cy --incremental-basedir=/root/xbackup/2020-09-25_15-01-05      #基于周一的全备,此操作备份了周一到周四期间数据库所有修改过的数据(增删改)

#数据恢复
1.停止数据库
[root@localhost ~]# systemctl stop mysqld
2.清理数据
(保险起见可以先把数据目录下的文件mv走,以防万一)
[root@localhost ~]# rm -rf /var/lib/mysql/*  (yum装的)
[root@localhost ~]# rm -rf /usr/local/mysqld/data/*   (源码装的)
3.重演回滚
[root@localhost ~]# innobackupex --apply-log --redo-only /root/xbackup/2020-09-25_15-01-05/     #回滚全量的
[root@localhost ~]# innobackupex --apply-log --redo-only /root/xbackup/2020-09-25_15-01-05/ --incremental-dir=/root/cy/2020-09-25_17-27-17/      #回滚周四的差异备份
4.正式恢复数据
[root@localhost ~]# innobackupex --copy-back /root/xbackup/2020-09-25_15-01-05/
5.修改属性
[root@localhost ~]# chown mysql.mysql /usr/local/mysqld/data/* -R
6.启动数据库
[root@localhost ~]# systemctl start mysqld
7.登录数据库查看数据完整性
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,082评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,231评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,047评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,977评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,893评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,976评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,605评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,888评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,906评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,732评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,513评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,980评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,027评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,232评论 2 339

推荐阅读更多精彩内容