pt-online-schema-change的用法

环境:

10.192.30.53 主库

10.192.30.60 从库

mysql版本:8.0.17

为了方便操作,简单的写了如下的脚本。

  1. #!/bin/bash
  2. # file_name: /usr/local/scripts/pt_change_online.sh
  3.  
  4. . /etc/init.d/functions
  5. ##########################################################################################
  6. Date_Time=`date +%Y%m%d%H%M%S`
  7. Master_Host="10.192.30.53"
  8. Slave_Host="10.192.30.60"
  9. Port_Num=""
  10. User_Name="admin_m"
  11. Pass_word="rA75MQy*R*y@KO4z%LZe"
  12. Pt_Cmd="/usr/bin/pt-online-schema-change"
  13. MySQL_Dump_Cmd="/usr/bin/mysqldump"
  14. Bak_Data_Dir_="/data/backup/pt_dump/data/"
  15. Bak_logs_Dir="/data/backup/pt_dump/logs/"
  16. Db_Name="dbtest"
  17. Table_Name="test_article"
  18. Character_Name="utf8mb4"
  19.  
  20. # sql操作中必须去掉反引号,其他ddl操作只需要替换"add column name varchar(64) NOT NULL DEFAULT '' COMMENT '用户名';" 即可,可以不同带上最后的分号
  21. ##########################################################################################
  22.  
  23. function Data_table_dump(){
  24. "${MySQL_Dump_Cmd}" -h"${Slave_Host}" -P"${Port_Num}" -u"${User_Name}" -p"${Pass_word}" --default-character-set="${Character_Name}" --skip-tz-utc --routines --events --hex-blob --log-error="${Bak_logs_Dir}"dump_"${Date_Time}".log --set-gtid-purged=OFF --single-transaction --dump-slave= --max-allowed-packet= --max-allowed-packet= --skip-opt "${Db_Name}" "${Table_Name}">"${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump
  25. }
  26.  
  27. function Pirnt_Log(){
  28. Results=`tail - "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump | awk '{print $2,$3}'|awk '{print $1,$2}'`
  29. if [ "${Results}"X == "Dump completed"X ]; then
  30. echo " "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump Dump completed. " >>"${Bak_logs_Dir}"dump_"${Date_Time}".log
  31. else
  32. echo " "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump Dump error! " >>"${Bak_logs_Dir}"dump_"${Date_Time}".log
  33. fi
  34. }
  35.  
  36. function Pt_Online_Change_Schema(){
  37. "${Pt_Cmd}" --host="${Master_Host}" --port="${Port_Num}" --user="${User_Name}" --password="${Pass_word}" --no-check-replication-filters --no-check-unique-key-change D="${Db_Name}",t="${Table_Name}" --charset="${Character_Name}" --no-check-alter --alter="
  38. add column name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
  39. " --execute >>"${Bak_logs_Dir}"pt_"${Date_Time}".log
  40. }
  41.  
  42. function main(){
  43. Data_table_dump
  44. Pirnt_Log
  45. if [ $? -eq ]; then
  46. Pt_Online_Change_Schema
  47. else
  48. exit
  49. fi
  50. }
  51.  
  52. main
  53.  
  54. # end
  55. ##########################################################################################
  1. # 准备测试表
  2. mysql> show create table test_article\G;
  3. *************************** . row ***************************
  4. Table: test_article
  5. Create Table: CREATE TABLE `test_article` (
  6. `id` int() unsigned NOT NULL AUTO_INCREMENT,
  7. `title` varchar() NOT NULL DEFAULT '' COMMENT '文章标题',
  8. `content` longtext NOT NULL COMMENT '资讯内容',
  9. `source` text NOT NULL COMMENT '来源',
  10. `seo_keyword` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感搜索关键词',
  11. `seo_discrible` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感描述字符串',
  12. `seo_title` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感标题词',
  13. `top_column_id` int() NOT NULL DEFAULT '' COMMENT '栏目表中一级栏目id',
  14. `second_column_id` int() NOT NULL DEFAULT '' COMMENT '栏目表中二级栏目id',
  15. `img_url` varchar() NOT NULL DEFAULT '' COMMENT '缩略图url',
  16. `sort_value` int() NOT NULL DEFAULT '' COMMENT '排序权重,越大越靠前',
  17. `public_uid` int() NOT NULL DEFAULT '' COMMENT '发布人的uid',
  18. `state` tinyint() NOT NULL DEFAULT '' COMMENT '0已删除,1发布,2未发布',
  19. `reading_times` int() NOT NULL DEFAULT '' COMMENT '浏览总量',
  20. `tag` varchar() NOT NULL DEFAULT '' COMMENT '标签id,json字符串数组',
  21. `related_recommend` varchar() NOT NULL DEFAULT '' COMMENT '相关推荐,json',
  22. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  23. `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  24. PRIMARY KEY (`id`)
  25. ) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  26. row in set (0.00 sec)
  27.  
  28. ERROR:
  29. No query specified
  1. -- 、添加字段: alter table test_article add column name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
  2. -- 、删除字段: alter table test_article drop column name ;
  3. -- 、添加普通索引: alter table test_article add index idx_name(name);
  4. -- 、删除普通索引: alter table test_article drop index idx_name;
  5. -- 、添加唯一索引: alter table test_article add unique index idx_name(name);
  6. -- 、删除唯一索引: alter table test_article drop index idx_name;
  7. -- 、修改字段长度:alter table test_article modify name varchar() NOT NULL DEFAULT '' COMMENT '用户名或者昵称';
  8. -- 、修改字段名称: alter table test_article change name user_name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
  1. [root@fudao_db_cluster_003 pt_dump]# sh /usr/local/scripts/pt_change_online.sh
  2. mysqldump: [Warning] Using a password on the command line interface can be insecure.
  3. [root@fudao_db_cluster_003 pt_dump]# ll *
  4. data:
  5. total
  6. -rw-r--r-- root root Aug : dbtest_test_article..sql.dump
  7.  
  8. logs:
  9. total
  10. -rw-r--r-- root root Aug : dump_20190816143119.log
  11. -rw-r--r-- root root Aug : pt_20190816143119.log
  12. [root@fudao_db_cluster_003 pt_dump]# cat logs/dump_20190816143119.log
  13. /data/backup/pt_dump/data/dbtest_test_article..sql.dump Dump completed.
  14. [root@fudao_db_cluster_003 pt_dump]# cat logs/pt_20190816143119.log
  15. Found slaves:
  16. fudao_db_cluster_003 -> 10.192.30.60:
  17. Will check slave lag on:
  18. fudao_db_cluster_003 -> 10.192.30.60:
  19. Operation, tries, wait:
  20. analyze_table, ,
  21. copy_rows, , 0.25
  22. create_triggers, ,
  23. drop_triggers, ,
  24. swap_tables, ,
  25. update_foreign_keys, ,
  26. Altering `dbtest`.`test_article`...
  27. Creating new table...
  28. Created new table dbtest._test_article_new OK.
  29. Altering new table...
  30. Altered `dbtest`.`_test_article_new` OK.
  31. --16T14:: Creating triggers...
  32. --16T14:: Created triggers OK.
  33. --16T14:: Copying approximately rows...
  34. --16T14:: Copied rows OK.
  35. --16T14:: Analyzing new table...
  36. --16T14:: Swapping tables...
  37. --16T14:: Swapped original and new tables OK.
  38. --16T14:: Dropping old table...
  39. --16T14:: Dropped old table `dbtest`.`_test_article_old` OK.
  40. --16T14:: Dropping triggers...
  41. --16T14:: Dropped triggers OK.
  42. Successfully altered `dbtest`.`test_article`.
  43. [root@fudao_db_cluster_003 pt_dump]#
  44.  
  45. # 删除字段的操作,只需要修改:/usr/local/scripts/pt_change_online.sh
  46. 例如:
  47. function Pt_Online_Change_Schema(){
  48. "${Pt_Cmd}" --host="${Master_Host}" --port="${Port_Num}" --user="${User_Name}" --password="${Pass_word}" --no-check-replication-filters --no-check-unique-key-change D="${Db_Name}",t="${Table_Name}" --charset="${Character_Name}" --alter="
  49. drop column name # 修改这一行,即--alter 和 --execute之间的内容,ddl操作类似。
  50. " --execute >>"${Bak_logs_Dir}"pt_"${Date_Time}".log
  51. }
  52.  
  53. [root@fudao_db_cluster_003 pt_dump]# cat logs/pt_20190816143538.log
  54. Found slaves:
  55. fudao_db_cluster_003 -> 10.192.30.60:
  56. Will check slave lag on:
  57. fudao_db_cluster_003 -> 10.192.30.60:
  58. Operation, tries, wait:
  59. analyze_table, ,
  60. copy_rows, , 0.25
  61. create_triggers, ,
  62. drop_triggers, ,
  63. swap_tables, ,
  64. update_foreign_keys, ,
  65. Altering `dbtest`.`test_article`...
  66. Creating new table...
  67. Created new table dbtest._test_article_new OK.
  68. Altering new table...
  69. Altered `dbtest`.`_test_article_new` OK.
  70. --16T14:: Creating triggers...
  71. --16T14:: Created triggers OK.
  72. --16T14:: Copying approximately rows...
  73. --16T14:: Copied rows OK.
  74. --16T14:: Analyzing new table...
  75. --16T14:: Swapping tables...
  76. --16T14:: Swapped original and new tables OK.
  77. --16T14:: Dropping old table...
  78. --16T14:: Dropped old table `dbtest`.`_test_article_old` OK.
  79. --16T14:: Dropping triggers...
  80. --16T14:: Dropped triggers OK.
  81. Successfully altered `dbtest`.`test_article`.
  82. [root@fudao_db_cluster_003 pt_dump]#

pt-online-schema-change的用法的更多相关文章

  1. schema change + ogg 变更手册

    Check OGG  until no data queuing in replication process:testRO:a)login  test5 –l oggmgrb)oggc)#ggsci ...

  2. Online Schema Change for MySQL

    It is great to be able to build small utilities on top of an excellent RDBMS. Thank you MySQL. This ...

  3. AppBoxFuture(四). 随需而变-Online Schema Change

      需求变更是信息化过程中的家常便饭,而在变更过程中如何尽可能小的影响在线业务是比较头疼的事情.举个车联网监控的例子:原终端设备上传车辆的经纬度数据,新的终端设备支持同时上传速度数据,而旧的车辆状态表 ...

  4. elementUI下拉框select组件change事件用法

    <el-select-custom clearable collapse-tags v-model="searchForm.cardTypeList" @change=&qu ...

  5. Online, Asynchronous Schema Change in F1

    F1: A Distributed SQL Database That Scales   http://disksing.com/understanding-f1-schema-change   ma ...

  6. Online Schema Upgrade in MySQL Galera Cluster using TOI Method

    http://severalnines.com/blog/online-schema-upgrade-mysql-galera-cluster-using-toi-method     As a fo ...

  7. Schema 与数据类型优化

    这是<高性能 MySQL(第三版)>第四章<Schema 与数据类型优化>的读书笔记. 1. 选择优化的数据类型 数据类型的选择原则: 越小越好:选择满足需求的最小类型.注意, ...

  8. OCP考点实战演练01-备份恢复篇

    本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练01-备份恢复篇 1.数据库开启归档 2. ...

  9. iDB是如何运转的 一

    郑昀 创建于2015/12/2 最后更新于2015/12/4 关键词:数据库,MySQL,自动化运维,DDL,DML,SQL审核,备份,回滚,Inception,osc 提纲: 普通DBA和文艺DBA ...

  10. hbase-site.xml 配置详解

    hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完全正确'的,还要包含文件系统的scheme.例如,要表示hdfs中的'/hbase'目 ...

随机推荐

  1. 慕课网_Java Socket应用---通信是这样练成的

    第1章 网络基础知识 1-1 网络基础简介 (10:21) 第2章 Java 中网络相关 API 的应用 2-1 Java 中的 InetAddress 的应用 (08:10) import java ...

  2. etcd节点扩容至两个节点

    本篇已经安装了单个etcd,然后进行扩容etcd节点至2个,安装单节点请参照:https://www.cnblogs.com/effortsing/p/10295261.html 实验架构 test1 ...

  3. Synchronized知道这些就可以了

    Synchronized关键字算是Java的元老级锁了,一开始它撑起了Java的同步任务,其用法简单粗暴容易上手.但是有些与它相关的知识点还是需要我们开发者去深入掌握的.比如,我们都知道通过Synch ...

  4. python学习之不要在列表迭代的时候进行增删操作

    注意:列表不能在for循环时使用remove方法 li = [11,22,33,44] for i in li : li.remove(i) print (li) #输出 [22, 44] ​ for ...

  5. aliyun搭博客从零到一

    一.基础环境 lnmp      1台负载均衡SLB     2台ECS    1台 RDS  二.lnmp搭建 1.#配置nginx的yum仓库 2.#yum install  -y  nginx ...

  6. Spring Cloud Zuul Filter 和熔断

    转一篇很不错的关于Spring Cloud Zuul 相关用法的文章,基本包含常用的一些场景,另外附上实际项目中的熔断.打印请求日志和登录验证的实例. 原文地址:https://www.cnblogs ...

  7. spring boot-7.日志系统

    日志系统分为两部分,一部分是日志抽象层,一部分是日志实现层.常见的日志抽象层JCL,SLF4J,JBoss-Logging,日志实现层有logback,log4j,log4j2,JUL.日志抽象层的功 ...

  8. [转帖]SSH命令总结

    SSH命令总结 ssh-keygen ssh-copy-id 等命令自己用过 但是知道的不系统 也知道 转发命令 但是也只是知道一点点... ttps://www.cnblogs.com/chenfa ...

  9. Java实现龟兔赛跑

    闲极无聊,加上翻手机看到龟兔赛跑的词语,想到了可以通过java起两个线程来实现龟兔赛跑的实现. 代码实现其实很简单: 首先是乌龟类: 然后是兔子类: 最后是赛跑类: 接下里让我们看一下输出结果吧: 乌 ...

  10. 删除项目中所有的__pycache__ 文件

    关于 pycache 当第一次运行 python 脚本时,解释器会将 *.py 脚本进行编译并保存到 __pycache__ 目录 下次执行脚本时,若解释器发现你的 *.py 脚本没有变更,便会跳过编 ...