浅谈mysql下备份与恢复

前言:

            为什么要备份:在生产环境中我们可能因为各种各样的情况导致数据丢失,大概分为以下几种

                    1,硬件故障

                     2,软件故障

                    3,自然灾害

                    4,黑客攻击 (占比最大)

                    5,误操作测试等数据丢失场景


所以为了防止数据丢失,我们需要定期备份数据。备份数据的策略要根据不同的应用场景进行定制, 大致有几个参考数值, 我们可以根据这些数值从而定制符合特定环境中的数据备份策略

                     1,能容忍最多丢失多少数据

                      2,恢复数据需要在多长时间内完成

                      3,需要恢复哪些数据

当然数据备份完成后面还需要做测试来验证备份的可用性例举两点为必做

                        1,做还原测试,用于测试备份的可能性

                         2,不定期做还原演练。更具自己当下情况决定。


关于备份的类型:

                完全备份,部分备份  

                1,完全备份:备份整个数据集(即整个数据库)

                 2,部分备份:只备份数据子集,(如部分库或表)

            部分备份又分为以下两种

                        增量备份,差异备份

                增量备份指的是备份自上一次备份以来(增量或完全)以来变化的数据; 特点: 节约空间、还原麻烦 

差异备份指的是备份自上一次完全备份以来变化的数据 特点: 浪费空间、还原比增量备份简单


mysql备份数据的方式

            MYSQL数据库备份类型:

                热备份,温备份,冷备份

                热备份:又称在线备份,读,写均不受影响

                温备份:不可执行写操作,仅可执行读操作

                冷备份:又称离线备份,读,写操作均中止;即服务器需下线。


MySQL中进行不同方式的备份还要考虑存储引擎是否支持

            MYISAM存储引擎

            热备:不支持

            温备:支持

            冷备:支持

            INNODB存储引擎

              热备:支持

               温备:支持

                冷备:支持

我们在考虑完数据在备份时, 数据库的运行状态之后还需要考虑对于MySQL数据库中数据的备份方式

        物理备份:

        逻辑备份:

物理备份一般就是通过tar,cp等命令直接打包复制数据库的数据文件达到备份的效果 ,速度快

逻辑备份:速度慢,丢失浮点数精度:方便使用文本处理工具直接对其处理,可移植能力强。


关于备份时需要考虑的因素

        温备的持锁多久

        备份产生的负载

        备份过程的时长

        恢复过程的时长


    2,我们要备份什么?

                数据,配置文件,二进制日志,事务日志,程序代码(存储过程,存储函数,触发器,事件调度器)。


备份工具:

        这里我们列出三组备份工具

 一,mysql系统自带备份工具:

               mysqldump:逻辑备份工具:适用于所有存储引擎,温备;支持完全或部分备份;对innoDB存储引擎支持热备。

                mysqlhotcopy:名不副其实的一个备份工具,几乎冷备,仅适用于MYISAM存储引擎

二,文件系统工具:

                  cp,tar等复制归档工具:物理备份工具,适用于所有的存储引擎;只支持冷备;完全和部分备份。                        (需考虑服务停机的问题)

                    LVM的快照;先加锁,创建快照,释放锁,然后复制数据,几乎热备。

三:商业工具与开源工具

            mysqlbbackup:商业工具:热备份, MySQL Enterprise Edition组件

            xtrabackup:开源工具::由Percona提供支持对InnoDB做热备(物理备份)的工具,支

持完全备份、增量备份


设计备份方案:

针对不同的场景下, 我们应该制定不同的备份策略对数据库进行备份, 一般情况下, 备份策略一般为以下三种。

           1,直接 cp,tar备份数据库文件

            2,mysqldump+复制binlog:

            3,LVM快照+复制binlog:

            #xtrabackup:


以上的几种解决方案分别针对于不同的场景

1,如果数据量较小, 可以使用第一种方式, 直接复制数据库文件

2,如果数据量还行, 可以使用第二种方式, 先使用mysqldump对数据库进行完全备份, 然后定期备份BINARY LOG达到增量备份的效果

