mysql 大表 备份_MySQL大表备份的简单方法

MySQL大表备份是一个我们常见的问题,下面就为您介绍一个MySQL大表备份的简单方法,希望对您学习MySQL大表备份方面能有所帮助。

这里所说的大表是超过4G以上的表,我目前见到过最大为60多G的单表,对于这种表每天一个全备可以说是一件很痛苦的事。

那么有没有办法,可以实现一个全备加增量的备份呢。

答案当然是有的。

在常规环境直可以用全备加binlog一同保存。

这种环境大多可以用一个Slave上进行备份操作。

思路:

先停止Slave的同步,刷新buffer,对于Innodb 如果想直接拷贝还需要把innodb_max_dirty_pages_pct这个值置为零,然后在执行一次flush tables;

就可以cp了。如果是Dump出来可以这这样做。

这个方案目前来看也是比较完美的,但一个并发力度大的应用一天的Binlog有可能能达到50G-60G,这样的系统开Binlog可以说是对系统的IO性能及整体性能都有早影响。

另一种方案就是基于表的上数据的罗辑变化进行备份。

主体思想:全备加逻辑备份。

逻辑备份:当有数据插入时,利用触发器同时写入另一个表,当数据更新时,我们同时记录一下,更新后的数据情况到另一个表。

当有删除操作时,只需要记录一下,删除的主建ID就行。

例子:

要备份的表:

