基于mysqldump实现数据库的逻辑备份

 基于mysqldump实现数据库的逻辑备份

【备份类型】

根据备份时,数据库服务器是否在线:

冷备份:cold backup,服务器要离线,意味着我们的读写操作都不可以进行了,但是服务器离线比较困难。

温备份:warm backup,全局施加共享锁,只可读,不可写的备份叫温备份

热备份:hot backup,数据库不离线,读写操作都可以进行,通常是基于事务的存储引擎才能够完成的

根据备份时的数据集进行分类:

完全备份:full backup:指备份整个库,当下数据集的整个库的数据

部分备份:partial backup:只备份某张表或某张表的一部份数据,有时备份单张表是有必要的。

根据备份时的接口(直接备份数据文件还是通过mysql服务器导出数据)

物理备份:直接复制(归档)数据文件的备份方式;跨平台能力没有逻辑备份好,physucal backup。大数据集用这个比较好。

逻辑备份:把数据库中提出来保存为文本文件;通常使用的工具是mysqldump,logical backup,对于大容量数据不适用。恢复速度很慢,占据空间很大

【Mysqldump的工作原理】

Mysqldump命 令的工作原理很简单,它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换为一条INSTERT语句。这些 CREATE语句和INSTERT语句都是还原时使用的。还原数据时就可以使用其中的CREATE语句来创建表。使用其中的INSERT语句来还原数据。 它可以实现整个服务器备份,也可以实现单个或部分数据库、单个或部分表、表中的某些行、存储过程、存储函数、触发器的备份;并且能自动记录备份时刻的二进 制日志文件及相应的位置。对于InnoDB存储引擎来讲支持基于单事务模式实现热备,对于MyISAM则最多支持温备。

【mysqldump的使用选项】

-A   --all-database 备份所有的数据,温备使用的选项:

-l   --lock-tables;锁定备份的表

-x   --lock-all-tables :备份单个表使用,这是导致多个时间不一致,

InnoDB专用的选项:

这个选项是是专用在InnoDB的,对于我们的数据是混合的,是没办使用的。

--single-transaction:    单独备份InnoDB方式

-B ,--database db_name1 db_name2 备份指定的数据库

如果不加-B,那么数据恢复时,我们需要自己手动的创建库,但是如果加了-B,就会自动帮助我们创建库。

-C ,--compress:压缩传输

【代码备份的相关选项】

-E
,--events 备份事件调度器:

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

--triggers :备份触发器

--flush-logs ,-F 滚丁日志

--master-data[=#]
:这里面的#可以取值为0,1,2

0:表示备份的时候不记录。

1,表示备份的时候,记录当时的二进制日志的文件位置,但是这个语句是启用的。

2:表示备份的时候,记录当时的二进制日志的位置,但是语句设备注释的,(这是我们的需要的)。

###这个完全备份的时候吧,会把二进制的日志进行到那记下来。

实验环境:Centos6.6

【完全备份】

[[email protected] tmp]# mysqldump -uroot -p --lock-all-table --flush-logs --all-database
--master-data=2 > /tmp/all.1.sql
Enter password:  
###########################查看备份数据滚动的位置#############################
-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000006‘, MASTER_LOG_POS=245;
##这里面显示是备份到了mysql-bin.000006 ,位置是245.
###################删除这个之前的滚动日志:###################################
mysql> show binary logs; #######先查看一下这个是,在复制比较好。
+------------------+--------------------+
|Log_name          | File_size          |
+------------------+-------------- -----+
| mysql-bin.000001 |        1492        |
| mysql-bin.000002 |        7968        |
| mysql-bin.000003 |         288        |
| mysql-bin.000004 |         288        |
| mysql-bin.000005 |      7785          |
| mysql-bin.000006 |       245          | 
mysql> purge binary logs to ‘mysql-bin.000006‘;
Query OK, 0 rows
affected (0.07 sec)
###########################删除完再次查看,只剩下最新得了#############################
mysql> show binary logs;
+------------------+-----------------+
| Log_name         | File_size       |
+------------------+-----------------+
| mysql-bin.000006 |       245       |
+------------------+-----------------+

#########################################查看库中的一个表数据######################################

mysql> use hellodb;                        ####使用这个库
Database changed
mysql> select * from teachers;    ####查找这个表
+-----+---------------+-----+----------------+
| TID | Name          | Age | Gender         |
+-----+---------------+-----+----------------+
|   1 | Song Jiang    |  45 | M              |
|   2 | Zhang Sanfeng |  94 | M              |
|   3 | Miejue Shitai |  77 | F              |
|   4 | Lin Chaoying  |  93 | F              |
+-----+---------------+-----+----------------+
4 rows in set (0.00 sec)
mysql> delete from teachers;      #####删除这个表
Query OK, 4 rows affected (0.06 sec)
mysql> select * from teachers;    ####再次查看为空
Empty set (0.00 sec)

#############################################假设一天过去了########################################

##############################################我们要做增量备份了###################################

################################################滚动日志###########################################

mysql> flush logs;
Query OK, 0 rows
affected (0.06 sec)
mysql> show binary logs;     #####此时已经是差生了新的日志
+------------------+-------------------+
| Log_name         | File_size         |
+------------------+-------------------+
| mysql-bin.000006 |       472         |
| mysql-bin.000007 |       245         |
+------------------+-------------------+

################################################备份日志文件############################################

[[email protected] tmp ]# cd /mydata/  #####这是我二进制文件的初始化文位置
[[email protected] mydata ]# cp mysql-bin.000006 /tmp

########################################假设第二天,我又创建一个表######################################

mysql> create table if not exists teatch(id tinyint unsigned auto_increment unique key,name
varchar(20) not null primary key);
Query OK, 0 rows affected (0.07 sec)

注意:此时我没有备份

[[email protected] mydata ]# cp mysql-bin.000007 /tmp/  ###
把这个二进制拷贝出去,然后销毁二级制文件,因为我们是假设

二进制文件和数据库不是放在同一个地方的。

[[email protected] mydata ]# rm -rf *        ####删除整个数据库
[[email protected] ~ ]# service mysqld stop    
#####停掉服务显然已经没办法停掉了。

[[email protected] ~ ]# killall mysqld     ####kill掉mysqld服务
###########################再次初始化####################################
[[email protected] ]# scripts/mysql_install_db --user=mysql --datadir=/mydata/

[[email protected] bin ]# ./mysql_secure_installation #####再进行一次安全初始化,把密码改成我们原来的。
# service mysqld start

#############################现在我们来还原我们的状态############################

首先,我们要恢复的是我们的最初备份完全备份

mysql> use hellodb;                               
Database changed
mysql> select * from teachers;       ######之前删除的表现在,也恢复了,但是我创建的表teatch表,却没有恢复。下面就需要我们的二进制日志了。
+-----+---------------+-----+----------------+
| TID | Name          | Age | Gender         |
+-----+---------------+-----+----------------+
|   1 | Song Jiang    |  45 | M              |
|   2 | Zhang Sanfeng |  94 | M              |
|   3 | Miejue Shitai |  77 | F              |
|   4 | Lin Chaoying  |  93 |  F             |
+-----+---------------+-----+----------------+
4 rows in set (0.01
sec)

############################恢复第一和第二次日志增量备份##########################

mysql> set sql_log_bin=0;     ######关闭这次二进制日志记录,这次记录没有意义。
Query OK, 0 rows affected (0.00 sec)
[[email protected] tmp ]# mysqlbinlog mysql-bin.000006 > one.sql  ####把二进制文件转化成我们的二进制文件
[[email protected] tmp ]# mysqlbinlog mysql-bin.000007 > two.sql ####把二进制文件转化成我们的二进制文件
[[email protected] tmp ]# mysql -uroot -p < one.sql       ####导入我们的二进制文件
Enter password:
[[email protected]ctor2 tmp ]# mysql -uroot -p < two.sql       ####导入我们的二进制文件
Enter
password:

##############################3再次查看我们的表teatch已经存在了##########

而且我们的那个teachers已经被删除了

注意:在恢复文件时,是没必要记录二进制日志的。

mysql> set sql_log_bin=0;     ######关闭这次二进制日志记录,这次记录没有意义。

mysql> set
sql_log_bin=1;                                    ######重新启用二进制日志。

Query OK, 0 rows
affected (0.00 sec)

至此mysqldump的全备份和增量备份全部实验完毕!!!!!!!!


时间: 2024-12-23 21:55:37

基于mysqldump实现数据库的逻辑备份的相关文章

数据库的逻辑备份

数据库(表)的逻辑备份与恢复 介绍 逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程.逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程. 物理备份即可在数据库open的状态下进行也可在关闭数据库后进行,但是逻辑备份和恢复只能在open的状态下进行. 导出 导出具体的分为:导出表,导出方案,导出数据库三种方式. 导出使用exp命令来完成的,该命令常用的选项有: userid: 用于指定执行导出操作的用户名,口令,连接字符串

(4.12)mysql备份还原——mysql逻辑备份之mysqldump

关键词:mysql逻辑备份介绍,mysqldump 1.mysql逻辑备份介绍 [1.1]备份内容:数据库的结构定义语句+数据内容的插入语句,备份出来的文件可以编辑 [1.2]使用场景:数据量较少的库,比较适合100G数据量以内的 逻辑备份的特点 (1)sql语句组成的文件,可以编辑截取部分单独使用. (2)备份文件比物理文件小 (3)可以细化到表/表的内容 (4)速度慢 (5)可以跨平台恢复/迁移 2.逻辑备份工具 [1.1]mysqldump(单线程).mysqlpump(多线程,5.7以后

说明Oracle数据库逻辑备份和物理备份的方式。

解答:Oracle备份包括逻辑备份和物理备份. 1).逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件. a.输出(Export)输出可以是整个数据库.指定用户或指定表. b.输入(Import)输入将输出建立的二进制转储文件读入并执行其命令. 2).物理备份 物理备份包含拷贝构成数据库的文件而不管其逻辑内容. Oracle支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online backup). a.脱机备份: 脱机备份用在当数据库已正

