当前位置 > 首页 > Sql

MySQL 执行load data infile时同步原理及注意事项(额外一点补充)

2011-5-12 15:03:00来源:Sql

1)在客户端也可以向远程MySQL服务器执行 ‘load data‘ 命令,
比如,客户端IP: 192.168.204.132
服务器IP: 192.168.204.131
可以在192.168.204.132上,
执行命令: mysql -h 192.168.204.131 -utest -ptest test -e'load local data infile "/opt/xxxxx.txt" into table loadtest;'

条件:
如果使用源码编译的MySQL,在configure的时候,需要添加参数:--enable-local-infile
客户端和服务器端都需要,否则不能使用local参数

2)load data infile 和 load local data infile 在 innodb和MyISAM 同步方面的区别
 对MyISAM引擎
(1)对master服务器进行 ‘load’ 操作,
(2)在master上所操作的load.txt文件,会同步传输到slave上,并在tmp_dir 目录下生成 load.txt文件
master服务器插入了多少,就传给slave多少
(3)当master上的load操作完成后,传给slave的文件也结束时,
即:在slave上生成完整的 load.txt文件
此时,slave才开始从 load.txt 读取数据,并将数据插入到本地的表中

 对innodb引擎
(1)主数据库进行 ‘Load’ 操作
(2)主数据库操作完成后,才开始向slave传输 load.txt文件,
slave接受文件,并在 tmp_dir 目录下生成 load.txt 文件
接受并生成完整的load.txt 后,才开始读取该文件,并将数据插入到本地表中

异常情况处理:
1)对MyISAM引擎
当数据库执行load,此时如果中断:
Slave端将报错,例如:
####################################################################
Query partially completed on the master (error on master: 1053) and was aborted.
There is a chance that your master is inconsistent at this point.
If you are sure that your master is ok,
run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE; . Query: 'LOAD DATA INFILE '/tmp/SQL_LOAD-2-1-3.data' IGNORE INTO TABLE `test_1`
FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`id`, `name`, `address`)'
###########################################################################################
按照提示,在slave服务器上:
(1) 使用提示的load命令,将主服务器传输过来的load文件,在从服务器上执行
(2)让从服务器跳过错误。set global sql_slave_skip_counter=1;
(3)开启同步
2)对Innodb引擎
由于innodb是事务型的,所以会把load文件的整个操作当作一个事务来处理,
中途中断load操作,会导致回滚。
与此相关的一些参数:
max_binlog_cache_size----能够使用的最大cache内存大小。
当执行多语句事务时,max_binlog_cache_size如果不够大,
系统可能会报出“Multi-statement
transaction required more than 'max_binlog_cache_size' bytes of storage”的错误。
 备注:以load data 来说,如果load的文件大小为512M,在执行load 的过程中,
所有产生的binlog会先写入binlog_cache_size,直到load data 的操作结束后,
最后,再由binlog_cache_size 写入二进制日志,如mysql-bin.0000008等。

所以此参数的大小必须大于所要load 的文件的大小,或者当前所要进行的事务操作的大小。

max_binlog_size------------Binlog最大值,一般设置为512M或1GB,但不能超过1GB。
该设置并不能严格控制Binlog的大小,尤其是Binlog遇到一根比较大事务时,
为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进
当前日志,直到事务结束
备注:有时能看到,binlog生成的大小,超过了设定的1G。这就是因为innodb某个事务的操作比较大,
不能做切换日志操作,就全部写入当前日志,直到事务结束。


  • Preview Release of the SQL Server ODBC Driver for Linux Hits the Streets

    2011-12-1 12:49:00

    Microsoft's SQL Server team yesterday announced the availability of a preview release of the SQ

  • c#操作SQLite数据库

    2011-5-15 18:55:00

    C#代码 using ?System; using ?System.Collections.Generic; using ?System.Web; using

  • 从Google到"谷歌"

    2009-5-15 17:01:00

    为了赢得中国市场, Google 创造了不少特例,其中之一就是2006年4月12日发布“谷歌”这一全球中文名称,这也是 Google 唯一一个在非英语国家发布的名字。其在上海设置的广告研发团队和在中

  • PHP SQLite 的使用和配置

    2011-4-16 22:16:00

    在PHP中如何开启使用 SQLite 在PHP 5.1.x 以后自带了 SQLtie 数据库功能,只需要在配置中开启即可 PHP.ini ;extension=php_sqlite.dl

  • MYSQL 5.0 以上 8小时超时问题

    2011-3-3 17:59:00

    ? MYSQL 5.0 以上 8小时超时问题 收藏 document.body.oncopy = function () { if (window.clipboardData) { setTi

  • 下面sql怎么没作用呢,关于索引重建的

    2012-4-16 16:18:00

    set nocount on declare r_t cursor for select name from sys.tables declare @T varchar(50) open r_t f

  • mysql数据库引擎:MyISAM和InnoDB

    2011-1-7 0:15:00

    mysql 优化系列(一) Mysql数据库引擎性能测试? Mysql 数据库中,最常用的两种引擎是innordb和myisam。Innordb的功能要比myiasm强大很多,但是innordb

  • 别跟Google一样被骇 欧洲建议放弃IE

    2010-1-21 10:20:00

    骇客利用浏览器漏洞进行攻击事件频有耳闻,德、法政府近日呼吁民众赶快换掉IE浏览器,微软虽然承认IE安全漏洞与 Google 被骇密切相关,但仍然声称只要将安全性调到“高”便能阻挡攻击。不过,微软还是

  • Google股价下跌12% 2.0失去华尔街的信任

    2007-3-19 10:58:00

    对于Google2.0需要多长时间才能建成,以及该项目昂贵的费用,华尔街正在失去耐心。随着谷歌(Google)更深入地涉足传媒业务,它正受到版权问题的困扰...

  • Google Latitude推iPhone版 与人分享位置信息

    2009-7-27 14:17:00

    从上周四开始,iPhone使用者只要连上m. Google .com/Latitude,就可以访问 Google Latitude,这个 Google 追踪朋友的功能。Latitude会在 Goo