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. Web前端学习书籍

    <Head First HTML5 Programming> 介绍如何利用HTML5来搭建Web应用,包含JavaScript内容. <CSS禅意花园>: 不是入门的书籍,对C ...

  2. Dojo入门:dojo中的事件处理

      JS为DOM添加事件 在原生的环境下,为DOM添加事件处理函数有多种方法: <input type="button" name="btn" value ...

  3. epoll 性能分析(解决占用CPU 过高问题)2

    针对服务器框架Engine,在工作线程中发现该线程占用CPU过高,分析之后发现问题出在死循环那里 void cServerBase::OnProcess() { printf("cServe ...

  4. vtkExampleWarpVector和vtkWarpScalar

    vtkWarpVector : deform geometry with vector data vtkWarpVector is a filter that modifies point coord ...

  5. SQL注入(bool型)

    sqli-labs 靶场https://blog.csdn.net/qq_41420747/article/details/81836327 教程+靶场 1. https://blog.csdn.ne ...

  6. Xcode增加头文件搜索路径的方法

    Xcode增加头文件搜索路径的方法 以C++工程为例: 在Build Settings 页面中的Search Paths一节就是用来设置头文件路径. 相关的配置项用红框框起来了,共有三个配置项: He ...

  7. 交换机安全学习笔记 第六章 IPV4 ARP攻击

    ARP欺骗攻击 常用工具:  dsniff(Linux/windows).ettercap(Linux/windows).cain(仅windows). ARP欺骗攻击的目的是嗅探发往某主机的所有IP ...

  8. Codeforces Round #589 (Div. 2) (e、f没写)

    https://codeforces.com/contest/1228/problem/A A. Distinct Digits 超级简单嘻嘻,给你一个l和r然后寻找一个数,这个数要满足的条件是它的每 ...

  9. CSP-S 2019游记

    Day 0 下午到了广州,酒店还不错,不好的是附近没有什么吃饭的地方 zyd和ljz巨神说如果上了450就女装. 晚上看了一下写过模板,本来准备敲几个新模板的的结果被卡常,心态没了.于是又把wys的卡 ...

  10. 如何输出opencv编译信息

    本文链接:https://mangoroom.cn/opencv/how-to-print-compile-info-of-opencv.html opencv提供了一个函数,利用这个函数可以输出当前 ...