mysqldump+binlog的备份与恢复

数据备份类型

按业务划分:可分为完全备份,增量备份,差异备份。

完全备份:就是对整个数据库的数据和数据结构进行备份,好处是很直观,容易被人理解。不足之处:由于每天都对系统进行完全备份,因此在备份数据中大量是重复的,这些重复数据占用空间,增加成本,备份量大,所需时间长。

增量备份:就是每次备份的数据只是相当于上一次备份后增加和修改过的数据。优点:没有重复的数据,节省空间,缩短备份时间。缺点:发生灾难时,恢复数据麻烦。另外这种备份的可靠性也差,在这种备份下,各备份数据间的关系就像链子一样,一环套一环,其中任何一个备份数据出了问题都会导致整条链子脱节。

差异备份:就是每次备份的数据是相对于上一次全备份之后新增加的和修改过的数据。

数据备份方式:可分为热备,温备,冷备。

热备份:是指在数据库运行中直接备份,对正在运行的数据库没有任何影响。

冷备份:是指在数据库停止的情况下进行的备份,这种备份最为简单,一般只需要拷贝相关的数据库物理文件即可。

温备份:备份同样是在数据库运行时进行,但是会对当前数据库的操作有所影响,例如加一个全局读锁以保证备份数据的一致性。

备份流程图

mysql备份工具介绍

mysqldump:逻辑备份工具,适用于所有存储引擎,可用于温备,能实现完全备份,部分备份,对IonoDB存储引擎支持热备;

cp,tar等文件系统工具:物理备份工具,适用于所有存储引擎,用于冷备,能实现完全备份,部分备份;

lvm2的快照:备几乎热,借助于文件系统工具实现物理备份。

mysqlhotcopy:几乎冷备,仅适用于myisam存储引擎;

mysqldump+binlog实现数据库的备份与恢复

1.准备备份目录

[[email protected] ~]# mkdir  -p  /backup/binlog

2.准备备份的数据库及表

MariaDB [(none)]> create database datas;
Query OK, 1 row affected (0.05 sec)
MariaDB [(none)]> use datas;
Database changed
MariaDB [datas]> create table tb1 (id int,name char(20));
Query OK, 0 rows affected (0.41 sec)
MariaDB [datas]> desc tb1;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  |     | NULL    |       |
| name  | char(20) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
MariaDB [datas]> insert into tb1 values (11,'haha')
    -> ;
Query OK, 1 row affected (0.03 sec)

MariaDB [datas]> select * from tb1;
+------+------+
| id   | name |
+------+------+
|   11 | haha |
+------+------+
1 row in set (0.00 sec)

3.对数据库进行完整备份

[[email protected] ~]# mysqldump --all-databases --lock-all-tables --flush-log --master-data=2 > /backup/`date +%F_%T`-all.sql
--lock-all-tables:锁定所有表
--flush-logs:锁定表之后执行flush logs命令
--master-data={0|1|2}
0:不记录
1:记录change master to语句;此语句未被注释
2:记录为注释语句

4.向表中插入数据

MariaDB [datas]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      245 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