CREATE TABLE `wubx` (  `id` int(11) NOT NULL auto_increment,

`user_id` int(11) NOT NULL default ‘0‘,

`friend_id` int(11) NOT NULL default ‘0‘,

`dir_id` int(11) NOT NULL default ‘0‘,

`created` int(11) NOT NULL default ‘0‘,

UNIQUE KEY `id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

对于这个表我们需要建一个记录有新数据变化的表为:

mysql> create table wubx_ii like wubx;

Query OK, 0 rows affected (0.00 sec)

mysql> create table wubx_uu like wubx;

Query OK, 0 rows affected (0.00 sec)

mysql> create table wubx_dd ( id int(11));

Query OK, 0 rows affected (0.00 sec)

建立相应的触发程器

记录insert的操作:

delimiter //

create trigger wubx_ii after insert on wubx for each row begin insert into wubx_ii set id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created; end//

记录update的操作:

create trigger wubx_uu after update on wubx for each row begin replace into wubx_uu set id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created; end//

记录删除的操作:

create trigger wubx_dd after delete on wubx for each row begin insert into wubx_dd values(old.id); end//

delimiter ;

操作:

先备份原始表wubx里的数据:

进行:

insert into wubx values(”,1,10,1,1198464252);

insert into wubx values(”,1,11,1,1198464252);

insert into wubx values(”,1,2,1,1198464252);

insert into wubx values(”,2,10,1,1198464252);

insert into wubx values(”,2,12,1,1198464252);

insert into wubx values(”,3,12,1,1198464252);

update wubx set dir_id=5 where user_id=3;

update wubx set dir_id=4 where user_id=3;

delete from wubx where user_id=2 and friend_id=12;

现在要实现增量备份:

取出insert的操作:

mysql -e ” select concat(‘replace into wubx set id=’,id,’,user_id=’,user_id,’,friend_id=’,friend_id,’,dir_id=’,dir_id,’,created=’,created,’;‘) from wubx_ii;”>>backup_ii.sql

取出update的操作:

mysql -e ” select concat(‘update wubx set user_id=’,user_id,’,friend_id=’,friend_id,’,dir_id=’,dir_id,’,created=’,created,’ where id=’,id,’;‘) from wubx_uu;”>>backup_uu.sql

取出delete的操作:

mysql -e “select concat(‘delete from wubx where id=’,id,’;‘) from wubx_dd”>>backup_dd.sql

这样利用这些逻辑的备份加是完毕备份恢复到当前恢复点就很容易了。这里不演示。

这个操作最好用一个程序完成,当取完罗辑备份后,做一个标记点去清楚备份完的数据,以保证,逻辑记录表里的数据量比较少是正确的。

原文:http://www.cnblogs.com/java-rookie/p/3927030.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql多数据源切换_CI 多数据库操作 切换数据库

CI 切换数据库是很方便的,如:连接多数据库如果你需要同时连接多于一个的数据库,你可以用以下方式来实现:$DB1 $this->load->database(group_one, TRUE);$DB2 $this->load->database(group_two, TRUE);注意&#xff…

mysql用的cap中哪两个_分布式事务CAP定理和BASE理论

课程总计41课时,从什么是事务讲起,直到分布式事务解决方案,很的0基础基础与提升系列课程。对于难以理解的知识点,全部用画图实战的方式讲解。彻底明白事务的四个特性:原子性、一致性、隔离性、持久性,用场景…

怎么检测mysql主从正常_使用pt-table-checksum检查主从复制是否正常

其实对于一个小小的DBA来说,有时候是无法避免这些问题的。于是我们就需要一个工具,来检查主从复制是否正常,是否出现了错误。pt-table-checksum。相关阅读:MySQL 主从复制事件校验 MySQL Replic…

java 自动类型_java类型自动转换

package com.kevin.basic;/** java类型自动转换方面的知识点* int类型 double类型 默认类型*/public class Test {/*** param args*/public static void main(String[] args) {// TODO Auto-generated method stub/* int类型是整数的默认类型。* (1)第一种:正确运行…

java 不显示控制台_命令行启动java程序不显示控制台窗口

关键:start javaw –jar xxx.jar一个例子:ECHO OFFREM "zcx eclipse help script"set ehome"f:\eclipse"pushd %ehome%if "%1" "start" (explorer http://localhost/help/index.jsp)start javaw -classpath pl…

java 修改ini文件_Java读取和修改ini配置文件

/*** 修改ini配置文档中变量的值* param file 配置文档的路径* param section 要修改的变量所在段名称* param variable 要修改的变量名称* param value 变量的新值* throws IOException 抛出文档操作可能出现的io异常*/public static boolean setProfileString(String file,St…

java定义接口规范_关于java的接口的一些规范

一、Api请求及响应规范 为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。1、get 请求时,采用key/value格式请求,SpringMVC可采用基本类型的变量接收,也可以采用对象接收。2、Post请求时,可…

a java虚拟机_Java虚拟机

内存分配以及回收Java虚拟机运行时数据区,分为以下几个模块,包含所有线程共有的数据区和线程单独享有的数据区。程序计数器:字节码行号,通过这个计数器来选取下一条需要执行的指令,线程独有。虚拟机栈:线程…

java tostring的用处_JAVA的tostring()方法的作用是什么呢?

展开全部1.toString方法Object类具有一个toString()方法,你创建的每个类都会继承62616964757a686964616fe4b893e5b19e31333365666236该方法。它返回对象的一个String表示,并且对于调试非常有帮助。然而对于默认的toString()方法往往不能满足需…

java calendar 毫秒_java Calendar(将时间精确到毫秒)

package com.neusoft.date;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class RiQi{public static void main(String []args){System.out.println(new Date());//calendar可以将时间精确到毫秒Calendar calendar new Gregori…

java 1000到9999_java – 可以0.99999999999乘以四舍五入到1.0?

如果你用someInt(> 0)乘以低于1.0的最大值,结果永远不会是someInt。这可以穷尽地测试整数,像这样:Double greatestLessThanOne Double.longBitsToDouble(4607182418800017407L);// Assert that greatestLessThanOne is indeed the larges…

mysql 表 类型_mysql表类型

MySQL支持6种不同的表类型:BDB、InnoDB、HEAP、ISAM、MERGE以及MyISAM。其中 BDB,InnoDB单独属于一类,称为“事务安全型”(transaction-safe),其余的表类型属于第二类,称为“非事务安全型”(non- transaction-safe)。事务安全型BD…

java软件工程_java复习

计算机一些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。计算机硬件:CPU、主板(motherboard)、内存(memory)、电源、主机箱、硬盘、显卡、键盘、鼠标、显示器等IO:input输入(鼠标键盘)、output输出(显示器音响)冯诺依曼体系结…

python偶数分解成两个素数之和_偶数 2021218918 ,有多少种方法分解成两个素数之和?...

对于上面问题2N2021218918,满足“pq2N”的素数对(p,q)的个数真值为3289208个。下面对这个值进行理论探求分析,请大家不吝赐教!下面先来进行基于小素数因子机理哥猜数分析:即对于大于2的偶数2N的小素数因子t,t∈A{≤(2N…

2008r装mysql_RMySQL安装及操作(详细版)

系统配置:Windows XP 32位R 3.1.1一、安装RMySQL:1,安装RTools并配置环境变量:我的电脑——属性——高级——环境变量,在系统变量一栏中选择PATH,点击编辑,在后面添加RTools的路径(如:D:\Rtools\bin;D:\Rtools\gcc-4.6.3\bin;D:\R…

apache 编译php mysql_apache静/动态编译在apache+php+mysql应用

【IT168 服务器学院】我想大家有不少都成功实现apachephpmysql,网上的文章也有不少,但我发现不少文章都是抄来抄去,并且没有说明白编译的方式,有的索性apache1.3的编译方法原封不动地搬过来套在apache2.0,显然误导一些…

java getparametermap_重写getParameterMap后,报错 ,

想做个参数过滤功能,如何修改,或者其他实现方式ServletExcludeHadler类在HttpServletRequestWrapper类里重写了getParameterMap现在报错java.lang.ClassCastException: org.apache.catalina.util.ParameterMap cannot be cast to java.util.HashMapat co…

java sdcard path_更改 android 文件存放目录 getWritablePath() 为sdCard

CCFileUtils::sharedFileUtils()->getWritablePath() 默认为 /data/data/prjName/"Java_org_cocos2dx_lib_Cocos2dxHelper.h" 的 std::string getFileDirectoryJNI() 方法通过 jni 调用 org.cocos2dx.lib.Cocos2dxHelper.getCocos2dxWritablePath() 获取具体&qu…

java 抽样_Java编程实现二项分布的采样或抽样实例代码

本文研究的主要是Java编程实现二项分布的采样或抽样,下面是详细实现代码。如下程序为n100,p0.9的二项分布采样,共采样10000次package function;import org.apache.commons.math3.distribution.BetaDistribution;import org.apache.commons.ma…

elasticsearch group by java_java elasticsearch聚合查询实例详解

现有索引数据:index:schooltype:student---------------------------------------------------{"grade":"1", "class":"1", "name":"xiao 1"}{"grade":"1", "class":&q…