当前位置: 澳门新濠3559 > 数据库 > 正文

    PERCONA提供了若干管理维护MySQL的小工具,【

时间:2019-11-16 22:36来源:数据库
      参考:     在MySQL5.6本子以前,最值钱的数据库操作之风度翩翩便是执行多少定义语言(DDL,比如CREATE,DROP,ALTERAV4等卡塔 尔(英语:State of Qatar)语句,特别是ALTEKuga语句,因

 

 

 

参考:



 

 

在MySQL 5.6本子以前,最值钱的数据库操作之风度翩翩便是执行多少定义语言(DDL,比如CREATE,DROP,ALTERAV4等卡塔 尔(英语:State of Qatar)语句,特别是ALTEKuga语句,因为在修改表时,MySQL会堵塞整个表的读写操作。

    假设转载,请证明博文来源: www.cnblogs.com/xinysu/   ,版权归 腾讯网 苏家小萝卜 全体。望各位扶持!

对此伟大的表,也许需求多少个小时能力形成表的DDL,如此势必会影响应用程序,因而须要对那个操作实行完美的规划,以制止在尖峰时段开展这么些改换。对于那些有万能服务(24*7卡塔 尔(英语:State of Qatar)或有限维护时间的人的话,大表上的DDL是一场真正的梦魇。

  

Percona开拓了二个相当好的工具,称为 pt-online-schema-change,在线执行此类操作,而不会卡住或影响应用程序,且允许对正在更换的表实行读/写操作。


MySQL也对DDL语句实行了有些抓牢,并在MySQL 5.6中引进了在线DDL成效。


 

 

PT-ONLINE-SCHEMA-CHANGE

OVERVIEW

pt-osc 用于 alter table 时不锁表,简单地说,那一个工具创立贰个与原始表相似的新的空表,并基于需求校正表结构,然后将原始表中的数据以小块格局复制到新表中,然后删除原始表,然后将新表重命名称叫原始名称。在复制进程中,对原始表的具备新的改进(insert,delete,update卡塔 尔(英语:State of Qatar)都将使用于新表,因为在原始表上创办了八个触发器,以保证全部新的改良都将利用于新表。有关 pt-online-schema-change 工具的更加多新闻,请查阅手册文书档案 。大概的干活流程总括如下:

pt-osc工作进度

  1. 开创二个和要实行 alter 操作的表同样的新的空表结构(是alter在此以前的构造)
  2. 在新表实践alter table 语句(速度应该赶快卡塔 尔(英语:State of Qatar)
  3. 在原表中创制触发器3个触发器分别对应insert,update,delete操作
  4. 以一定块大小从原表拷贝数据到一时表,拷贝进程中通过原表上的触发器在原表实行的写操作都会更新到新建的不时表
  5. Rename 原表到old表中,在把一时表Rename为原表
  6. 譬如有参照该表的外键,依照alter-foreign-keys-method参数的值,检验外键相关的表,做相应设置的拍卖
  7. 默许最终将旧原表删除

EXAMPLE

给表 test.test1 的 name 字段加多个索引 name_idx (上边包车型地铁输出完整的陈说了该工具在后台实施的兼具手续卡塔 尔(英语:State of Qatar):

[root@gcservera ~]# pt-online-schema-change --execute --alter "add index name_idx (name)" D=test,t=test1,h=localhost

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 `test`.`test1`...
Creating new table...
Created new table test._test1_new OK.
Altering new table...
Altered `test`.`_test1_new` OK.
2014-02-09T15:33:27 Creating triggers...
2014-02-09T15:33:27 Created triggers OK.
2014-02-09T15:33:27 Copying approximately 1 rows...
2014-02-09T15:33:27 Copied rows OK.
2014-02-09T15:33:27 Swapping tables...
2014-02-09T15:33:27 Swapped original and new tables OK.
2014-02-09T15:33:27 Dropping old table...
2014-02-09T15:33:27 Dropped old table `test`.`_test1_old` OK.
2014-02-09T15:33:27 Dropping triggers...
2014-02-09T15:33:27 Dropped triggers OK.
Successfully altered `test`.`test1`.

 

PT-ONLINE-SCHEMA-CHANGE 的局限性

  • 在使用此工具在此之前,应该为表定义P大切诺基IMAPRADOY KEY或唯一索引,因为它是DELETE触发器所不可缺少的;
  • 风度翩翩经表已经定义了触发器,则不支持 pt-osc ;
  • 若是表具备外键约束,须求使用选取 --alter-foreign-keys-method ;
  • 要么因为外键,对象名称也许会变动(indexes names 等卡塔 尔(英语:State of Qatar);
  • 在Galera集群境况中,不援救改过MyISAM表,系统变量 wsrep_OSU_method 必得安装为 TOI(total order isolation卡塔 尔(英语:State of Qatar)。

 

    PERCONA提供了相当多关押保护MySQL的小工具,集成在 PERCONA Toolkit工具中,有慢查询解析、主从差距相比较、主从差别修复及在线表结构改过等工具,个人感觉蛮好用的。本文简单介绍pt-online-schema-change 工具。

ONLINE DDL

OVERVIEW

在MySQL 5.6中,引进了在线 DDL方法,以便访问和写入正在更改的表。在线DDL语法与钦命两个参数后的健康 alter语句完全相似:

ALGORITHM:

  • INPLACE: 表的转移将要原表进行,而不用重城建总公司体表格(在大部情景下,无需将数据复制到有时表卡塔尔
  • COPY: 将数据复制到有的时候表中,重新创建表格玉石俱焚建二级索引(约等于古板方法卡塔 尔(英语:State of Qatar)

LOCK:

  • NONE: Read and write operations are allowed during the altering process.
  • SHARED: Only read operations are allowed during the altering operations (DML is not allowed).
  • EXCLUSIVE: The entire table will be locked for both reading and writing (neither select nor DML are allowed).

Online DDL 在手册文书档案中有详细表明,您能够在这里翻开更加多消息。

 

EXAMPLE

给表 test.test2 的 name 字段加二个索引 name_idx 

mysql> alter table test2
    -> add index name_idx (name),algorithm=inplace, lock=none;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

LIMITATIONS OF ONLINE DDL

  • 仅适用于InnoDB(语法上它能够与其余部存款和储蓄器储引擎一同利用,如MyISAM,但MyISAM只允许algorithm = copy,与古板艺术相符卡塔尔国;
  • 无论使用何种锁(NONE,共享或排它卡塔尔国,在始发和终止时都供给二个短暂的岁月来锁表(排它锁卡塔尔国;
  • 在增加/删除却键时,应该剥夺 foreign_key_checks 以免止表复制;
  • 长期以来有一点 alter 操作须求 copy 或 lock 表(老方法卡塔尔国, 有关怎么着表纠正必要表复制或表锁定,请查看手册;
  • 设若在表上有 ON ... CASCADE 或 ON ... SET NULL 节制,则在 alter table 语句中不一致敬LOCK = NONE;
  • Online DDL 会被复制到从库(同主库一样,如若 LOCK = NONE,从库也不会加锁卡塔 尔(阿拉伯语:قطر‎,但复制本人将被堵住,因为 alter 在从库以单线程施行,这将产生基本延迟难点。

 

    前篇博文: ,解说过5.6引进的 Online DDL,在5.7版本已较成熟,但毕竟那是5.6版本后才支撑,早前版本没有这特色加持,所以本文轻松说下pt-online-schema-change工具,名字好长,产业界奇迹取首字母简单的称呼它为pt-osc,在运用5.6版本以前的版本只怕DDL不适用Online DDL的时候(举例修改数据类型),你能够测验后权衡是还是不是使用该工具来实践DDL SQL,pt-online-schema-change能够在实践ALTE牧马人语句中,不拥塞数据库表格的写操作。

COMPARISON RESULTS

下图是 Online DDL 和 PT-OSC 的有个别操作的可比,表有 1,078,880 行。

澳门新濠3559 1

 

1 原理介绍

    报表必得含有主键只怕独一索引!!

    假诺现存tbosc要求做ALTEPAJERO操作,使用pt-online-schema-change的时候,依据tbddl表结构及索引意况,成立二个新的空表_tbosc_new,然后从原有表格 tbosc 中拷贝数据到新的表格 _tbosc_new,copy data结束后,使用_tbosc_new替换tbddl,同不时候,删除旧表。

 

     轻松流程如上汇报,那么详细流程是什么样的呢?

 

     带着那多少个难点来打听:

  • ALTE大切诺基操作时期,表格是不是扶助DML?
  • 若果援救DML,是哪些把DML同步到新的不时表上?
  • 全套操作流程锁意况是怎么的?
  • 施行时期有何性质影响?
  • 该工具备何等范围意况?

WHICH METHOD SHOULD BE USED?

尽管pt-online-schema-change允许对被退换的表展开读写操作,但它照旧将表数据复制到后台的临时表中,那会在MySQL服务器上增添开销。 所以基本上,如果Online

1.1 详细实践流程

    怎么着查看其详细的实行流程呢?数据库开启general log,然后实践pt-online-schema-change,它对数据库的兼具操作,就都显示在近日。

 

     详见执行流程如下:

  1. 相关口边情形参数检查
  2. 检查该表格是还是不是留存
  3. show create table tbosc
  4. create table _tbosc_new
  5. alter table _tbosc_new 
  6. 始建删除触发器 pt_osc_dbddl_tbosc_del (假使数额修正的时候,还没曾拷贝过来,校订后再拷贝则是覆盖,准确;假设是早已拷贝过来,再纠正,也是不错,这里还要会检讨是还是不是具备主键也许独一索引,借使都不曾,这一步会报错,提示The new table `dbosc`.`_tbosc_new` does not have a PRIMARY KEY or a unique index which is required for the DELETE trigger.)
  7. 制造立异触发器 pt_osc_dbddl_tbosc_upd
  8. 成立插入触发器 pt_osc_dbddl_tbosc_ins
  9. 按块拷贝数据到新表,拷贝进度对数码行持有S锁
  10. analyze 新表
  11. rename 表名,RENAME TABLE `dbddl`.`tbosc` TO `dbddl`.`_tbosc_old`, `dbddl`.`_tbosc_new` TO `dbddl`.`tbosc`
  12. 除去旧表
  13. 删除新表上的删除、更新、插入 触发器

DDL不可能有效地劳作,我们才应该采纳pt-online-schema-change。换句话说,借使在线DDL需求将数据复制到有的时候表(algorithm=copy卡塔 尔(英语:State of Qatar),而且该表将被窒碍不长风度翩翩段时间(lock

exclusive卡塔 尔(阿拉伯语:قطر‎也许在复制景况中改换大表时,则应当利用 pt-online-schema-change 工具。

 

1.2 难点解答

   依照其实践流程,可以对一同先的咨询一 一来解答。

  • ALTECR-V操作时期,表格是或不是支持DML?
    • ALTEPRADO进程使用Copy Table To New Table的艺术,新建叁个报表,然后在原表上创建3个触发器:DELETEUPDATEINSERT触发器,豆蔻梢头旦新表,拷贝数据到新表的历程中,如若原表数据产生变化,则会由此触发器更新到新表上。
    • 若果扶持DML,是何等把DML同步到新的临时表上?
    • ALTE中华V进度使用Copy Table To New Table的方法,新建八个报表,然后在原表上开创3个触发器:DELETEUPDATEINSERT触发器,风流浪漫旦新表,拷贝数据到新表的经过中,借使原表数据产生变化,则会经过触发器更新到新表上。
    • INSERT原表的时候,触发器依照其主键ID把新记录INSERT到新表上;
    • UPDATE原表的时候,触发器依照其主键ID决断新旧ID是还是不是相似,假诺同样则删除,然后在REPLACE INTO新记录到新表
    • DELETE原表的时候,触发器依据其主键ID直接删除行记录
    • 假如数量校订的时候,还向来不拷贝到新表,修正后再拷贝,即使重新覆盖,不过数量也从未出错;借使是多少现已拷贝,原表发生改过,这个时候触发器同步改良数据,二种情景下都有限支撑了数量的意气风发致性;
  • 全体操作流程锁境况是何等的?
    • 成立新表后,根据每一个chunk的轻重拷贝数据到新表,每一回SELECT都是share mode,带S锁,不过各样chunk都相当的小,所以锁时间比十分的小
    • 最终数据拷贝甘休,会有三个rename操作,那些操作进程中,是不扶持DML操作的,但其速度迅猛,不会招致长日子锁表情形
    • 该工具会安装该DDL操作的锁等待超时为1s,当现身非凡的时候,会是ALTEEnclave操作卓殊,并不是其它业务操作特别,那样能够最大程度的不影响此外工作的进行
  • 实践时期有哪些性质影响?
    • 总体来说,对数据库的锁影响减低到了小小,推行时期允许DML操作
    • 只是注意,其余DDL SQL在这里地,都是转变来copy table to new table的花样,这几个进程中,会非常大占用磁盘的IO跟CPU财富,同一时间跟住从延时带给一定的震慑,依然这句老话,重新了然DDL的影响程度后,再选取妥当时机推行。
    • copy data进程中,假使基本延迟格外当先 max-lag则结束copy data,等待主从延迟恢复生机,默以为1min,可以因而--max-lag设置
    • 检查实验到服务器负荷非凡,也会告后生可畏段落操作,能够由此--max-load,--critical-load设置
  • 该工具有哪些范围意况?
    • 报表必须带有主键或许独一索引
    • 留存复制过滤掉表格,ALTEPRADO操作
    • copy data进度中,假设基本延迟极度超过 max-lag则甘休copy data,等待主从延迟苏醒,默以为1s,能够经过--max-lag设置
    • 检查测试到服务器负荷格外,也会终止操作,能够经过 --max-load,--critical-load设置
    • 设置操作的锁等待超时为1s,当出现卓殊的时候,ALTE途观操作万分,并不是任何业务操作特别,那样能够最大程度的不影响别的工作的进展
    • 私下认可情形下,存在 被外键引用的表格是不接济ALTEHighlander操作的,除非手动钦命参数--alter-foreign-keys-method
    • 不帮忙校正 Percona XtraDB Cluster (PXC卡塔尔国上节点的 myisam表格

2 情状盘算

    工具包下载网页:  (最近新型版本为3.0.2卡塔 尔(阿拉伯语:قطر‎

   rpm下载地址:

   官方使用验证文书档案地址: 

   情状设置信任项目: Perl, DBI, DBD::mysql

 

   安装特简单,在装置好不非亲非故系的条件注重项后,试行rpm安装就可以

   rpm -ivh percona-toolkit-3.0.2-1.el7.x86_64.rpm

3 语法表达

3.1 首要选拔

  • --alter
    • 指定ALTER 语句,正常的ALTER TABLE TBNAME [ ADD | MODIFY | DROP | ALTER ] COLUMN COLUMN_NAME ...,去除前边的ALTE福特Explorer TABLE TABLE那么,直接钦命后有的的剧情
    • 注意事项
      • rename不支持,请直接动用RENAME TABLE tablename TO new_tablename;
      • 若是表格有数量,创制非空无默许值的列,会停业,如若非空,供给钦定私下认可值;
      • 假定表格有数据,为三个可空的列增多默许值时,旧数据为NULL的是不会被更改,依然为NULL,以往新参加到数码则会默以为设置的暗许值
      • 对别的键的删除情况,由于试行是在新表上举办DDL,所以其外键值的命名跟原表的命名分化等,即便删除原表的外键名是 fk_foo,那么新表的外键名就为 _fk_foo,所以删除的ALTEWrangler语句是: drop foreign key _fk_foo;
  • --alter-foreign-keys-method
    • 如果改动的表格,是任何表万分键reference的表格,那么,最终rename的进度,必要确认保证一定成功,要不然这么些子表就未能成功reference到其钦点的表格名,对子表的操作将会报错。比方tba有叁个外键 fk_tba引用表格 tbb,此时tbb需求做DDL操作,根据pt工具的原理得悉,最终会有多个rename环节,那几个环节恐怕会形成约束失效只怕试行拥塞等主题素材。
    • 进而,针对最终rename的那么些环节,该工具提供了4中管理办法:
      • auto
        • 自行选拔 rebuild_constraints 或者 drop_swap,优先选项rebuild_constraints
        • rebuild_constraints
        • rename table 前,先去除子表的外键约束,然后重新建立国门外键限制指向到新表(ALTER TABLE语句增多卡塔尔国,最终实施rename操作
        • 那么些rename操作固然不成事,它也rename到新表,不会合世reference的表格空中楼阁意况
        • 弊病:借使子表过大,增添外键节制的历程中,或然会对子表形成拥塞
      • drop_swap
        • 执行rename之前剥夺外键检查,然后删除原表,rename新表为原表名
        • 这么些历程足够快况兼未有拥塞
        • 本条点子须求强制钦点 --no-swap-tables 跟 --no-drop-old-table.
        • 坏处:当把原表删除而新表还未有rename为原表的名字时,前段时间实在相当的短,可是这段时光内,等于原表名的报表时不设有的,子表做一些DML的时候,大概会现身谬误。rename时期,要是新表rename原表战败,但是已经删除原表,那么这段中间,其子表的操作将会并发大规模难点,直到人工修复
      • none
        • 类似drop_swap操作,区别在于对原表的拍卖。
        • 按符合规律的pt工具流程,禁用外键限制,rename原表为有时表,rename新表为原表名,删除一时表
        • 坏处: 当把原表rename为临时表,而新表还未rename为原表的名字时,近期莫过于比超短,不过前段时间内,等于原表名的报表时不设有的,子表做一些DML的时候,大概会情不自禁错误
      • --drop-old-table
        • 操作成功后,原表是或不是保留,默许是去除,
        • default:yes,可选:--no-drop-old-table
  • --dry-run
    • 仅创设新表格,可是不推行触发器、拷贝数据跟替换原表
  • --execute
    • 规定施行ALTE本田UR-V操作,注意,这些操作借使不钦赐,则仅做安检然后推出。
    • 丰硕精通工具的使用状态后,才试行,不要啥都不明白测量试验就线上实行,会挖坑的...
  • --host
    • 连年主机名
  • --max-lag
    • 默认1s
    • 自己讨论从库延迟的年月,即便超越,则截至copy data,安歇--check-interval秒后,再重复早先copy数据
    • 翻看通过延迟时间,是因而从库show slave status,查看Seconds_Behind_Master
    • 假使钦命--check-slave-lag,该工具只检查该服务器的推移,并非持有服务器。
  • --check-interval
    • 从库延迟抢先钦点的--max-lag,中断copy data小憩的岁月
    • 默认为1s
  • --max-load
    • copy data的长河,监控数据库当前正在运作的thread,倘若超越钦点的Threads_running值,则结束拷贝数据,会在输出的开始和结果中许诺 Pausing because Threads_runing=15,直到运转的线程数稍差于给定的值,苏醒copy data,如此周而复始,知道拷贝数据结束。
    • Threads_runing默认为25
    • 举例:--max-load=Thread_running=15
  • --password
    • 数据库客户名的密码
  • --port
    • 数量库端口号
  • --socket
    • 数据库socket文件
  • --user
    • 数据库客户名
  • --recursion-method
    • MASTE奥迪Q3寻觅SLAVE的艺术(那几个选项基本在涉及基本难题的pt工具浙江中国广播集团泛应用到卡塔尔
    • 有4个选项
      • 澳门新濠3559 2
    • processlist,使用show processlist查找从库
    • hosts,借使不是行使默许端口号3306,那么使用hosts情势来索求从库会更保证
    • dsn,使用表格 tdsn存款和储蓄从库消息(DSN的切实可行参数选项能够详细查看 3.3 DSN选线卡塔 尔(阿拉伯语:قطر‎
      • 急需手动在急需DDL的数据库内,创立 dsns 表格
      • CREATE TABLE `dsns` (`id` int(11) NOT NULL AUTO_INCREMENT,`parent_id` int(11) DEFAULT NULL,`dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`));
      • 仓库储存从库音信
      • insert into dsns(dsn) values(h=slave_host,u=repl_user,p=repl_password,P=port );
      • 该参数使用的时候,按以下格式(借使 dsns表格建立在数据库 dbosc卡塔 尔(阿拉伯语:قطر‎
      • --recursion-method dsn=D=dbosc,t=dsns
    • none,不查找从库

3.2 输出 

  • --statistics 扩展影响行数打字与印刷,能够查阅copy进程
  • --print 详细打字与印刷alter进度,不钦定的时候,简略打字与印刷

3.3 DSN选项

  • A
    • 字符集设置
  • D
    • 须求Alter的表格是在哪个数据库,钦点数据库
  • F
    • mysql read default file,假使数据源的连锁选项存款和储蓄在文件中,则透过 F 来钦点
  • h
    • host,数据库主机名或IP
  • p
    • password,数据库顾客的密码
  • P
    • port,数据库实例端口号
  • S
    • socket,实例socket文件
  • t
    • 表格名
  • u
    • 用户名

4 使用比如

4.1 常规DDL

    常规状态,如若有被外键引用的表格,注意对--alter-foreign-keys-method的安装,本小节不构思从库延迟意况及外键景况。

    pt-online-schema-change也协助同个表格的五个SQL归总为二个SQL,由于负有DDL都以使用COPY TABLE TO NEW TABLE格局,所以选择的时候,无需对DDL SQL做分类。

 

 1 CREATE TABLE `tbosc` (
 2   `id` int(11) NOT NULL AUTO_INCREMENT,
 3   `name` varchar(100) DEFAULT NULL,
 4   `age` int(11) DEFAULT NULL,
 5   PRIMARY KEY (`id`)
 6 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
 7  
 8 #添加列
 9 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "add column stunum int "  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute
10  
11 #删除列
12 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "drop column stunum "  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute
13  
14 #修改列数据类型
15 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "modify column age varchar(10)"  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute
16  
17 #加大列长度
18 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "modify column age varchar(100)"  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute
19  
20 #创建索引
21 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "ADD INDEX IX_AGE(AGE)"  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute
22  
23 #删除索引
24 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "DROP INDEX IX_AGE"  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute
25  
26 #设置默认值
27 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "ALTER column age SET DEFAULT 100"  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute
28  
29 #能否多个合成一个
30 pt-online-schema-change --socket=/tmp/mysql3310.sock --user=root --password=****  D=dbosc,t=tbosc --alter "ADD COLUMN onecol int ,add column twocol varchar(100),add index ix_onecol(onecol),alter column name set default 'xinysu' "  --recursion-method=none --no-check-replication-filters --alter-foreign-keys-method auto --print --execute

4.2 考虑从库延迟处境

    考虑从库延迟景况 ,意味那要小心那多少个选项的安装

  • --max-lag
  • --check-interval
  • --recursion-method
  • --check-slave-lag

    从库延迟超越max-lag则结束copy data,等待 check-interval 秒后再开首copy data。check-slave-lag钦命slave的机械,只会相比那台slave的延期情形。recursion-method是主库寻觅从库的秘籍,有七个方法:processlist,hosts,dsn,none,具体查看上部分选项详细表明,本节详细描述dsn及check-slave-lag的运用。

 

     假使须要在dbosc库上的报表tbddl加多一列:hobby varchar(100) ,要求盘算从库的推迟情形

#创造表格dsns,记录从库音信

CREATE TABLE `dsns` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `parent_id` int(11) DEFAULT NULL,

  `dsn` varchar(255) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

 

#insert从库音讯,有2个从库,分别为242服务器上的 3310跟3320

insert into dsns(dsn) select "h=192.168.9.244,u=repl,p=****,P=3310";

insert into dsns(dsn) select "h=192.168.9.244,u=repl,p=****,P=3320";

 

    举例须要思索八个从库的推移处境,则足以杜撰使用 dsns表格来记录从库音信,要是只需求构思某生机勃勃台从库的延迟情况,则不仅可以够利用dsns表格也足以选用参数--check-slave-lag内定从库。

 

    不思忖外键关系,酌量从库影响程度,检查到从库延迟超越1s,则小憩5s,具体指令如下

 

pt-online-schema-change -P3310 --user=root --password=****  D=dbosc,t=tbddl --max-lag=1s --check-interval=10s --alter "ADD hobby varchar(100) NOT NULL DEFAULT 'sleep' "  --recursion-method dsn=D=dbosc,t=dsns  --alter-foreign-keys-method auto --execute

     

     假设检查评定到slave的 Seconds_Behind_Master超越1s,则会安息10s后再监测,那几个进度会在出口文件中打字与印刷出:

 

    Replica lag is 395 seconds on sutest244.  Waiting.

   Replica lag is 425 seconds on sutest244.  Waiting.

   Replica lag is 456 seconds on sutest244.  Waiting.

 

    表达现行反革命基本延时了略阿秒,未来copy线程截止,正在等候中。

    

     假如是仅钦赐四个从库查看延迟情状,使用--check-slave-lag的下令如下:

 

pt-online-schema-change -P3310 --user=root --password=****  D=dbosc,t=tbddl --max-lag=1 --check-interval=10 --check-slave-lag=h=192.168.9.244,u=root,p=****,P=3310  --alter "ADD hobby varchar(100) NOT NULL DEFAULT 'sleep' "  --recursion-method  --alter-foreign-keys-method auto --print --execute

5 pt-osc还是online DDL?

    经过那意气风发篇介绍pt-online-schema-change的法则表明及测量检验,以致上篇的online ddl表达,可以见到晓pt-osc无论是什么DDL SQL,都会新建新表来替换,不分DDL类型,但是实行时期允许DDL操作,而ONLINE DDL则分为了某些类DDL,有的DDL仅需校勘元数据,有的DDL仅需在作者ibd文件上新建索引页,有的要求rebuild table,这两种等级次序推行时期帮衬DML操作,不过COPY TABLE 类型不辅助DML操作。

故此,能够有以下多少个推断:

  • 假定MySQL版本是5.6以前,不帮助online ddl操作的,pt-online-schema-change是一个十二分好的取舍;
  • 若果MySQL的本子是5.6上述的,支持online-ddl的,优先构思动用online ddl,但是意气风发旦是ddl SQL 在online DDL中 必要copy table to tmp table,则提出使用pt-online-schema-change来管理,比方改进列数据类型的DDL,online DDL则是必要copy table to tmp table,时期仅补协助调查询,不帮忙DML操作,当时,就足以接收pt-online-schema-change来管理,因为它也是拷贝临时表格,並且试行时期帮衬DML操作;
  • 例如实践Online DDL,不过对从库的延期极度灵活,针对急需copy table 跟rebuild table这两类DDL SQL,必要思虑是否能够在从库设置并行复制,借使不行,则优先选项pt-online-schema-change。

参照文书档案:

编辑:数据库 本文来源:    PERCONA提供了若干管理维护MySQL的小工具,【

关键词: