h5在线编辑_秀堂h5_手机ui设计_答题类h5_h5测试小游戏
当前位置:建站首页 > 新闻资讯 > 常见问题 >

mysql pt

发表日期:2021-04-03 22:35文章编辑:jianzhan浏览次数: 标签:    

mysql pt-online-schema-change专用工具的应用方式 公布:smiling 来源于: PHP粉絲网 加上 访问: 评价:0

下边看来一个mysql pt-online-schema-change专用工具的应用方式,期待这一事例能协助到诸位同学们哦.

OSC是DBA较为了解的专用工具之一,也是PT的TOOLKIT里边最大数量级的专用工具,在mysql-5.6适用OLDDL之后,大部分分人将会觉着这一专用工具早已沒有实际意义了,实际上在一些独特自然环境下,这一专用工具還是很有效的.

本文除开详细介绍一般青年人怎样应用OSC,还会继续详细介绍一种文艺范应用OSC的方式,那么就是用于完成master到slave的数据信息差别修复.

现阶段InnoDB模块是根据下列流程来开展DDL的:

1 依照初始表(original_table)的表构造和DDL句子,在建一个不能见的临时性表tmp_table.

2 在原表上添write lock,堵塞全部升级实际操作(insert、delete、update等).

3 实行insert into tmp_table select * from original_table

4 rename original_table和tmp_table,最终drop original_table

5 释放出来 write lock。

大家能看见在InnoDB实行DDL的情况下,原表是只有读不可以写的,因此 perconal 发布一个专用工具 pt-online-schema-change,其特性是改动全过程中不容易导致读写能力堵塞.

工作中基本原理:假如表有外键约束,除非是应用 alter-foreign-keys-method 特定特殊的值,不然专用工具未予实行.

1 建立一个与你要实行 alter 实际操作的表一样的空表构造.

2 实行表构造改动,随后从原表格中的数据信息到copy到 表构造改动后的表.

3 在原表上建立开启器将 copy 数据信息的全过程中,在原表的升级实际操作 升级到新表.

留意:假如表格中早已界定了开启器这一专用工具也不能工作中了。

4 copy 进行之后,用rename table 新表替代原表,默认设置删掉原表.

使用方法详细介绍:pt-online-schema-change [OPTIONS] DSN,options 能够自主查询 help,DNS 给你要实际操作的数据信息库和表,这儿有2个主要参数必须详细介绍一下.

dry-run

这一主要参数不创建开启器,不复制数据信息,都不会更换原表。仅仅建立和变更新表。

execute

这一主要参数的功效和前边工作中基本原理的详细介绍的一样,会创建开启器,来确保全新变动的数据信息会危害至新表,留意:假如不用这一主要参数,这一专用工具会在实行一些查验倒退出.

依靠标准

1,实际操作的表务必有主键不然报以下不正确.


[;bin]# ./pt-online-schema-change -u root -h 10.250.7.50 -p yang --alter= add column vid int   --execute D=houyi,t=ga  Cannot connect to D=houyi,h=127.0.0.1,p=...,u=root  Cannot chunk the original table `houyi`.`ga`: There is no good index and the table is oversized. at ./pt-online-schema-change line 5353. -- 
[;bin]# ./pt-online-schema-change -u root -h 10.250.7.50 -p yang --alter= add column vid int   --execute D=houyi,t=ga  Cannot connect to D=houyi,h=127.0.0.1,p=...,u=root  Operation, tries, wait:   copy_rows, 10, 0.25   create_triggers, 10, 1   drop_triggers, 10, 1   swap_tables, 10, 1   update_foreign_keys, 10, 1  Altering `houyi`.`ga`...  Creating new table...  Created new table houyi._ga_new OK.  Altering new table...  Altered `houyi`.`_ga_new` OK.  Creating triggers...  Created triggers OK.  Copying approximately 746279 rows...  Copied rows OK.  Swapping tables...  Swapped original and new tables OK.  Dropping old table...  Dropped old table `houyi`.`_ga_old` OK.  Dropping triggers...  Dropped triggers OK.  Successfully altered `houyi`.`ga`. 
[;bin]# ./pt-online-schema-change -u root -h 10.250.7.50 -p yang --alter= add key indx_vid(vid)   --execute D=houyi,t=ga 
[;bin]# ./pt-online-schema-change -u root -h 10.250.7.50 -p yang --alter= drop column vid   --execute D=houyi,t=ga 

说白了的文艺使用方法,便是根据OSC完成slave和master数据信息差别情况下的修复.有些人说,这一是pt-table-sync该几件事情.可是在表数据信息差别很大的情况下,应用OSC将会高效率更强,并且更为简易靠谱.

OSC怎样完成master到slave的数据信息差别修复的?

因为OSC的基本原理是在建表和应用开启器.随后把原表的数据信息insert into select from的方法导进新表.假如这一情况下,大家把binlog改为row文件格式.那麼insert into纪录的毫无疑问是源表的数据信息了.开启器在row文件格式的情况下,也是在系统日志中纪录的源表数据信息.换句话说,根据OSC能够逻辑性的,畅通无阻塞的把源表的数据信息同歩到全部slave.

pt-online-schema-change set-vars binlog_format=ROW alter engine=INNODB D=test,t=tt1,h=localhost execute

假如你原本就工作中在row文件格式下,那麼 set-vars binlog_format=ROW 便可以不设定了.

详尽基本原理解剖学,转自ytjwt/item/7ea9c637c29079f6e6bb7a0d

pt-online-schema-change线上变更表构造的完成关键有以下好多个全过程:

注:在跟改了程中涉及到到三个表:原表、tmp_table即做为原表导数据信息的临时性表,old_table在最终rename 原表的結果表.

1、CREATE TABLE `$db`.`$tmp_tbl` LIKE`$db`.`$tbl` 在建tmp_table,表构造同原表

2、在tmp_table上变更表构造为必须的表构造

3、在原表上创建三个开启器,以下:


(1)CREATETRIGGER mk_osc_del AFTER DELETE ON $table    FOR EACH ROW    (1)CREATETRIGGER mk_osc_del AFTER DELETE ON $table    FOR EACH ROW    DELETE IGNORE FROM $new_table  WHERE$new_table.$chunk_column = OLD.$chunk_column   (2)CREATETRIGGER mk_osc_ins AFTER INSERT ON $table    FOR EACH ROW    REPLACEINTO $new_table ($columns)    VALUES($new_values)   (3)CREATETRIGGER mk_osc_upd AFTER UPDATE ON $table    FOR EACH ROW    REPLACE INTO $new_table ($columns)  VALUES ($new_values)  

大家能看到这三个开启器各自相匹配于INSERT、UPDATE、DELETE三种实际操作:

(1)mk_osc_del,DELETE实际操作,大家留意到DELETEIGNORE,当新了解据时,大家才开展实际操作,换句话说,当在事后导进全过程中,假如删掉的这一数据信息还未导进到新表,那麼大家能够没有新表实行实际操作,由于在之后的导进全过程中,原表格中转业数据信息早已删掉除,早已沒有数据信息,那麼他也也不会导进到新表格中;

(2)mk_osc_ins,INSERT实际操作,全部的INSERT INTO所有变换为REPLACEINTO,以便保证数据信息的一致性,当有新数据信息插进到原表时,假如开启器还未把原表数据信息未同歩到新表,这总数据早已被导进到新表了,那麼大家便可以运用replaceinto开展遮盖,那样数据信息也是一致的

(3)mk_osc_upd UPDATE实际操作,全部的UPDATE也变换为REPLACEINTO,由于当跟新的数据信息的行还未同歩到新表时,新表不是存有这条纪录的,那麼大家就只有插进此条数据信息,假如早已同歩到新表了,那麼还可以开展遮盖插进,全部数据信息与原表也是一致的;

大家也可以看得出所述的精粹也就这这几个replaceinto实际操作,更是由于这几个replaceinto才可以确保数据信息的一致性

4、复制原表数据信息到临时性表格中,在脚本制作中应用以下句子.

INSERT IGNORE INTO $to_table ($columns) SELECT $columns FROM $from_table WHERE ($chunks- [$chunkno]) ,大家可以看到他是根据一些查寻(基本主导键、唯一键值)分次把数据信息导进到新的表格中,在导进前,大家能根据主要参数 chunk-size对每一次导进行数开展操纵,已降低对原表的锁住時间,而且在导进时,大家能根据 sleep主要参数操纵,在每一个chunk导进后与下一次chunk导进刚开始前sleep一会,sleep時间越长,针对硬盘IO的冲击性就会越小

5、Rename 原表到old表格中,在把临时性表Rename为原表, RENAME TABLE `$db`.`$tmp_tbl`TO `$db`.`$tbl` 在rename全过程,实际上大家還是会造成载入载入阻塞的,因此严治格含意上说,大家的OSC都不是对网上自然环境沒有一点危害,但因为rename实际操作仅仅一个改动姓名的全过程,也总是改动一些表的信息内容,基原是一瞬间完毕,故对网上危害不很大.

6、清除之上全过程中的已不应用的数据信息,如OLD表.


php实例教程网——出示php实例教程免费下载資源  Powered by php粉絲网 2010-2015  网站协作
相关新闻

PHP+MySQL完成简易留言板留言板作用

PHP+MySQL完成简易留言板留言板作用公布:smiling 来源于: PHP粉絲网 加上 访问: 评价:0 根据php+...

日期:2021-04-03 浏览次数:140

网站制作制作全过程中MySQL导出来csv文件格式件,

当今部位 : 东莞市网站制作 新闻资讯 网站建设 网站制作制作全过程中MySQL导出来csv文件格式件...

日期:2021-04-01 浏览次数:102

MySQL 怎么让一个字段的值不能被减为负数

在这里种情景下,物件的总数不是能为负数的。那怎样保证在扣除这一总数的情况下,不容易...

日期:2020-11-30 浏览次数:72

MySQL数据信息库备份数据、转移及对外开放远程控

MySQL数据信息库备份数据、转移及对外开放远程控制浏览3306端口号公布:smiling 来源于: PHP粉絲...

日期:2020-08-17 浏览次数:66