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

mysql 大表 备份_MySQL大表备份的简单方法相关推荐

  1. mysql 大表 驱动_MySql 小表驱动大表

    在了解之前要先了解对应语法 in 与 exist. in后的括号的表达式结果要求之输出一列字段.与之前的搜索字段匹配,匹配到相同则返回对应行. mysql的执行顺序是先执行子查询,然后执行主查询,用子 ...

  2. mysql 分页 有序保证_MySql大表分页(附独门秘技)

    问题背景 MySql(InnoDB)中的订单表需要按时间顺序分页查询,且主键不是时间维度递增,订单表在百万以上规模,此时如何高性能地实现该需求? 注:本文并非主要讲解如何建立索引,以下的分析均建立在有 ...

  3. 升级mysql服务器二进制备份_MySQL二进制日志备份和恢复详解

    基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句. 作用: 1.二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二 ...

  4. 拷贝 var lib mysql 备份_mysql复制与备份

    备份策略: 完全+差异+binlog 完全+增量+binlog binlog最好能实时备份到另一个节点上. 完全备份,多久一次? 数据变化量:有20%,建议使用完全备份. 可用的备份存储空间: 数据变 ...

  5. mysql 表损坏_MYSQL数据表损坏的原因分析和修复方法小结(推荐)

    1.表损坏的原因分析以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时被杀掉. 4. ...

  6. mysql二进制日志重置_MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

  7. mysql 数据库表重建_mysql 数据库表重建

    数据库内核月报 - 2015 / 09-MySQL · 捉虫动态 · 建表过程中crash造成重建表失败 问题描述 主库的create table语句传到备库,备库SQL线程执行过程中报错: Erro ...

  8. mysql 定期清理表数据_mysql 定期清理表数据库

    zabbix数据库备份整理 zabbix数据库备份整理 zabbix数据库备份整理 zabbix的所有操作都是存在数据库里,在数据库里都会有对应的表,所以对zabbix备份,只需备份数据库就行了. 采 ...

  9. mysql数据库表重建_mysql数据库表重建

    数据库内核月报 - 2015 / 09-MySQL · 捉虫动态 · 建表过程中crash造成重建表失败 问题描述 主库的create table语句传到备库,备库SQL线程执行过程中报错: Erro ...

最新文章

  1. httpClient3.1 笔记
  2. 【模型训练】SGD的那些变种,真的比SGD强吗
  3. java对象复制到另一个对象中_spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)...
  4. 【重构】微信小程序倒计时组件
  5. /bin/bash^M: bad interpreter: 没有那个文件或目录
  6. 国内厂商对鸿蒙系统的态度,鸿蒙系统4月上线,国内手机厂商态度很关键!小米、中兴出乎意料...
  7. Android内核剖析
  8. 计算机的主机主要由什么和什么不同,台式电脑主机由什么硬件组成?
  9. 工行金融级微服务架构的实践
  10. JavaScript数组方法map
  11. 【Vegas原创】imp/exp导入导出数据
  12. 【报告分享】5G零售行业应用白皮书.pdf(附下载链接)
  13. 微软鼠标测试软件,微软发了一款“精准”鼠标 我们告诉你精准在哪儿?
  14. mybatis官网下载
  15. Testbed单元测试
  16. 基于Python开发WebService-2:客户端(suds、zeep)
  17. 【kimol君的无聊小发明】—用python写音乐下载器
  18. damon ps2 android,DamonPS2模拟器
  19. 洛谷 #2197. Nim游戏
  20. 贵州省谷歌卫星地图下载

热门文章

  1. 第一弹!安利10个让你爽到爆的IDEA必备插件!
  2. 面试官 | 讲一下如何给高并发系统做限流?
  3. linux gcc编译下的文件读写操作
  4. CentOS 8安装并配置NFS服务
  5. Element Tree型控件
  6. fstream下的读写操作
  7. 关闭mysql服务的方法有哪些_MySQL--启动和关闭MySQL服务
  8. bootstrap 取消_学习写个网站(5)Bootstrap学习2
  9. MySQL数据步骤管控_数据管理的发展过程分为哪三个阶段
  10. springboot整合rocketmq_面试官:简单说一下RocketMQ整合SpringBoot吧