MariaDB [datas]> insert into tb1 values (12,'hehe'),(13,'yaya');
Query OK, 2 rows affected (0.23 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [datas]> select * from tb1;
+------+------+
| id   | name |
+------+------+
|   11 | haha |
|   12 | hehe |
|   13 | yaya |
+------+------+
3 rows in set (0.00 sec)

5.进行增量备份,备份二进制日志

[[email protected] mysql]# mysqlbinlog --start-position=245 --stop-position=451 mysql-bin.000008> /backup/binlog/`date +%F_%T`.sql
[[email protected] mysql]# cd  /backup/binlog/
[[email protected] binlog]# ls
2017-12-03_16:43:29.sql

6.继续插入数据,在没备份的情况下删除数据库,模拟误操作。

MariaDB [datas]> insert into tb1 values (16,'yuyu');
Query OK, 1 row affected (0.00 sec)

MariaDB [datas]> drop database datas;
Query OK, 1 row affected (0.09 sec)

7.恢复数据,由于在最后没有备份就删除了数据库,所以我们首先需要保护最后的二进制日志,查看删除之前的position值。

[[email protected] binlog]# cd  /var/lib/mysql/
[[email protected] mysql]# mysqlbinlog  mysql-bin.000008
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#171203 16:35:29 server id 2  end_log_pos 245     Start: binlog v 4, server v 5.5.52-MariaDB created 171203 16:35:29 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
UbcjWg8CAAAA8QAAAPUAAAABAAQANS41LjUyLU1hcmlhREIAbG9nAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABRtyNaEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAikwNAA==
'/*!*/;
# at 245
#171203 16:36:38 server id 2  end_log_pos 314     Query    thread_id=2    exec_time=0    error_code=0
SET TIMESTAMP=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/*!*/;
/*!\C utf8 *//*!*/;
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
/*!*/;
# at 314
#171203 16:36:38 server id 2  end_log_pos 424     Query    thread_id=2    exec_time=0    error_code=0
use `datas`/*!*/;
SET TIMESTAMP=1512290198/*!*/;
insert into tb1 values (14,'hehe'),(15,'yaya')
/*!*/;
# at 424
#171203 16:36:38 server id 2  end_log_pos 451     Xid = 10
COMMIT/*!*/;
# at 451
#171203 16:54:34 server id 2  end_log_pos 520     Query    thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1512291274/*!*/;
BEGIN
/*!*/;
# at 520
#171203 16:54:34 server id 2  end_log_pos 618     Query    thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1512291274/*!*/;
insert into tb1 values (16,'yuyu')
/*!*/;
# at 618
#171203 16:54:34 server id 2  end_log_pos 645     Xid = 20
COMMIT/*!*/;
# at 645
#171203 16:54:56 server id 2  end_log_pos 728     Query    thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1512291296/*!*/;
drop database datas
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

将最后的二进制日志备份

[[email protected] mysql]# mysqlbinlog --start-position=520 --stop-position=645  mysql-bin.000008> /backup/binlog/`date +%F_%T`.sql

8.导入之前的所有备份

[[email protected] ~]# mysql < /backup/2017-12-03_15\:05\:00-all.sql 
[[email protected] ~]# mysql < /backup/binlog/2017-12-03_16\:43\:29.sql 
[[email protected] ~]# mysql < /backup/binlog/2017-12-03_16\:51\:11.sql
[[email protected] ~]# mysql < /backup/binlog/2017-12-03_17\:10\:02.sql

9.查看数据库及数据

MariaDB [datas]> select * from tb1;
+------+------+
| id   | name |
+------+------+
|   11 | haha |
|   14 | hehe |
|   15 | yaya |
|   12 | hehe |
|   13 | yaya |
|   16 | yuyu |
+------+------+
6 rows in set (0.00 sec)

数据已经全部恢复了。

时间: 2024-10-10 05:57:16

mysqldump+binlog的备份与恢复的相关文章

mysql备份与恢复 mysqldump+binlog xtrabackup

数据备份的方式: 物理备份:拷贝存放库和表文件的目录  cp  tar 逻辑备份:备份创建库和表插入记录时的sql语句 数据备份策略: 完整备份:备份数据库服务器上的所有库.所有表. 差异备份:备份自完整备份后,生成的新数据. 增量备份:备份自上一次备份后,生成的新数据. 完整备份+差异备份 完整备份+增量备份 mysqldump 做完整备份 mysqldump  -hser_ip  -uusername  -ppassword  数据名 > 目录/x.sql 数据库备份文件以.sql结尾 [[

数据库的备份与恢复 mysqldump+binlog方式

实验说明: (1)mysqldump:逻辑备份工具,适用于所有存储引擎,可用于温备,能实现完全备份,部分备份:对InnoDB存储引擎支持热备: binlog:二进制日志 二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间.执行时长.操作的数据等等.所以说通过二进制日志可以查询mysql数据库中进行了哪些变化.一般大小体积上限为1G (2)本次实验使用备份方式:完全备份+增量备份. (3)musqldump命令的语法格式 mysqldump

Mysql1.5(binlog增量备份与恢复,innobackupex)

目录:一,增量备份与恢复 二,mysql主从同步 一增量备份与增量恢复: 1启用Mysql服务的binlog日志文件,实现对数据的实时增量备份 (1)binlog日志介绍 (2)启用binlog日志 (3)手动生成新的binlog日志文件 (4)删除已有的binlog日志文件 (5)使用binlog日志恢复数据 (1)binlog日志介绍: mysql数据库服务日志文件的一种,记录用户连接 数据库服务器之后,执行的除查询之外的sql命令. (2)启用binlog日志: 1,vim  /etc/m

mysqldump全量备份与恢复

mysql用户管理 创建授权用户和密码 ?grant all on . to 'user1' identified by '[email protected]';在mysql中创建连接管理数据库的用户,创建用户可以为这个用户访问指定库分配相应的权限创建用户并授权用户访问某个库,有通过本地访问所有库的权限,并查看该用户再数据库中保存的权限记录 mysql> grant all on *.* to 'user1' identified by '[email protected]'; Query OK

MySQL/MariaDB数据库备份与恢复

前言 数据库一般存放着企业最为重要的数据,它关系到企业业务能否正常运转,数据库服务器总会遇到一些不可抗拒因素,导致数据丢失或损坏,而数据库备份可以帮助我们避免由于各种原因造成的数据丢失或着数据库的其他问题.本文将讲解MySQL/MariaDB数据库的几种备份方法. 基础知识 备份类型 完全备份:备份整个数据库 部分备份:仅备份其中的一张表或多张表 增量备份:仅备份从上次完全备份或增量备份之后变化的数据部分 差异备份:备份上次备份后变化的数据部分,和增量备份区别在于差异备份只可以相对完全备份做备份

数据备份与恢复

一. 数据备份与恢复 1.1 备份数据的方式 物理备份:cp   tar Mysqlhotcopy:只能备份存储引擎是myisam的表 且依赖于perl-DBD-MySQL Yum   -y  install  perl-DBD-MySQL 备份格式: Mysqlhotcopy -uroot  -p123  原库名  新库名; 逻辑备份:用mysql自己提供的命令或第三方软件提供的备份命令, 备份创建库,表和产生表记录时的sql语句. 1.2 数据备份策略 完全/完整备份:备份数据库服务器上的所

mysql数据的备份与恢复 &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;

在科技迅速发展的今天,我们每个人都生活在大数据时代,谁掌握的数据越多,就越能了解消费者的需求,也就更能拥有更好的发展前景,因此数据变得很重要.这时数据的备份就不可缺少了.今天我们就来谈一下mysql数据的备份与恢复. 数据备份按业务划分可分为:完全备份,增量备份,差异备份. 1. 完全备份(Full Backup) 所谓全备份就是对整个数据库的数据和数据结构进行备份.这种备份方式的好处就是很直观,容易被人理解.而且当发生数据丢失的灾难时,只要用灾难之前的备份文件,就可以恢复丢失的数据.然而它也有

MySQL常见备份与恢复方案

MySQL常见备份方案有以下三种: mysqldump + binlog lvm + binlog xtrabackup 本例为方便演示,数据库里面数据为空.下面开始动手 mkdir /opt/backup                                #创建备份目录 mkdir -p /data/3309/{data,binlog}      cd /usr/local/mysql/ scripts/mysql_install_db --user=mysql --datadir

一个简单的binlog恢复测试

日常的数据备份及恢复测试,是DBA工作重中之重的事情,所以要做好备份及测试,日常的备份常见有mysqldump+binlog备份.xtrabackup+binlog备份,无论那一种,几乎都少不了对binlog的备份,说明了binlog在数据恢复中的重要性,下面做个小测试,是工作中不少运维或者新人DBA容易犯的错. 创建一个测试表tb1: <test>([email protected]) [xuanzhi]> show create table tb1\G ***************