文章目录
1、数据库备份的分类
2、MySQL 彻底备份
(1)彻底备份特色
(2)mysqldump 备份库
一、针对单个库进行彻底备份
二、针对多个库进行彻底备份
三、对全部库进行彻底备份
(3)恢复数据库操做
一、source 命令
二、使用 mysql 命令
(4)mysqldump 备份表
一、备份表
二、备份表的结构
(5)恢复表的操做
3、MySQL 增量备份
1、数据库备份的分类:
一、从物理与逻辑的角度,备份能够分为:
物理备份:对数据库操做系统的物理文件(数据文件、日志文件等)备份;
逻辑备份:对数据库逻辑组件(如表等数据库对象)备份;
二、从数据库的备份策略角度,备份可分为:
彻底备份:每次对数据进行完整的备份;
差别备份:备份那些自从上次彻底备份以后被修改事后的文件;
增量备份:只有那些在上次彻底备份或者增量备份后被修改的文件才会被备份。
2、MySQL 彻底备份:
彻底备份是对整个数据库的备份、数据库结构和文件结构的备份;
彻底备份保存的是对备份完成时刻的数据库;
彻底备份是加强备份的基础
(1)彻底备份特色:
备份与恢复操做简单方便;
数据存在大量的重复,会致使占用大量的备份空间
备份与恢复时间长
(2)mysqldump 备份库
mysql 数据库的备份能够采起多种方式:
直接打包数据库文件夹;
使用专用的备份工具 ----- mysqldump ;
该命令工具能够将指定的库、表或所有的库导出为 SQL 脚本,在须要恢复时可进行数据恢复。
tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
//直接对整个数据库的数据文件进行打包,备份,并以时间命名压缩包名称
一、针对单个库进行彻底备份:

mysqldump -uroot -p school > /opt/school.sql
将名为school的数据库备份到/opt/目录下,起名为school.sql
二、针对多个库进行彻底备份:

mysqldump -uroot -pabc123 --databases school team > /opt/db_s_t.sql
//对school和team这两个数据库进行备份,起名为db_s_t.sql
三、对全部库进行彻底备份:

mysqldump -uroot -pabc123 --all-databases > /opt/all.sql
//对全部的数据库进行备份
(3)恢复数据库操做
使用 mysqldump 命令导出的 SQL 备份脚本,在进行数据恢复时可以使用两种方法导入:
source 命令
mysql 命令
一、source 命令:
先登陆到 mysql 数据库,再执行 source 备份sql脚本的路径。
mysql> source /opt/school.sql;
//恢复school数据库
二、使用 mysql 命令:

mysql -uroot -pabc123 school < /opt/school.sql
//恢复school数据库
(4)mysqldump 备份表
一、备份表:

mysqldump -uroot -pabc123 school info > /opt/school_info.sql
//对数据库school下的info表进行备份
二、备份表的结构:
mysqldump -uroot -pabc123 -d school info > /opt/school_info.sql
//加-d 选项,就是备份表的结构,不备份表内的信息
(5)恢复表的操做
恢复表时,一样可使用 source 命令 和 mysql 命令 进行,操做与恢复库的操做相同;
须要注意的是:当备份文件中只包含表的备份,而不包括建立库的语句时,必须指定库名,且目标库必须存在。

3、MySQL 增量备份:
增量备份就是备份自上一次备份以后增长或变化的文件或者内容,必须先有彻底备份才能进行增量备份。
使用 mysqldump 进行彻底备份的存在的问题:
备份数据中有重复数据;
备份时间与恢复时间长;
(1)增量备份的特色:
没有重复数据,备分量不大,时间短;
恢复麻烦,须要上次彻底备份及彻底备份以后全部的增量备份才能恢复,并且要对全部增量备份进行逐个反推恢复。
增量备份依赖二进制日志文件,首先须要开启二进制日志文件:
修改 my.cnf文件,添加:log-bin=mysql-bin


mysqladmin -uroot -pabc123 flush-logs
//刷新全部日志

(2)MySQL 数据库增量恢复方法:
一、例如,对数据库进行了如下操做:
insert into info (id,name,score) values (7,'wang',33);
//插入一条信息
delete from info where name='jack';
//删除一条信息;
insert into info (id,name,score) values (10,'qian',44);
//再插入一条信息

二、查看日志文件:
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002
方法一:通常恢复

命令:
mysqlbinlog [--no-defaults] 增量备份文件 | mysql -u 用户名 -p
方法二:基于位置恢复
将某个起始时间的二进制日志导入数据库中,从而跳过某个发生错误的时间实现数据的恢复。
一、恢复数据到指定的位置:

mysqlbinlog --no-defaults --stop-position='293' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
二、从指定的位置开始恢复数据:

mysqlbinlog --no-defaults --start-position='396' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
方法三:基于时间点恢复
使用基于时间点的恢复,可能会出如今一个时间点里既同时存在正确的操做又存在错误的操做,因此咱们须要一种更为精确的恢复方式。
一、从日志开头截止到某个时间点的恢复:

mysqlbinlog --no-defaults --stop-datetime='2020-01-14 17:56:36' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p
二、从某个时间点到日志结尾的恢复:

mysqlbinlog --no-defaults --start-datetime='2020-01-14 17:57:03' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p
三、从某个时间点到某个时间点的恢复:
