mysql完全备份 二进制日志,MySQL二进制日志备份和恢复详解

原文链接:http://www.showerlee.com/archives/681

****经实践,该教程ok,特在此分享****

基本概念

定义:

二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。

作用:

1.二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二进制日志包含备份后进行的所有更新。

2.二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。

不良影响:

运行服务器时若启用二进制日志则性能大约慢1%。

MySQL默认二进制日志是关闭状态,先手动改动配置文件打开二进制日志

在my.cnf(windows下是my.ini)中的mysqld下 添加

log-bin=mysql-bin

binlog_format=mixed   //这行是来描述模式的,这两行直接复制到mysqld下即可

重启服务后便可以看到新增的日志文件了

日志位置

>>如果没有指定文件名,则Mysql使用hostname-bin文件.

>>如果指定了相对路径,则假定该路径相对于数据目录

>>Mysql在文件名后添加了数字索引.所以该文件最后的形式为filename.number如果你在日志名中提供了扩展名(例如,–log

bin=file_name.extension),则扩展名被悄悄除掉并忽略。

更换策略:

使用索引来循环文件,在以下条件将循环至下一个索引

1.服务器重启

2.服务器被更新

3.日志到达了最大日志长度 max_binlog_size

4.日志被刷新 mysql> flush logs;

工具介绍:

shell>>mysqlbinlog [option] binlogFile> newfile

如: D:\mysql\log>mysqlbinlog binlog.000001 > 1.txt

一个例子:

log-bin=”D:/mysql/log/binlog” 那么,在该文件夹下就会有文件D:/mysql/log/binlog.000001等

常见问题

1.如何清除binlog

>>>使用下面的两个命令

PURGE {MASTER | BINARY} LOGS TO ‘log_name' //log_name不会被清除

PURGE {MASTER | BINARY} LOGS BEFORE ‘date' //date不会被清除

实例如下:

mysql> purge master logs to ‘binlog.000004′;

Query OK, 0 rows affected (0.01 sec)

mysql> purge master logs before '2009-09-22 00:00:00′;

Query OK, 0 rows affected (0.05 sec)

>>>或使用命令

RESET MASTER

删除之前所有的binlog,并重新生成新的binlog

后缀从000001开始

注:如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,

则本语句不会起作用,而是会失败,并伴随一个错误。

不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。

当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

2.记录到二进制日志知的内容配置

binlog-do-db=sales 只记录sales库

binlog-ignore-db=sales 除sales库不记录,其他都记录

但是如果在操作数据库之前,不使用use $dbname 那么所有的SQL都不会记录

如果使用了use $dbname,那么判断规则取决于这里的$dbname,而不是SQL中操作的库

3.二进制日志不准确的处理

默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的

句丢失。

要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。

即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。

如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务),

如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志比期望的要小”)。

在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。

mysqldump --databases repltest --flush-logs --opt repltest>q:/repltest_full_01.sql

上面这句话可以在备份的同时刷新日志,生成新的日志,这样新日志里面的内容相当于这次备份之后的增量部分,可以用这种方式来实现mysql的

量备份,即先恢复数据库到之前备份的某个数据备份节点上,然后执行之后的二进制日志,因为二进制日志实质上记录的是所有数据变更的操作,

以来实现增量备份或者对某个时间点的还原

清理日志

如果每天都会生成大量的二进制日志,这些日志长时间不清理的话,将会对磁盘空间带来很大的浪费,所以定期清理日志是DBA维护mysql的一个重

工作

1)RESET MASTER

在上面查看日志存放的文件夹中,二进制日志命名的格式是以mysql-bin.*,*代表日志的序号,序号是递增的,其中还有mysql-bin.index是日志的

引文件,记录了日志的最大序号

我们执行RESET MASTER命名删除全部日志,新的日志从头开始

2)PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE

执行PURGE MASTER LOGS TO 'mysql-bin.******'命令,是将'******'编号之前的所有日志进行删除

执行PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'命令,是将在'yyyy-mm-dd hh:mm:ss'时间之前的所有日志进行删除

3)-EXPIRE_LOGS_DAYS

此参数是设置日志的过期天数,过期的日志将会被自动删除,这有利于减少我们管理日志的工作量,需要修改my.cnf

EXPIRE_LOGS_DAYS = 3 //即为日志保存三天,三天之后过期的日志自动删除

恢复

bin-log是记录着mysql所有事件的操作,当mysql发生灾难性错误时,可以通过bin-log做完整恢复,基于时间点的恢复,和基于位置的恢复

完整恢复,假定我们每天凌晨2点都会使用mysqldump备份数据库,但在第二天早上9点由于数据库出现了故障,数据无法访问,需要恢复数据,先

用昨天凌晨备份的文件进行恢复到凌晨2点的状态,在使用mysqlbinlog恢复自mysqldump备份以来的binlog

/usr/local/mysql/bin/mysqlbinlog bin.000001 |mysql -u root -p

这样数据库就可以完全的恢复到崩溃前的完全状态

-----实例-------

小量的数据库我们可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,我们就不太可能每天进行一次完整备份了,而且改成每

一次完整备份,每天一次增量备份类似这样的备份策略。增量备份的原理就是使用了mysql的二进制日志,所以我们必须启用二进制日志功能。

