开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共2240人左右 1 + 2 + 3 + 4 +5) 新人奖直接分配到6群 5群430 停止自由申请
MySQL MySQL 怎么那么烦人,好用,好用个屁。用过数据库吗说好用,加个索引都那么的费劲。说到这里我很想用宋丹丹老师那句,怎么那么烦人来结束此篇文章,在给MYSQL一个大白眼,和SQL SERVER ORACLE 比不了,和 PG也比不了,人家仨都有在线索引的技术,虽然SQL SERVER 黑,必须买企业版,但人家有。MySQL 呵呵
为了大表加索引的事情,可让MySQL的使用者们操心,gh-ost 是一种针对MySQL 在线加索引的一种可实现的方案,对比PT-OSC工具他最好的部分在于没有对于原表有相关的变化,通过二进制流的方式来捕获对于表的更改,异步的应用到虚拟表中,在将数据追齐的情况下,切换虚拟表和实体表之间的方案。
同时从GA 上来看 GH-OST 软件本身已经踢出了 MYSQL5.5. 和 MYSQL5.6的支持,目前最新版本仅仅支持 MYSQL 5.7 和8.0 的MYSQL数据库。
首选需要确认的是,gh-ost 对于在线添加索引是可以满足这个需求的,他主要的工作步骤也是监听BINLOG ,讲BINLOG 中与这个表作用的DML 进行重放,重放到新建的临时表中,临时表已经将索引建立好,在全量同步数据后,就将增量的数据也写入到临时表,当发现业务不繁忙的时候,将针对这个表进行切换,将临时表切换成正式表。
这里我们用一个事例来验证这个事情,以及会遇到的问题
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
delimiter $$
DROP PROCEDURE IF EXISTS proc_batch_insert;
CREATE PROCEDURE proc_batch_insert()
BEGIN
DECLARE pre_name BIGINT;
DECLARE ageVal INT;
DECLARE i INT;
SET pre_name=187635267;
SET ageVal=100;
SET i=1;
WHILE i