分类目录归档:DB

MySQL Limit用法笔记

最近用低代码平台amis, 2天搭了一个审核系统,为了快点看到效果,没有使用框架的ORM,直接写SQL,结果分页展示数据,总数比展示数据多一条,原因是在MySQL Limit上翻车了。特别震惊,工作这么多年了,自己真的不知道limit的用法。
继续阅读

MySQL主从同步原理笔记

上篇文章分析了MySQL主从同步的配置,傻瓜式的配置还是相对容易的。知道怎么配,还需要知道这么配的运行原理。也就是我们常说的知其然,知其所以然。

一、原理分析
主从同步也叫主从复制。同步原理
0、主服务器(master)把数据更改记录到二进制日志(binlog)中。
1、从服务器(slave)连接主服务器,master会为每个slave开启单独的binlog dump thread。

mysql>change master to master_host='10.235.25.242',master_user='mysql',master_password='123456',master_log_file='mysql-bin.000147',master_log_pos=98;

2、从库上启动I/O线程和SQL线程。

mysql>start slave;

3、master上的binlog dump thread发送binlog, slave上的I/O线程接收binlog后写入中继日志(relay log)。【这里master和slave建立的是TCP连接,很多资料表明是binlog dump thread发送到slave, slave I/O线程读取,我理解一端发送,一段接收】
4、slave上的SQL线程读取relay log, 写入从库。
继续阅读

MySQL主从同步配置笔记

MySQL单机安装和配置,这里就不展开了。感兴趣的同学可以参考我之前的文章《MySQL-8.0.11源码编译安装

实际生产环境往往是单库运行一段时间后,增加的从库,需要考虑历史数据同步问题。这里是在测试环境搭建的,不考虑历史数据问题。直接在两台数据库服务器上创建两个新库niliu, 然后演示同步。

主:10.235.25.242 【CentOS release 6.5】 【MySQl 5.0.77】
从:10.235.25.241 【CentOS release 6.9】 【MySQl 5.0.77】

说明:以下配置为了简洁方便,含义特放在第五部分说明。
继续阅读

B+树学习笔记

不知道你有没有这样的困惑,B+树的资料看了很多,依旧对B+树没有一个具象的认识。我也是这么走过来的,所以希望这篇笔记能帮到你。

一、演化阶段
你或许知道,或许不知道。B+树是由二叉树不断演化过来的。
大致的演化路线如下:
二叉查找树 -> 平衡二叉树 -> B树 -> B+树。

为了说清楚B+说,我们很有必要搞清楚演化过程中每个阶段的特点。
继续阅读

MySQL唯一索引添加和用法

一、唯一索引添加与变更
0、建表加唯一索引ukey_o_d_t,使用关键字unique key(如果只是单列唯一索引,可以在字段后加unique, 如topic):

CREATE TABLE `tv_episode_checkin_summary_log` (
  `id` int(11) unsigned NOT NULL auto_increment COMMENT '自增ID',
  `oid` varchar(128) NOT NULL default '0' COMMENT '选项ID',
  `topic` varchar(256) NOT NULL default '' unique COMMENT '话题词',
  `num` int(11) unsigned NOT NULL default '0' COMMENT '数量',
  `type` varchar(2) NOT NULL default '' COMMENT '类型: 1、小时数;2、天数',
  `dtime` bigint(11) unsigned NOT NULL default '0' COMMENT '数据汇总时间',
  `ctime` bigint(11) unsigned NOT NULL default '0' COMMENT '创建时间',
  `mtime` bigint(11) unsigned NOT NULL default '0' COMMENT '修改时间',
  `ext` varchar(64) NOT NULL default '' COMMENT '扩展字段',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `ukey_o_d_t` (`oid`,`dtime`,`type`),
  KEY `key_t_d_t` (`topic`(255),`dtime`,`type`),
  KEY `key_o_d_t` (`oid`,`dtime`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='打卡汇总数据表'

继续阅读

线上MySQL数据库迁移的一个方案

起因,线上数据库版本5.5.12比较低,升级到5.7.8支持json。

需要对线上正在使用的数据库做迁移,很少遇到这样的情况,考虑到没有长连接, 开始想到的方案很简单:
0、新建一个MySQL主从库
1、旧主单向往新主实时同步(毫秒级),新主不往旧主同步。
2、切换连DB的读账号信息,观察读是否正常。
3、切换连DB的写账号信息。
4、观察一段时间,旧库没有新写入内容即可断开往新主的同步。
继续阅读