浅谈mysql下备份与恢复

前言:

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

                    1,硬件故障

                     2,软件故障

                    3,自然灾害

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

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


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

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

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

                      3,需要恢复哪些数据

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

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

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


关于备份的类型:

                完全备份,部分备份  

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

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

            部分备份又分为以下两种

                        增量备份,差异备份

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

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


浅谈mysql下备份与恢复_第1张图片

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


浅谈mysql下备份与恢复_第2张图片

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


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


浅谈mysql下备份与恢复_第3张图片

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


将解压缩生成的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            |

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

#还原成功。


未完待续

你可能感兴趣的:(浅谈mysql下备份与恢复)