12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-12-25 09:55:56
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
数据备份类型按业务划分:可分为完全备份,增量备份,差异备份。完全备份:就是对整个数据库的数据和数据结构进行备份,好处是很直观,容易被人理解。不足之处:由于每天都对系统进行完全
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
数据备份类型
按业务划分:可分为完全备份,增量备份,差异备份。
完全备份:就是对整个数据库的数据和数据结构进行备份,好处是很直观,容易被人理解。不足之处:由于每天都对系统进行完全备份,因此在备份数据中大量是重复的,这些重复数据占用空间,增加成本,备份量大,所需时间长。
增量备份:就是每次备份的数据只是相当于上一次备份后增加和修改过的数据。优点:没有重复的数据,节省空间,缩短备份时间。缺点:发生灾难时,恢复数据麻烦。另外这种备份的可靠性也差,在这种备份下,各备份数据间的关系就像链子一样,一环套一环,其中任何一个备份数据出了问题都会导致整条链子脱节。
差异备份:就是每次备份的数据是相对于上一次全备份之后新增加的和修改过的数据。
数据备份方式:可分为热备,温备,冷备。
热备份:是指在数据库运行中直接备份,对正在运行的数据库没有任何影响。
冷备份:是指在数据库停止的情况下进行的备份,这种备份最为简单,一般只需要拷贝相关的数据库物理文件即可。
温备份:备份同样是在数据库运行时进行,但是会对当前数据库的操作有所影响,例如加一个全局读锁以保证备份数据的一致性。
备份流程图
mysql备份工具介绍
mysqldump:逻辑备份工具,适用于所有存储引擎,可用于温备,能实现完全备份,部分备份,对IonoDB存储引擎支持热备;
cp,tar等文件系统工具:物理备份工具,适用于所有存储引擎,用于冷备,能实现完全备份,部分备份;
lvm2的快照:备几乎热,借助于文件系统工具实现物理备份。
mysqlhotcopy:几乎冷备,仅适用于myisam存储引擎;
mysqldump+binlog实现数据库的备份与恢复
1.准备备份目录
[root@centos7~]#mkdir-p/backup/binlog
2.准备备份的数据库及表
MariaDB[(none)]>createdatabasedatas;QueryOK,1rowaffected(0.05sec)MariaDB[(none)]>usedatas;DatabasechangedMariaDB[datas]>createtabletb1(idint,namechar(20));QueryOK,0rowsaffected(0.41sec)MariaDB[datas]>desctb1;+-------+----------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+----------+------+-----+---------+-------+|id|int(11)|YES||NULL|||name|char(20)|YES||NULL||+-------+----------+------+-----+---------+-------+MariaDB[datas]>insertintotb1values(11,'haha')->;QueryOK,1rowaffected(0.03sec)MariaDB[datas]>select*fromtb1;+------+------+|id|name|+------+------+|11|haha|+------+------+1rowinset(0.00sec)
3.对数据库进行完整备份
[root@centos7~]#mysqldump--all-databases--lock-all-tables--flush-log--master-data=2>/backup/`date+%F_%T`-all.sql--lock-all-tables:锁定所有表--flush-logs:锁定表之后执行flushlogs命令--master-data={0|1|2}0:不记录1:记录changemasterto语句;此语句未被注释2:记录为注释语句
4.向表中插入数据
MariaDB[datas]>showmasterstatus;+------------------+----------+--------------+------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|+------------------+----------+--------------+------------------+|mysql-bin.000007|245|||+------------------+----------+--------------+------------------+1rowinset(0.00sec)MariaDB[datas]>insertintotb1values(12,'hehe'),(13,'yaya');QueryOK,2rowsaffected(0.23sec)Records:2Duplicates:0Warnings:0MariaDB[datas]>select*fromtb1;+------+------+|id|name|+------+------+|11|haha||12|hehe||13|yaya|+------+------+3rowsinset(0.00sec)
5.进行增量备份,备份二进制日志
[root@centos7mysql]#mysqlbinlog--start-position=245--stop-position=451mysql-bin.000008>/backup/binlog/`date+%F_%T`.sql[root@centos7mysql]#cd/backup/binlog/[root@centos7binlog]#ls2017-12-03_16:43:29.sql
6.继续插入数据,在没备份的情况下删除数据库,模拟误操作。
MariaDB[datas]>insertintotb1values(16,'yuyu');QueryOK,1rowaffected(0.00sec)MariaDB[datas]>dropdatabasedatas;QueryOK,1rowaffected(0.09sec)
7.恢复数据,由于在最后没有备份就删除了数据库,所以我们首先需要保护最后的二进制日志,查看删除之前的position值。
[root@centos7binlog]#cd/var/lib/mysql/[root@centos7mysql]#mysqlbinlogmysql-bin.000008/*!50530SET@@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!40019SET@@session.max_insert_delayed_threads=0*/;/*!50003SET@OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER/*!*/;#at4#17120316:35:29serverid2end_log_pos245Start:binlogv4,serverv5.5.52-MariaDBcreated17120316:35:29atstartup#Warning:thisbinlogiseitherinuseorwasnotclosedproperly.ROLLBACK/*!*/;BINLOG'UbcjWg8CAAAA8QAAAPUAAAABAAQANS41LjUyLU1hcmlhREIAbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRtyNaEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAikwNAA=='/*!*/;#at245#17120316:36:38serverid2end_log_pos314Querythread_id=2exec_time=0error_code=0SETTIMESTAMP=1512290198/*!*/;SET@@session.pseudo_thread_id=2/*!*/;SET@@session.foreign_key_checks=1,@@session.sql_auto_is_null=0,@@session.unique_checks=1,@@session.autocommit=1/*!*/;SET@@session.sql_mode=0/*!*/;SET@@session.auto_increment_increment=1,@@session.auto_increment_offset=1/*!*/;/*!\Cutf8*//*!*/;SET@@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;SET@@session.lc_time_names=0/*!*/;SET@@session.collation_database=DEFAULT/*!*/;BEGIN/*!*/;#at314#17120316:36:38serverid2end_log_pos424Querythread_id=2exec_time=0error_code=0use`datas`/*!*/;SETTIMESTAMP=1512290198/*!*/;insertintotb1values(14,'hehe'),(15,'yaya')/*!*/;#at424#17120316:36:38serverid2end_log_pos451Xid=10COMMIT/*!*/;#at451#17120316:54:34serverid2end_log_pos520Querythread_id=3exec_time=0error_code=0SETTIMESTAMP=1512291274/*!*/;BEGIN/*!*/;#at520#17120316:54:34serverid2end_log_pos618Querythread_id=3exec_time=0error_code=0SETTIMESTAMP=1512291274/*!*/;insertintotb1values(16,'yuyu')/*!*/;#at618#17120316:54:34serverid2end_log_pos645Xid=20COMMIT/*!*/;#at645#17120316:54:56serverid2end_log_pos728Querythread_id=3exec_time=0error_code=0SETTIMESTAMP=1512291296/*!*/;dropdatabasedatas/*!*/;DELIMITER;#EndoflogfileROLLBACK/*addedbymysqlbinlog*/;/*!50003SETCOMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530SET@@SESSION.PSEUDO_SLAVE_MODE=0*/;
将最后的二进制日志备份
[root@centos7mysql]#mysqlbinlog--start-position=520--stop-position=645mysql-bin.000008>/backup/binlog/`date+%F_%T`.sql
8.导入之前的所有备份
[root@centos7~]#mysql</backup/2017-12-03_15\:05\:00-all.sql[root@centos7~]#mysql</backup/binlog/2017-12-03_16\:43\:29.sql[root@centos7~]#mysql</backup/binlog/2017-12-03_16\:51\:11.sql[root@centos7~]#mysql</backup/binlog/2017-12-03_17\:10\:02.sql
9.查看数据库及数据
MariaDB[datas]>select*fromtb1;+------+------+|id|name|+------+------+|11|haha||14|hehe||15|yaya||12|hehe||13|yaya||16|yuyu|+------+------+6rowsinset(0.00sec)
数据已经全部恢复了。
xtrabackup的数据库备份与恢复
xtrabackup是由percona提供的mysql数据库备份工具,是一款开源能够对innodb和xtradb数据库进行热备的工具。
特点:
(1)备份过程快速,可靠。
(2)备份过程不会打断正在执行的事务
(3)能够基于压缩等功能节约磁盘空间和流量
(4)自动实现备份检验
(5)还原速度快
安装
[root@centos7~]#yuminstallxtrabackup
完全备份
[root@centos7backup]#innobackupex--user=root/backup/
如果想要给备份的用户设置权限,可以创建最小权限的备份用户
MariaDB[(none)]>grantreload,locktables,replicationclienton*.*to'backuser'@'localhost'identifiedby'123456';QueryOK,0rowsaffected(0.07sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.04sec)
增量备份
每个InnoDB的页面都会包含一个存储信息,每当相关的数据发生改变,相关的页面的存储就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。
innobackupex命令会在备份目录中创建一个新的以时间命名的目录以存放所有的增量备份数据,另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。
注:增量备份仅能应用于InniDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。
添加数据
MariaDB[datas]>insertintotb1values(17,'laoshi');QueryOK,1rowaffected(0.00sec)MariaDB[datas]>insertintotb1values(18,'jiangchen');QueryOK,1rowaffected(0.00sec)MariaDB[datas]>select*fromtb1;+------+-----------+|id|name|+------+-----------+|11|haha||14|hehe||15|yaya||12|hehe||13|yaya||16|yuyu||17|laoshi||18|jiangchen|+------+-----------+8rowsinset(0.00sec)
增量备份
[root@centos72017-12-03_18-08-41]#innobackupex--user=root--incremental/backup--incremental-basedir=/backup/2017-12-03_18-08-41[root@centos7backup]#ls2017-12-03_18-08-412017-12-03_18-36-10
数据恢复准备
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后
,所有的备份数据将合并到完全备份上。
(2)基于所有的备份将未提交的事务进行“回滚”。
数据恢复准备:执行操作
[root@centos7backup]#innobackupex--apply-log--redo-only/backup/2017-12-03_18-08-41/
接着执行增量
[root@centos7backup]#innobackupex--apply-log--redo-only/backup/2017-12-03_18-08-41/--inctrmental-dir=/backup/2017-12-03_18-36-10/backup/2017-12-03_18-08-41/(完全备份的目录)/backup/2017-12-03_18-36-10(第一次增量所在的目录)
恢复阶段,还原数据
[root@centos7mysql]#innobackupex--copy-back/backup/2017-12-03_18-08-41/[root@centos7mysql]#chown-Rmysql.mysql/var/lib/mysql[root@centos7mysql]#systemctlrestartmariadb
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19