February 6, 2017
MySQL数据库InnoDB存储引擎Log漫游系列
"MySQL数据库InnoDB存储引擎Log漫游(1) MySQL数据库InnoDB存储引擎Log漫游(2) MySQL数据库InnoDB存储引擎Log漫游(3) 以上转自 宋利兵 老师的公众号“MySQL代码研究”"
January 30, 2017
传统复制与 GTID复制的切换知识点
"在5.6以后,可以通过命令动态修改.\n注意有些命令是需要主从都要执行,有些命令是只在slave执行。\ngtid_mode 的几种状态值说明: OFF: 不产生 GTID, 基于 binlog+position,也不能接受GTID的日志。默认值 OFF_PERMISSIVE: 不生产 GTID,但作为slave可以识别GTID事务也可以识别非GTID事务 ON_PERMISSIVE: 产生GTID,slave可以处理GTID事务和非GTID事务 ON: 产生GTID事务,slave只接受GTID事务\n实验一:将传统复制切换到GTID复制\n启用GTID:\nset @@global.enforce_gtid_consitency=warn; set @@global.enforce_gtid_consistency=on; set @@global.gtid_mode=OFF_PERMISSIVE; #不产生gtid,但可以处理gtid set @@global.gtid_mode=ON_PERMISSIVE; #产生gtid,也可以处理gtid show status like …"
January 28, 2017
MySQL 5.7中的半同步复制
"在5.7下半同步是以插件的形式出现的,所以在启用半同步前要先安装半同步插件 semisync_master.so\nOn the master:\nINSTALL PLUGIN rpl_remi_sync_master SONAME \u0026#39;semisync_master.so\u0026#39;; On slave slave:\nINSTALL PLUGIN rpl_semi_sync_slave SONAME \u0026#39;semisync_slave.so\u0026#39;; 在my.cnf里配置,要写在mysqld段\nmaster:\n[mysqld] repl_semi_sync_master_enable=1 repl_semi_sync_master_timeout=1000 #1 second slave:\n[mysqld] repl_semi_sync_slave_enable=1 卸载插件:\nuninstall plugin rpl_semi_sync_master; # master uninstall plugin rpl_semi_sync_slave; # slave 在主上设 …"
January 28, 2017
MySQL5.7下多源复制知识要点(原创)
"架构为两主一从,两主为同一台服务器的多实例,安装方法请参考上篇文章 http://blog.haohtml.com/archives/17300。\n主master1 IP: 192.168.1.116 PORT: 3306 主master2 IP: 192.168.1.116 PORT: 3307 从slave IP: 192.168.1.200 PORT: 3306\n两主为全新安装。如果以前安装过的话,可以将原来的数据库删除掉,再执行 reset master 即可。(否则需要将两个主的想着库表使用 mysqldump到从中) my.cnf 配置\n[master1 3306] [client] port=3306 socket=/data/mysql/mysql3306/tmp/mysql.sock [mysqld] basedir=/data/mysql/mysql3306 datadir=/data/mysql/mysql3306/datadir #socket=/var/lib/mysql/mysql.sock …"
January 20, 2017
Innodb中Page结构
"一个存放记录(row)的page,由page header、page trailer、page body组成。如下图:2 page的完整结构\npage的结构详情参看如下:\nfrom: http://forge.mysql.com/wiki/MySQL_Internals_InnoDB#InnoDB_Page_Structure High-Altitude Picture\nThe chart below shows the three parts of a physical record.\nName****Size Field Start Offsets\n(F1) or (F2) bytes\nExtra Bytes\n6 bytes\nField Contents\ndepends on content\nLegend: The letter ‘F’ stands for ‘Number Of Fields’.\nThe meaning of the parts is as follows:\nThe FIELD START OFFSETS is a list of numbers …"
January 19, 2017
聚簇索引(clustered index )和非聚簇索引(secondary index)的区别
"这两个名字虽然都叫做索引,但这并不是一种单独的索引类型,而是一种数据存储方式。对于聚簇索引存储来说,行数据和主键B+树存储在一起,辅助键B+树只存储辅助键和主键,主键和非主键B+树几乎是两种类型的树。对于非聚簇索引存储来说,主键B+树在叶子节点存储指向真正数据行的指针,而非主键。\nInnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用”where id = 14″这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据。\nMyISM使用的是非聚簇索引,非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立的,通 …"
January 12, 2017
如何查询mysql事务未提交
"注意这篇文章并非死锁的,而是锁等待\n到information_schema库下面,查看下面这个表:\ninnodb_trx ## 当前运行的所有事务\ninnodb_locks ## 当前出现的锁\ninnodb_lock_waits ## 锁等待的对应关系\n如果遇到死锁了,怎么解决呢?找到原始的锁ID,然后KILL掉一直持有的那个线程就可以了, 但是众多线程,可怎么找到引起死锁的线程ID呢? MySQL 发展到现在,已经非常强大了,这个问题很好解决。 直接从数据字典连查找。\n我们来演示下。\n线程A,我们用来锁定某些记录,假设这个线程一直没提交,或者忘掉提交了。 那么就一直存在,但是数据里面显示的只是SLEEP状态。\nmysql\u0026gt; set @@autocommit=0;\nQuery OK, 0 rows affected (0.00 sec)\nmysql\u0026gt; use test;\nReading table information for completion oftableandcolumn names\nYou can turn off this feature to get a …"