MySQL备份与恢复




一:备份的类型vue

    1.1按数据库服务器的状态mysql

    1.2按备份文件的类型sql

    1.3备份数据库的内容数据库



二:备份策略bash

    2.1备份应该备份什么?服务器

    2.2物理备份仍是逻辑备份?ide

    2.3备份策略函数




三:MySQL备份工具工具

    3.1 mysqldumpspa

    3.2 mysqlhotcopy

    3.3 ibackup

    3.4 xtrabackup




1.1按数据库服务器的状态

    热备份:在线备份,读写操做不受影响

    温备份:能读不能写,仅能执行读操做

    冷备份:离线备份,读写操做都不能进行




1.2按备份文件的类型

    物理备份:直接备份数据文件

    逻辑备份:将数据导出到文本文件中



1.3备份数据库的内容

    彻底备份:备份所有数据,多是某个库的所有数据,也多是全部库的所有数据

    增量备份:仅备份上次彻底备份或增量备份之后变化的数据

    差别备份:仅备份上次彻底备份之后变化的数据



2.1备份应该备份什么?

    数据、配置文件、二进制日志、事务日志




2.2物理备份仍是逻辑备份?

    物理备份:速度快

    逻辑备份:速度慢、丢失浮点数精度、能够方便使用文本处理工具直接对其处理、可移植能力好、跨MySQL服务器版本



2.3备份策略

    根据数据量的大小,能够作不一样的选择,例如:一周一次彻底,一天一次增量或差别或者一个月一次彻底备份,一天一次增量或者差别备份

    彻底+增量      

    彻底+差别



3.1mysqldump逻辑备份工具、MyISAM(温备份)InnoDB(热备份)

3.1.1备份单个数据库或库中的特定表

    db_name[tb1][tb2]备份指定数据库,不包括建立数据库的命令,因此恢复的时候必须手动的建立数据库

mysqldump -uroot -p mydb > /root/mydb.sql

wKioL1VkfWqjzsKLAACievyamzU103.jpg

wKiom1Vke9qg9GztAAFbZW6mxsU043.jpg

注意:以上的方式是在MySQL服务器运行期间执行的备份,若是在备份的过程当中有数据插入,会致使数据的不一致。因此在备份的时候必定要锁表


wKioL1VkfZijWMDIAACC9p7X_kc291.jpg

wKiom1VkfAjDkuBMAABjEDsCMD8163.jpg

wKioL1VkfZixwilPAABM8f77cmc006.jpg

wKiom1VkfAjj_03JAABhkPSSgY0911.jpg

wKioL1VkfZiDmI6_AABY8Ety-sE242.jpg

wKiom1VkfAmjWa5VAADmc56lbmM645.jpg

注意:最后一条数据没有在备份文件中,因此如要要拿刚才的备份文件去恢复,是不可以恢复到服务器出事故以前的状态的,可是能够去二进制日志文件中查找读出来,可是到二进制日志文件中查找的时候,怎么知道刚才插入数据的时间点呢?还原的时候应该是彻底备份+彻底备份之后的事件进行恢复,可是怎么知道二进制日志文件当中刚才从哪一个事件开始的?或者说哪一个位置?哪一个时间点?并且每次还得手动记录存放于哪一个二进制日志文件中。



3.1.2 --master-date={0|1|2}

    0表示不记录二进制日志文件及其事件位置

    1表示以CHANGE MASTER TO 的方式记录二进制日志文件位置,可用于恢复后直接启动服务器

    2表示以CHANGE MASTER TO的方式记录二进制日志文件位置,可是默认被注释掉了

wKioL1VkfmHTzAh5AABcHeVPFaQ421.jpg

wKiom1VkfNKjJA2tAABOsn4_2co964.jpg

wKiom1VkfNLAehUMAABnMF24vps828.jpg

wKioL1VkfmLhWH3IAABXecN98Rs520.jpg

wKioL1Vkfm-BLLbnAACNh-4G0kg894.jpg

wKiom1VkfOCSTZH1AAD_zNVUdOg003.jpg

wKioL1Vkfm-x5BYxAAFwPDaLvO0408.jpg




3.1.3--lock-all-tables:锁定全部表

 

3.1.4--flush-logs:执行日志滚动      

 

3.1.5若是指定库中的表类型都为InnoDB,可以使用--single-transaction启动热备,使用它的时候就不须要在使用--lock-all-tables选项了,它会自动释加锁

 

3.1.6备份多个库

    --all-databases备份全部库

    --databases DB_NAME1,DB_NAME2...备份指定库

注:这两个选项都会自动建立CREATEDATABASE命令,因此还原的时候就不用在手动指定库了

wKioL1Vkfq6xuj8PAABJhZlM8dc261.jpg



3.1.7其它选项

    --event:备份数据库的事件调度器

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

    --triggers:备份触发器

 

3.1.8执行备份与还原

    备份策略:周彻底+日增量

    彻底备份:mysql>mysqldump

    增量备份:备份二进制日志文件(flush logs



模拟彻底备份,而后天天备份增量

1.假如如今是第一次执行mydb数据库的彻底备份

wKiom1VkfWyBqtAZAACxHfwGrqo672.jpg

wKioL1VkfvzDvue7AABJgzbaGPo326.jpg



2.执行完彻底备份之后,进入数据库作一些操做,模拟这些操做是在次日用户作的

wKiom1VkfY6DxX0CAACxWywQiRI296.jpg



3.而后模拟执行次日的增量备份

wKiom1Vkfdfja97nAABTA1W3sYM510.jpg


4.mysql-bin.000019是第一天的增量

wKioL1Vkf5uB-yAMAADNfoB2vVw952.jpg

wKiom1VkfgzT4vOjAABeQZNle3U018.jpg

wKioL1Vkf5vgdUNrAAA6B5-go-s480.jpg


5.模拟到了次日了,增长了一些信息

wKiom1VkfizDgLTIAACcDt7VoM0644.jpg


6.假如一不当心把整个数据库给删了,假如二进制日志文件和数据没放到同一目录下

wKioL1Vkf9egfMTOAABbwJ96QRk625.jpg



7.关闭mysql服务,初始化数据库,启动mysql服务

wKioL1VkgArxPog9AACFRwQyeJ0285.jpg

wKiom1VkfnuB2SMoAAC4-_h7oyk582.jpg

wKioL1VkgAuxEw0kAACq-2DiBrk537.jpg



8.开始使用备份文件进行数据库恢复

wKiom1VkfsXhesMaAABgtibKbTE880.jpg

wKioL1VkgFXz3_zbAADNg2y7piE747.jpg

wKiom1VkfsXxJp4SAACYkYXCTfk006.jpg

wKioL1VkgFXwIhVkAABmLEolhYQ193.jpg

wKiom1VkfsXgebzYAACJtC47TVY448.jpg



注意:此时尚未恢复到数据库出事故前一刻的状态,须要执行数据库出事故前一刻的二进制日志文件进行最终的恢复

wKioL1VkgH-ihqzHAABhS9t8i_Q516.jpg



mysqldump -uroot -p --master-data=2 --flush-logs --all-databases --single-transaction --events --ignore-table=mysql.evnets > /root/full_database.sql
相关文章
相关标签/搜索