3,如果数据量一般, 而又不过分影响业务运行, 可以使用第三种方式, 使用lvm2的快照对数据文件进行备份, 而后定期备份BINARY LOG达到增量备份的效果

4,如果数据量很大, 而又不过分影响业务运行, 可以使用第四种方式, 使用xtrabackup进行完全备份后, 定期使用xtrabackup进行增量备份或差异备份


实验一:

        使用cp,tar工具进行备份

        实验环境:我们这里使用的是使用yum安装的mysql-5.1的版本, 使用的数据集自制学生表格:

1,查看当前系统数据库:

(root@localhost) [(none)]> show databases ;   查看当前数据库,我们的数据库为hellodb

+--------------------+

| Database          |

+--------------------+

| information_schema |

| hellodb            |

| mysql              |

| performance_schema |

| testdb2            |

+--------------------+


2,[root@centes7 ~]# systemctl stop mariadb           #将服务器设为停机状态。


3,备份数据文件:为了节约空间可以考虑打包。

[root@centes7 ~]#tar Jcvf /data/all.tar.xz /var/lib/mysql/       #将整个数据库文件全部打包至新文件中。

[root@centes7 ~]#ls /data                        #查看备份目录下的文件

all.tar.xz      httpd.log      testdir


4,模拟数据丢失并恢复,

[root@centes7 ~]#rm -rf /var/lib/mysql/*              #删除原有数据库所有文件

[root@centes7 ~]#tar xvf /data/all.tar.xz -C /var/lib/mysql/        #使用tar命令将备份的数据还原至数据库原有文件夹,注:之前删除的只是文件,文件夹还在。


[root@centes7 ~]#ll /var/lib/mysql/                   #查看还原数据是否存在问题。

total 0

drwxr-xr-x 3 root root 17 Jun 12 21:31 var


注:此时我们可以看到还原数据它默认代表的为文件夹。需手动移出来。


[root@centes7 ~]#mv /var/lib/mysql/var/lib/mysql/* /var/lib/mysql/        #将还原出来的文件夹全部移动至mysql数据文件夹中。


检查还原过后的数据权限,属性是否一致。


将解压缩生成的var文件删除。

[root@centes7 ~]#systemctl start mariadb            重新启动服务。


重新连接数据库进行查看

(root@localhost) [(none)]> show databases ;           #数据库已恢复

+--------------------+

| Database          |

+--------------------+

| information_schema |

| hellodb            |

| mysql              |

| performance_schema |

| testdb2            |

+--------------------+

#还原完成。


实验二:

            使用mysqldump+复制BINARY LOG备份

mysqldump命令简介:

                        mysqldump是一个客户端的逻辑备份工具, 可以生成一个重现创建原始数据库和表的SQL语句, 可以支持所有的存储引擎, 对于InnoDB支持热备

                官方文档介绍

mysqldump命令常用选项:

-A, --all-databases 备份所有数据库,含create database

-B , --databases db_name…  指定备份的数据库,包括create database语句

-E, --events: 备份事件调度器

-R, --routines:备份存储过程和存储函数

--triggers:备份表相关触发器,默认启用,用--skip-triggers,不备份触发器

--master-data[=#]: 此选项须启用二进制日志

 -F, --flush-logs :备份前滚动日志,

                锁定表完成后执行日志滚动


使用mysqldump备份数据库:

[root@centes7 ~]#mysqldump -uroot -pmagedu -A > /backup/all.sql

        备份所有数据库文件。

[root@centes7 ~]#systemctl stop mariadb         #停服务


模拟数据库被误删除:

    [root@centes7 ~]#rm -rf /var/lib/mysql/*        #将数据中所有文件全部删除。


[root@centes7 ~]#systemctl start mariadb         #启动服务。此时数据库为空


[root@centes7 ~]#mysql < /backup/all.sql         #利用备份的数据进行还原。


(root@localhost) [(none)]> show databases ; #查询数据库中文件是否存在

+--------------------+

| Database          |

+--------------------+

| information_schema |

| hellodb            |

| mysql              |

| performance_schema |

| test              |

| testdb2            |

+--------------------+

#还原成功。


未完待续

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容