一、增量备份

1、比如我们在星期天下午11点做一次完整备份:

/usr/local/mysql/bin/mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > fullbackup_sunday_11_PM.sql

在sql文件中我们会看到两行:

– Position to start replication or point-in-time recovery from

– CHANGE MASTER TO MASTER_LOG_FILE=’bin-log.000002′, MASTER_LOG_POS=107;

第二行包含了我们需要的信息,是指备份后所有的更改将会保存到bin-log.000002二进制文件中。

2、然后在星期一下午11点我们来做一次增量备份:

mysqladmin flush-logs

这时将会产生一个新的二进制日志文件bin-log.000003,bin-log.000002则保存了自星期天下午11点到现在的所有更改,我们只需要把这个文件备

到安全的地方就行了。然后星期二我们又做增量备份,还是执行同样的命令,这时我们保存bin-log.000003文件。

二、恢复备份

比如星期三中午12点出现了故障,这时需要恢复,我们首先导入星期天的完整备份:

mysql -u root -p < fullbackup_sunday_3_AM.sql

接着我们导入星期一和星期二的增量备份:

/usr/local/mysql/bin/mysqlbinlog bin-log.000002 bin-log.000003 | mysql -u root -p

这时我们已经恢复了所有备份数据,我们还可以找到bin-log.000004,进一步恢复最新的数据。

mysqlbinlog 后加 --database "具体库" 可恢复具体库的增量信息

加 --stop-date="2010-12-20 13:15:00" 可恢复到该日志的具体时间点

Mysql 二进制日志备份还原

Mysql 二进制日志备份还原 一.开启二进制日志 1.进入配置文件[mysqld]下添加配置 方案一 vim /etc/my.cnf log-bin = /usr/local/mysql/logs/ ...

MySQL完全备份脚本:数据+二进制日志+备份日志

一. 脚本须知 1.mysql数据文件和二进制日志文件最好保存在不同的分区或存储设备上 2.备份完成后注意修改数据的权限以防止泄露重要信息,哪些主机哪些用户可以用来恢复 3. 查看导出的2进制日志文件 ...

MySQL二进制日志的备份和恢复

二进制日志:记录数据库修改的相关操作,作用是即时点回复,主从复制 可以按时间滚动,也可以按大小滚动 server-id:服务器身份标识 一.二进制文件的删除方法,千万不要手动删除 PURGE BINA ...

MySQL 备份与还原详解

相关阅读: MySQL备份和恢复具体实施 http://www.linuxidc.com/Linux/2012-12/76257.htm MySQL备份与恢复的三种方法总结 http://www.li ...

binlog之四:mysql中binlog_format模式与配置详解,binlog的日志格式详解

mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...

MySQL数据库使用mysqldump导出数据详解

mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数 ...

【转】MySQL用户管理及SQL语句详解

[转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

MySQL数据库的各种存储引擎详解

原文来自:MySQL数据库的各种存储引擎详解   MySQL有多种存储引擎,每种存储引擎有各自的优缺点,大家可以择优选择使用: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB ...

MySQL二进制日志(binary log)总结

本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

随机推荐

调整Linux磁盘分区的大小的方法

昨天数据入库时,一直报错,说磁盘满了,,df -h    一看,发现/目录下只有50G空间,已使用49G:我的程序和dbss都安装在/目录下,ftp到的数据放在/data下的一个子目录下,分解完的 ...

jQuery Mobile 移动开发中的日期插件Mobiscroll使用说明

近期在移动方面的开发,使用jQuery Mobile ,移动方面的插件不如Web 方面的插件多,选择的更少,有一些需要自己去封装,但功力尚不足啊. 日期插件JQM也提供了内置的,但样式方面不好看,只好 ...

BigInteger和BigDecimal大数相加问题

package cn.hncu.big; import java.math.BigDecimal; public class BigDecimalDemo { public static void m ...

MVC创建通用DropdownList

起因 MVC项目中有数据字典表,定义了多个类型,需要给每个类型做下拉菜单. 不可能每个类型,都敲一个代码,需要做成通用 思路 利用MVC的部件方式,分别定义Controller,View和Model: ...

ASP.NET与ASP.NET MVC 的差异、优点及缺点

众所周知,在微软的编程语言发展历史中,asp.net是不得不提的一个重要的发展阶段,它具有快速开发.层级明确的优点,但最大的缺点,同时也是它逐渐被废弃的原因就是,页面加载的viewstate过于庞大, ...

Lintcode93-Balanced Binary Tree-Easy

93. Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...

zookeeper的读写流程

zookeeper的读写流程 基本架构 节点数要求是奇数. 常用的接口是 get/set/create/getChildren. 读写流程 写流程 客户端连接到集群中某一个节点 客户端发送写请求 服务 ...

POJ 3169 Layout(差分约束+链式前向星+SPFA)

描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...

hibernate 延迟加载和抓取策略

一.延迟加载 1.简单查询get,load 针对对象本身延迟或即时 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load ...

系统编程--文件IO

1.文件描述符 文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时候,内核向进程返回一个文件描述符,新打开文件返回文件描述符表中未使用的最小文件描述符.Unix系统shell使用文件描述符 ...

你可能感兴趣的:(mysql完全备份,二进制日志)