一般的网站应用中,总会有部分二次数据(处理过的原始数据)展现给前台,比如,拿购物网站来说,购买进口奶粉最多的用户群体;哪类产品消费增长趋势最旺盛;用户的消费历史归类等都是二次数据。由于这部分数据通常是分析后的数据,而且实时性不强,因此这个过程通常是通过离线计算得到。为了展现给前台,需要将这部分数据回流到关系型数据库【离线计算集群一般都是KV存储,不支持SQL】,供前端用户查询。
      对于MYSQL而言,数据回流实质就是通过mysqlimport或load data infile语句将离线计算的结果导入到数据库中。mysqlimport实质是对load data infile的封装,所以搞清楚load data infile的原理,和使用过程中需要注意的事项,就搞清楚了mysql数据回流。
      load data infile语法,大家可以通过mysql官方手册查看,这里就不copy-paste了,这里主要介绍下原理和流程,下面所描述的都是针对innodb存储引擎,复制采用行级复制的情况。流程如下:
(1)主数据库进行 ‘Load’ 操作
(2)主数据库操作完成后,才开始向slave传输 load.txt文件,
(3)slave接受文件,并在 slave_load_tmpdir 目录下生成 load.txt 文件,接受并生成完整的load.txt 后,才开始读取该文件,并将数据插入到本地表中。
备注:由于innodb是事务型的,所以会把load文件的整个操作当作一个事务来处理,中途中断load操作,会导致回滚。 
   
                                            
                                                                      load data infile 结构图【来自网络】
 
 
    在执行load data infile前,一定要根据实际情况设置好以下几个参数,否则很有可能因为参数设置不对,导致load失败。 
slave_load_tmpdir
含义:load data infile 存放临时文件的目录
建议:这个目录所在磁盘空间应该足够大,防止因为目录空间不足,导致失败的情况。
 
max_allowed_packet
含义:客户端/服务器之间通信的缓存区的最大大小。
最大值:1G
建议:因此对于含有大字段(BLOB,TEXT)的表操作,或主备之间含有大事务传递时,需要调大该值,否则会出现max_allowed_packet不够大的错误。
 
max_binlog_cache_size
含义:用来限制用来缓存多语句事务的缓冲区总大小。如果某个事务大于该值,将会失败并回滚。
最大值:4G(32位),16PB(64位)
建议:对于load data infile,或mysqlimport导入大文件时,由于是作为一个事务,很可能导致max_binlog_cache_size不够,而出现错误导致回滚的情况。
 
max_binlog_size
含义:事务以一个块写入二进制日志,当超过max_binlog_size时,文件进行切换。
于max_binlog_size。
最大值:1G
建议:这个值设置不会导致执行报错的情况。但是,有一点要注意,单个事务的binlog不会跨binlog文件,因此大事务可能导致binlog文件超出max_binlog_size值。
 
     本人在使用mysql进行load时,遇到过好几个问题,都是与以上几个参数有关。
1.max_binlog_cache_size不够大,主库导入出错,或从库复制出错;
解决方法:调大该值
 
2.max_allowed_packet不够大,导致从库io_thread拉binlog失败,主备复制中断。
解决方法:
1.调大该值
2.重新建立复制关系
(1).记录目前复制的位置(Relay_Master_Log_File, Exec_Master_Log_Pos);
(2).reset slave [清理掉无效的relay-log,和master-info信息]
(3).执行change master to 命令
(4).start slave
                                  
大部分情况下,执行第一步后,start slave应该就可以了;但我碰到过,重启复制后依然报错的情况,主要原因是max_allowed_packet不够大,relay-log只记录了事务的一部分,复制报错。那么,通过重建复制关系,则会重新开始拉事务的binlog,relay-log完整后,就不存在问题了。
 

MYSQL数据回流的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

    概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...

  3. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  4. 使用Solr索引MySQL数据

    环境搭建 1.到apache下载solr,地址:http://mirrors.hust.edu.cn/apache/lucene/solr/ 2.解压到某个目录 3.cd into D:\Solr\s ...

  5. MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  6. ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步

    在实现的路上遇到了各种坑,再次验证官方文档只能产考不能全信! ElasticSearch安装就不说了上一篇有说! 安装logstash 官方:https://www.elastic.co/guide/ ...

  7. 转 MySQL 数据备份与还原

    MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html   一.数据备份 1.使用mysqldump命令备份 mysqldum ...

  8. 用Myisamchk让MySQL数据表更健康

    用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐 ...

  9. 浅析MySQL数据碎片的产生(data free)

    浅析MySQL数据碎片的产生 2011-03-30 09:28 核子可乐译 51CTO 字号:T | T MySQL列表,包括MyISAM和InnoDB这两种最常见的类型,而根据经验来说,其碎片的产生 ...

随机推荐

  1. 将文本文件(txt)的内容导入到Excel和SQL

    这两天网络上流传14w条12306账号信息的txt文档,下载下来之后发现在txt文档中看和查询内容都不是很方便. 这里我就记录下如何将txt文档导入到excel和SQL的过程. 导入到excel 1. ...

  2. Software license key and activation

    http://stackoverflow.com/questions/16222674/software-license-key-and-activationhttps://github.com/La ...

  3. thinkphp中assign()和display()区别和用法

  4. 开启MySQL日志

    找到my.ini(Linux下是my.cnf)文件,在文件里加入下面两行: log="F:/mysqllog/mysql.log" log-bin="F:/mysqllo ...

  5. 解决 com.sun.*包导入错误

    解决 com.sun.*包导入错误 com.sun.image.codec.jpeg.*导入错误如何解决: com.sun.*是受限制访问的API,Eclipse 默认把受访问限制的API设成了ERR ...

  6. php中的常用数组函数(四)(数组中是否有某个键名或索引)

    /***********array_key_exists(检查键名或索引是否在数组中)*****************/ $arr1 = array('name' => 'Sheldon', ...

  7. buffer和cache有什么本质区别

    在free命令展示机器的内存消耗情况,会像这样展示

  8. 【背景建模】PbModel

    PbModel是基于概率模型的背景差分算法,其基本思想是像素点会因光照变化.运动物体经过产生多种颜色值,但是一段时间内,像素点处于静止状态的时间会比处于运动状态的时间长.因而一段时间内,像素点某个颜色 ...

  9. bootstrap字体图标在谷歌显示正常,在火狐显示异常的问题

    bootstrap字体图标的使用 现在有很多的网站支持字体图标,我所知道的有bootstrap,fontawesome,iconmoon,等等,可能还有其他我并不知道 bootstrap只要你的文件夹 ...

  10. 【javascript激增的思考01】模块化编程

    前言 之前我做过一个web app(原来可以这么叫啦),在一个页面上有很多小窗口,每个小窗口都是独立的应用,比如: ① 我们一个小窗口数据来源是腾讯微博,需要形成腾讯微博app小窗口 ② 我们一个小窗 ...