学会4种备份MySQL数据库(基本备份方面没问题了)

前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要. 那么我们该如何保证数据不丢失.或者丢失后可以快速恢复呢?只要看完这篇, 大家应该就能对MySQL中实现数据备份和恢复能有一定的了解. 为什么需要备份数据? 其实在前言中也大概说明了为什么要备份数据, 但是我们还是应该具体了解一下为什么要备份数据 在生产环境中我们数据库可能会遭遇各

MySQL中基于mysqldump和二进制日志log-bin二进制日志进行逻辑备份以及基于时间点的还原

本文出处:http://www.cnblogs.com/wy123/p/6956464.html 本文仅模拟使用mysqldump和log-bin二进制日志进行简单测试,仅作为个人学习笔记,可能离实际应用还有很大差距,仅参考. 开启MySQL的bin-log二进制日志 模拟还原是需要mysqldump出来的文件和log-bin,因此需要开始log-bin二进制日志. mysql5.7.18在开启二进制日志的时候除了要设置log-bin的位置之外,另外需要设置一个server-id,MySQL之前

mysqldump常用于MySQL数据库逻辑备份

mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的du

mysql二进制日志详解及备份恢复、基于mysqldump及lvmsnapshot做备份恢复详解

二进制日志: 时间点恢复 复制 20140411 回顾: 日志文件:6类 一般查询日志:log, general_log, log_output 慢查询日志: 错误日志 二进制日志 中继日志 事务日志 二进制日志:"修改" position:位置 time: 时间 滚动: 1.大小 2.时间 二进制日志的功用: 即时点恢复: 复制: mysql> SHOW MASTER STATUS; mysql> FLUSH LOGS; mysql> SHOW BINARY LOG

mysqldump xtrabackup 逻辑备份和物理备份

逻辑备份 逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现. 工具:mysqldump 特点: 1.可移植性比较强 2.备份和恢复的花费时间长,不适用于大型业务系统 物理备份 物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单. 工具:xtrabackup 特点: 1.不具备移植性,备份环境和恢复环境必须是完全相同的 2.备份和恢复时间较快,适用于大型业务系统 mysqldump 备份原理:通过协议连接到mysql数据库

MySQL的逻辑备份(mydumper+mysqldump)

虽说MySQL的逻辑备份经常会由于锁表等缺陷遭到诟病, 实际上在停机窗口时间内, 如果数据量不是太高的话, 做逻辑备份还是挺简单的~ 准备工作:1. 目标库(从这个库备份数据)先要有足够权限的账号(临时的root就可以了~用完就删);2. 对应的工具要安装好, 如mydumper;3. 准备好脚本/命令, 不放心就在测试环境演练一下~ 一切准备就绪之后就可以等停机了~ 这里记下备份&恢复用的命令: 备份: nohup mysqldump -h<host> -u<user>