- 浏览: 797299 次
- 性别:
- 来自: 杭州
最新评论
-
137578346:
...
各版本MySQL并行复制的实现及优缺点 -
db_code_peon:
引用而这个“调整”,也不是简单的指针重赋,而是将这个page ...
MySQL源码学习:简述InnoDB的BP LRU策略 -
xtha21:
预申请ID的个数为:大于批量插入记录数的最近一个2的指数值再- ...
MySQL源码学习:innodb_autoinc_lock_mode 下自增id不连续的原因 -
lc15808798846:
奇哥好试了下,好像这个问题在5.7 已经不存在了,SQL不会h ...
autocommit=0引起的业务hang住 -
wangliushui:
Transfer 怎样保证事物的一致性,一个事物关联多个表的 ...
MySQL-Transfer2.2发布
文章列表
有同学问到 checksum table在逻辑备份时候前后是否可以用于验证数据一致性。扩展一下发现有一些有趣的问题,比如数据插入顺序不同、表引擎不同、操作系统位数不同等。
插入顺序不同是否有影响
我们知道全表扫描是可以有很多种顺序的,尤其当表里面出现过delete动作以后,逻辑导出再导入另外一个表后,两个表的全表扫描结果可能不同。
Checksum table计算返回值的逻辑大致如下:
Background
In some projects that require very strict data safety, DBAs will except there is a solution to ensure the safety of binlog. That means after the worst case, OS crash or disk damage, there is a way to find out a whole copy of binlog.
Doublebinlog patch is done for this ...
前记
前几天收到一位同行的一个文档,是MySQL High Performance 2的读书笔记, 97页,6w多字。在描述完知识点后,有疑问的地方列出问题,希望和我讨论。看完以后非常敬佩,自感自己无法做到这么细心。为表敬意,承诺会一一回答里面的问题。对于无法简单回复的问题,就想通过博客的方式写出来,便于讨论。
因此这个系列,就是回复这位同学的文档中的问题的。
问题
服务器变量table_locks_immediate和 table_locks_waited#?它们保持多大的比例是合适的?
背景
table_locks_immediate表示可以立即获 ...
关于copy_and_convert 在对MySQL做业务压力测试的时候,我们在perf结果中发现 copy_and_convert 是一个耗费cpu的操作。这个函数的意思,就是在字符集之间做内容转换。 如果源和目标的字符集相同,就可以直接用memcpy,这显然比做字符集转换(按字节或字长拷贝更快,和节省cpu)
当整个系统是CPU瓶颈时,我们希望能够减少这种cpu消耗。
一次查询涉及的拷贝 如果我们执行一个简单的select语句,会涉及到两部分的内容:metadata和data。MySQL的返回包是能够“自解析”的,也就是说不仅有内容,还有描述信息。这些描述信息 ...
mysqldump在导出数据的过程中是“沉默”的,为了显示导出进度,给它加一个小patch显示进度。感谢 @宁青_ 的需求。
一、mysqldump输出方式
这个patch比较简单,先说一下相关的一个背景:mysqldump的输出方式。1、 默认方式 stdout2、 指定文件-r target_file 可以指定导出的内容写入文件target_file中3、–tab=path在path目录下,对每个表生成两个文件,如表a生成a.sql和a.txt,分别存储表的定义和表的内容。
注意在指定—tab参数时,使用的是select into outfile …因此对指定的用户权限要求更 ...
今天有同学问了一个关于注释的问题,顺藤摸瓜发现一个bug,简要说明下。
有关注释的一些QA
Q: MySQL注释有哪些格式
A:MySQL的注释格式有三种,分别是 /**/ -- 和 #。具体参见手册
Q:在一些导出文件中见过/*! xxx*/,是不是注释?
复现
来源于一个同事在做数据转储碰到的的问题,简化如下:
1、建表
drop table if exists tb;
CREATE TABLE tb (
c timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
insert into tb values(now());
select * from tb;
返回
mysql> select * from tb;
背景
这个问题由一个同事问到的一次导入数据引发。一个很常见的操作,将数据从一个表中dump出来,在用mysql < a.sql的方式导入到另一个库的一个表中。
在执行导入的时候,提示 MySQL server has gone away。在追查的时候突然想到会不会是因为max_allowed_packet太小导致的。将max_allowed_packet改大,确实解决了问题。
本文基于在此之后想到的两个问题:
1、 MySQL server has gone away这个提示很不友好,是不是所有的包超过大小都是报这个?
2、 对于出现这种不友好的错误提示,有什么方法定位原因( ...
Transfer 2.1发布,
下载地址: Tranfer-2.1-base-PS-5.5.18 md5sum: 9c8112ba9ca11f8e4a13b935e4bd7f77 最后更新日期 2013-4-23
配置模式作如下修改:
1、 若不增加任何配置,则默认是Slave模式。
默认值:
transfer_slave_thread = 16
slave_skip_errors=1062,1032
具体的说明见后面附的图片:
版本列表:
MySQL-PS-Transfer.5.5.18 md5:0479bbcb2743a722276a3435af1bbb8e 最后更新时间:2012-12-12
MySQL-PS-Transfer.5.5.27 md5:9a72849115de510fcbe87246e4ed9e11 最后更新时间:2012-12-12
MySQL-PS-Transfer.5.5.28 md5:534611800ed01cec1f9ba278277cb1e7 最后更新时间:2012-12-12
MySQL ...
背景
主从切换是高可用MySQL架构的必要步骤(即使用不发生,也要有备无患)。一般设置为双M(M1、M2),假设当前状态为写M1,而M2只读,切换的大致流程如下:
1、 停止应用写M1,将M1设置为只读2、 检查M2的slave status直到赶上M13、 将M1设置为可写
其中在第2步细化为a) 在M1上show master status;得到binlog位置P,因为已经设为只读,不会变化b) 循环检测M2上的执行位置,若未到P,则过几秒再查。循环直到从库追上。
这里介绍一个函数用于简化步骤b.
函数master_pos_wa ...
背景
MySQL中在对某个字段做包含匹配时可以用like。
先看这个结构和结果
CREATE TABLE `tb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL,
`title` varchar(128) NOT NULL,
`memo` varchar(2000) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `title` (`title`)
) ENGINE=InnoDB DEFA ...
MySQL-Transfer逐渐有一些其他公司的同学在使用,这里会持续更新运维上的注意事项。
背景
正常情况下,若要从原来的主从切换成Transfer 模式,只需要作如下步骤:
1、在slave相同机器上部署一个Transfer,并配置好各种remote_slave参数
2、在slave上stop slave
3、把
这篇文章来自在一个啾啾群纠结的问题。
背景
关于InnoDB内的索引大小。对于表
CREATE TABLE `testtb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i1` (`a`),
KEY `i2` (`a`,`id`),
KEY `i3` (`id`, ...
有同学问到InnoDB的索引长度问题,简单说几个tips。
关于3072
大家经常碰到InnoDB单列索引长度不能超过767bytes,实际上联合索引还有一个限制是3072。
mysql> CREATE TABLE `tb` (
-> `a` varchar(255) DEFAULT NULL,
-> `b` varchar(255) DEFAULT NULL,
-> `c` varchar(255) DEFAULT NULL,
-> `d` varchar( ...