随笔分类 -  MySQL

摘要:摘要: 在主从复制的架构中,正常情况下主上操作的记录也会在从上进行操作,虽说是异步复制,但操作会“实时”的同步到从。比如在主上不小心误操作了,还没等反应过来从上也会马上执行误操作,后期只有通过二进制或则备份恢复数据了,费时,又费力,没有任何回旋的余地,而且也会影响到网站的功能。而pt-slave-delay故意让主上的操作延迟制定的时间写入到从,这样就可以快速的处理上面说的问题了。下面介绍下使用方法,其实挺简单的。前提:下载地址:wget www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz安装 阅读全文
posted @ 2013-10-23 16:23 jyzhou 阅读(3196) 评论(0) 推荐(1) 编辑
摘要:前言: 今天遇到主从表不一致的情况,很奇怪为什么会出现不一致的情况,因为复制状态一直都是正常的。最后检查出现不一致的数据都是主键,原来是当时初始化数据的时候导致的。现在分析记录下这个问题,避免以后再遇到这个"坑"。 背景: 主从服务器,MIXED复制模式。 分析: 表:SPU 当时的初始化操作的SQ 阅读全文
posted @ 2013-09-25 18:26 jyzhou 阅读(9204) 评论(1) 推荐(4) 编辑
摘要:MySQL的MyISAM引擎现在越来越被淡化了,但是还是有必要再温习总结一下的。 允许你改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间。改变优先级还可以确保特定类型的查询被处理得更快。这一部 分讲解MySQL的默认的调度策略和可以用来影响这些策略的选项。它还谈到了并发性插入操作的使用和存储引擎锁定层次对客户端的并发性的影响。为了讨论的 方便,我们把执行检索(SELECT)的客户端称为"读取者",把执行修改操作(DELETE、INSERT、REPLACE或UPDATE)的客户端称 为"写入者"。My 阅读全文
posted @ 2013-09-24 17:18 jyzhou 阅读(2308) 评论(0) 推荐(0) 编辑
摘要:昨晚收到一则求助,一个用户的本地数据库的重要数据由于误操作被删除,需要进行紧急恢复,用户的数据库日常并没有进行过任何备份,binlog也没有开启,所以从备份和binlog入手已经成为不可能,咨询了丁奇,发了一篇percona的文章给我,顿时感觉有希望,于是到percona的官网上下载了恢复工具:一.安装:.tar -xvf percona-data-recovery-tool-for-innodb-0.5.tar.gz.cd percona-data-recovery-tool-for-innodb-0/mysql-source/../configure.cd percona-data-re. 阅读全文
posted @ 2013-08-31 16:27 jyzhou 阅读(12540) 评论(0) 推荐(0) 编辑
摘要:来自:http://dinglin.iteye.com/blog/1791922有同学问到 checksum table在逻辑备份时候前后是否可以用于验证数据一致性。扩展一下发现有一些有趣的问题,比如数据插入顺序不同、表引擎不同、操作系统位数不同等。插入顺序不同是否有影响我们知道全表扫描是可以有很多种顺序的,尤其当表里面出现过delete动作以后,逻辑导出再导入另外一个表后,两个表的全表扫描结果可能不同。Checksum table计算返回值的逻辑大致如下: ha_checksumcrc=0;foreach(rowintable){row_crc=get_crc(row);crc+=row_c 阅读全文
posted @ 2013-07-30 09:02 jyzhou 阅读(1426) 评论(0) 推荐(0) 编辑
摘要:在MySQL建表时,遇到一个奇怪的现象:root@localhost : test 10:30:54>CREATE TABLE tb_test ( -> recordid varchar(32) NOT NULL, -> areaShow varchar(10000) DEFAULT NULL, -> areaShow1 varchar(10000) DEFAULT NULL, -> areaShow2 varchar(10000) DEFAULT NULL, -> PRIMARY KEY (recordid) -> ) ENGINE=INNODB D 阅读全文
posted @ 2013-07-09 11:17 jyzhou 阅读(29218) 评论(2) 推荐(2) 编辑
摘要:本文来自:http://insidemysql.blog.163.com/blog/static/2028340422013671186977/最近和文件系统内核开发人员做技术交流,对O_DIRECT选项有了新的认识。在 InnoDB存储引擎的配置中参数innodb_flush_method通常设置为O_DIRECT,这也是官方文档所推荐的设置值。DBA或开发人员 知道该参数是文件打开的一个标识,启用后文件的写入将绕过操作系统缓存,直接写文件。其在InnoDB存储引擎中的表现为对于写入到数据表空间将绕过操作 系统缓存。这样设置通常不会有更好的性能,但是数据库已经有自己的缓存系统,这样的设置可以 阅读全文
posted @ 2013-07-09 10:06 jyzhou 阅读(3569) 评论(0) 推荐(0) 编辑
摘要:摘要: 用Python写脚本也有一段时间了,经常操作数据库(MySQL),现在就整理下对各类数据库的操作,如后面有新的参数会补进来,慢慢完善。 一,python 操作 MySQL:详情见:这里 mac 安装:http://sourceforge.net/projects/mysql-python/? 阅读全文
posted @ 2013-06-14 14:04 jyzhou 阅读(13816) 评论(0) 推荐(0) 编辑
摘要:【来自:http://dinglin.iteye.com/blog/1884696】 背景 有同学讨论到MySQL 5.5下给大表加主键时会锁住读的问题,怀疑与fast index creation有关,这里简单说明下。 对照现象 为了说明这个问题的原因,有兴趣的同学可以做对比实验。 1) 在给In 阅读全文
posted @ 2013-06-14 10:33 jyzhou 阅读(562) 评论(0) 推荐(0) 编辑
摘要:数据库迁移(A -> B),需要把用户也迁移过去,而用户表(mysql.user)有上百个用户。有2种方法进行快速迁移:1,在同版本的条件下,直接备份A服务器的mysql数据库,还原到B服务器。2,要是不同版本的数据(5.1 -> 5.5),很可能mysql数据库下面的一些表结构,甚至表数据的默认值都不一样,按照1的方法进行迁移,虽然最后也是可以正常访问,但是还是有些不太放心,很可能会影响到了B服务器上的MySQL,这样就需要用命令行来生成帐号了,这样是最安全和放心的。下面用python脚本来进行批量导出:#!/bin/env python# -*- encoding: utf-8 阅读全文
posted @ 2013-05-28 13:51 jyzhou 阅读(3553) 评论(0) 推荐(0) 编辑
摘要:本文来自:mysql binlog的row模式数据解析drc-mysql是一种支持多master 多slave的快速并行复制的解决方案,基于mysql的binlog,目前支持binlog的STATEMENT模式。为了实现drc-mysql对 ROW模式的支持,本文对此展开研究,分析了binlog的事件格式,并针对不同的数据类型进行解析。本文的目的是为了展示如何从row模式事件中解析数据,因此事件中一些记录其他信息的字节会直接略过,感兴趣的同学可以看看log_event.h以及log_event.cc两个文件。获取Binlog事件:Mysql对Binlog的处理是以事件为单位的,每一次DML操作 阅读全文
posted @ 2013-05-23 15:34 jyzhou 阅读(6092) 评论(0) 推荐(1) 编辑
摘要:在主库上执行一条 SQL [insert... select... ] 语句,导致从库延迟,以前执行都不会出现延迟的,肯定有蹊跷。所以当时就在从上执行 [show slave status\G;] 查看在执行到主的哪个position被”卡“住。发现:zjy@192.168.1.243 : (none) 02:13:11>show binlog events in 'mysql-bin_3306.000011' from 143808509 limit 10;+-----------------------+-----------+------------+------- 阅读全文
posted @ 2013-05-23 15:29 jyzhou 阅读(3128) 评论(0) 推荐(1) 编辑
摘要:InnoDB undo log解析(一)InnoDB undo log解析(二) 阅读全文
posted @ 2013-05-14 18:06 jyzhou 阅读(368) 评论(0) 推荐(0) 编辑
摘要:摘要: 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程,下次遇到就不会这么手忙脚乱了。处理过程: 一遇到报警之后,直接打开错误日志,里面的信息:InnoDB: Database page corruption on disk or a failedInnoDB: file read of page 30506.InnoDB: You may have to recover from a backup.130509 20:33:48 InnoDB: P. 阅读全文
posted @ 2013-05-10 11:52 jyzhou 阅读(6048) 评论(0) 推荐(0) 编辑
摘要:摘要: 工作上需要把一个从库提升为主库,但对从库和主库的数据一致性不能保证一样,所以就利用 pt-table-checksum 工作来检查主从的一致性(之前写过用1.0.1的版本可以进行操作的文章,但是在新版本操作就不行了,只能重新来过)以及通过 pt-table-sync 如何修复这些不一致的数据... 阅读全文
posted @ 2013-05-09 11:58 jyzhou 阅读(5109) 评论(0) 推荐(1) 编辑
摘要:1,into outfile 生成sql:一般都是生成文本或者其他形式的文件,现在需要生成sql形式的文件。 select concat('insert into tab_name(col1,col2,col3) values(',col1,',','\'',col2,'\'',',','\'',c 阅读全文
posted @ 2013-05-06 09:40 jyzhou 阅读(4289) 评论(1) 推荐(6) 编辑
摘要:http://blog.chinaunix.net/uid-24086995-id-168445.html 阅读全文
posted @ 2013-04-29 12:19 jyzhou 阅读(335) 评论(0) 推荐(0) 编辑
摘要:摘要: 一直以为"insert into tb select * from tbx" 这样的导入操作是会把tbx表给锁住的,在锁期间是不允许任何操作(保证一致性)。看完这篇写的之后,发现tbx表是会被锁住,但这个锁有2种情况,现在逐一进行分析: 分析环境: 1:按照主键排序插入的情况 直接插入,不加 阅读全文
posted @ 2013-04-28 16:11 jyzhou 阅读(11084) 评论(0) 推荐(0) 编辑
摘要:本文来自这里今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insert、update等。不过也没有保留现场。因此有疑问为什么建表会影响DML?分析 首先这个现象不是在所有场景都会碰到(否则MySQL的用户们早就跳起来了)。一来建表这个操作本身很快,只涉及到写表定义文件和初始化表空间。中间涉及到redo和undo的操作也很少(这里只讨论InnoDB表)。因此除非碰到磁盘IO响应不了,否则多数情况下建表操作很快结束,不会“稳定复现”二来即使由于io原因,建表过程执行时间较长,建表操作也不会阻塞一些DML操作。 因此只能从代码出发看冲突的case。 假设session 1正在执行一个crea 阅读全文
posted @ 2013-04-28 10:51 jyzhou 阅读(365) 评论(0) 推荐(0) 编辑
摘要:insert into ... select : select后面的表会加锁,到底是怎么样的,请见:INSERT INTO … SELECT 的锁分析的很详细,有空自己再测试下。 阅读全文
posted @ 2013-04-26 10:17 jyzhou 阅读(595) 评论(0) 推荐(0) 编辑