pt-online-schema-change的用法
pt-online-schema-change的用法
环境:
10.192.30.53 主库
10.192.30.60 从库
mysql版本:8.0.17
为了方便操作,简单的写了如下的脚本。
- #!/bin/bash
- # file_name: /usr/local/scripts/pt_change_online.sh
- . /etc/init.d/functions
- ##########################################################################################
- Date_Time=`date +%Y%m%d%H%M%S`
- Master_Host="10.192.30.53"
- Slave_Host="10.192.30.60"
- Port_Num=""
- User_Name="admin_m"
- Pass_word="rA75MQy*R*y@KO4z%LZe"
- Pt_Cmd="/usr/bin/pt-online-schema-change"
- MySQL_Dump_Cmd="/usr/bin/mysqldump"
- Bak_Data_Dir_="/data/backup/pt_dump/data/"
- Bak_logs_Dir="/data/backup/pt_dump/logs/"
- Db_Name="dbtest"
- Table_Name="test_article"
- Character_Name="utf8mb4"
- # sql操作中必须去掉反引号,其他ddl操作只需要替换"add column name varchar(64) NOT NULL DEFAULT '' COMMENT '用户名';" 即可,可以不同带上最后的分号
- ##########################################################################################
- function Data_table_dump(){
- "${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
- }
- function Pirnt_Log(){
- Results=`tail - "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump | awk '{print $2,$3}'|awk '{print $1,$2}'`
- if [ "${Results}"X == "Dump completed"X ]; then
- echo " "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump Dump completed. " >>"${Bak_logs_Dir}"dump_"${Date_Time}".log
- else
- echo " "${Bak_Data_Dir_}""${Db_Name}"_"${Table_Name}"."${Date_Time}".sql.dump Dump error! " >>"${Bak_logs_Dir}"dump_"${Date_Time}".log
- fi
- }
- function Pt_Online_Change_Schema(){
- "${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="
- add column name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
- " --execute >>"${Bak_logs_Dir}"pt_"${Date_Time}".log
- }
- function main(){
- Data_table_dump
- Pirnt_Log
- if [ $? -eq ]; then
- Pt_Online_Change_Schema
- else
- exit
- fi
- }
- main
- # end
- ##########################################################################################
- # 准备测试表
- mysql> show create table test_article\G;
- *************************** . row ***************************
- Table: test_article
- Create Table: CREATE TABLE `test_article` (
- `id` int() unsigned NOT NULL AUTO_INCREMENT,
- `title` varchar() NOT NULL DEFAULT '' COMMENT '文章标题',
- `content` longtext NOT NULL COMMENT '资讯内容',
- `source` text NOT NULL COMMENT '来源',
- `seo_keyword` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感搜索关键词',
- `seo_discrible` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感描述字符串',
- `seo_title` varchar() NOT NULL DEFAULT '' COMMENT '搜索引擎敏感标题词',
- `top_column_id` int() NOT NULL DEFAULT '' COMMENT '栏目表中一级栏目id',
- `second_column_id` int() NOT NULL DEFAULT '' COMMENT '栏目表中二级栏目id',
- `img_url` varchar() NOT NULL DEFAULT '' COMMENT '缩略图url',
- `sort_value` int() NOT NULL DEFAULT '' COMMENT '排序权重,越大越靠前',
- `public_uid` int() NOT NULL DEFAULT '' COMMENT '发布人的uid',
- `state` tinyint() NOT NULL DEFAULT '' COMMENT '0已删除,1发布,2未发布',
- `reading_times` int() NOT NULL DEFAULT '' COMMENT '浏览总量',
- `tag` varchar() NOT NULL DEFAULT '' COMMENT '标签id,json字符串数组',
- `related_recommend` varchar() NOT NULL DEFAULT '' COMMENT '相关推荐,json',
- `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
- row in set (0.00 sec)
- ERROR:
- No query specified
- -- 、添加字段: alter table test_article add column name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
- -- 、删除字段: alter table test_article drop column name ;
- -- 、添加普通索引: alter table test_article add index idx_name(name);
- -- 、删除普通索引: alter table test_article drop index idx_name;
- -- 、添加唯一索引: alter table test_article add unique index idx_name(name);
- -- 、删除唯一索引: alter table test_article drop index idx_name;
- -- 、修改字段长度:alter table test_article modify name varchar() NOT NULL DEFAULT '' COMMENT '用户名或者昵称';
- -- 、修改字段名称: alter table test_article change name user_name varchar() NOT NULL DEFAULT '' COMMENT '用户名';
- [root@fudao_db_cluster_003 pt_dump]# sh /usr/local/scripts/pt_change_online.sh
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- [root@fudao_db_cluster_003 pt_dump]# ll *
- data:
- total
- -rw-r--r-- root root Aug : dbtest_test_article..sql.dump
- logs:
- total
- -rw-r--r-- root root Aug : dump_20190816143119.log
- -rw-r--r-- root root Aug : pt_20190816143119.log
- [root@fudao_db_cluster_003 pt_dump]# cat logs/dump_20190816143119.log
- /data/backup/pt_dump/data/dbtest_test_article..sql.dump Dump completed.
- [root@fudao_db_cluster_003 pt_dump]# cat logs/pt_20190816143119.log
- Found slaves:
- fudao_db_cluster_003 -> 10.192.30.60:
- Will check slave lag on:
- fudao_db_cluster_003 -> 10.192.30.60:
- Operation, tries, wait:
- analyze_table, ,
- copy_rows, , 0.25
- create_triggers, ,
- drop_triggers, ,
- swap_tables, ,
- update_foreign_keys, ,
- Altering `dbtest`.`test_article`...
- Creating new table...
- Created new table dbtest._test_article_new OK.
- Altering new table...
- Altered `dbtest`.`_test_article_new` OK.
- --16T14:: Creating triggers...
- --16T14:: Created triggers OK.
- --16T14:: Copying approximately rows...
- --16T14:: Copied rows OK.
- --16T14:: Analyzing new table...
- --16T14:: Swapping tables...
- --16T14:: Swapped original and new tables OK.
- --16T14:: Dropping old table...
- --16T14:: Dropped old table `dbtest`.`_test_article_old` OK.
- --16T14:: Dropping triggers...
- --16T14:: Dropped triggers OK.
- Successfully altered `dbtest`.`test_article`.
- [root@fudao_db_cluster_003 pt_dump]#
- # 删除字段的操作,只需要修改:/usr/local/scripts/pt_change_online.sh
- 例如:
- function Pt_Online_Change_Schema(){
- "${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="
- drop column name # 修改这一行,即--alter 和 --execute之间的内容,ddl操作类似。
- " --execute >>"${Bak_logs_Dir}"pt_"${Date_Time}".log
- }
- [root@fudao_db_cluster_003 pt_dump]# cat logs/pt_20190816143538.log
- Found slaves:
- fudao_db_cluster_003 -> 10.192.30.60:
- Will check slave lag on:
- fudao_db_cluster_003 -> 10.192.30.60:
- Operation, tries, wait:
- analyze_table, ,
- copy_rows, , 0.25
- create_triggers, ,
- drop_triggers, ,
- swap_tables, ,
- update_foreign_keys, ,
- Altering `dbtest`.`test_article`...
- Creating new table...
- Created new table dbtest._test_article_new OK.
- Altering new table...
- Altered `dbtest`.`_test_article_new` OK.
- --16T14:: Creating triggers...
- --16T14:: Created triggers OK.
- --16T14:: Copying approximately rows...
- --16T14:: Copied rows OK.
- --16T14:: Analyzing new table...
- --16T14:: Swapping tables...
- --16T14:: Swapped original and new tables OK.
- --16T14:: Dropping old table...
- --16T14:: Dropped old table `dbtest`.`_test_article_old` OK.
- --16T14:: Dropping triggers...
- --16T14:: Dropped triggers OK.
- Successfully altered `dbtest`.`test_article`.
- [root@fudao_db_cluster_003 pt_dump]#
pt-online-schema-change的用法的更多相关文章
- schema change + ogg 变更手册
Check OGG until no data queuing in replication process:testRO:a)login test5 –l oggmgrb)oggc)#ggsci ...
- 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 ...
- AppBoxFuture(四). 随需而变-Online Schema Change
需求变更是信息化过程中的家常便饭,而在变更过程中如何尽可能小的影响在线业务是比较头疼的事情.举个车联网监控的例子:原终端设备上传车辆的经纬度数据,新的终端设备支持同时上传速度数据,而旧的车辆状态表 ...
- elementUI下拉框select组件change事件用法
<el-select-custom clearable collapse-tags v-model="searchForm.cardTypeList" @change=&qu ...
- Online, Asynchronous Schema Change in F1
F1: A Distributed SQL Database That Scales http://disksing.com/understanding-f1-schema-change ma ...
- 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 ...
- Schema 与数据类型优化
这是<高性能 MySQL(第三版)>第四章<Schema 与数据类型优化>的读书笔记. 1. 选择优化的数据类型 数据类型的选择原则: 越小越好:选择满足需求的最小类型.注意, ...
- OCP考点实战演练01-备份恢复篇
本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练01-备份恢复篇 1.数据库开启归档 2. ...
- iDB是如何运转的 一
郑昀 创建于2015/12/2 最后更新于2015/12/4 关键词:数据库,MySQL,自动化运维,DDL,DML,SQL审核,备份,回滚,Inception,osc 提纲: 普通DBA和文艺DBA ...
- hbase-site.xml 配置详解
hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完全正确'的,还要包含文件系统的scheme.例如,要表示hdfs中的'/hbase'目 ...
随机推荐
- 慕课网_Java Socket应用---通信是这样练成的
第1章 网络基础知识 1-1 网络基础简介 (10:21) 第2章 Java 中网络相关 API 的应用 2-1 Java 中的 InetAddress 的应用 (08:10) import java ...
- etcd节点扩容至两个节点
本篇已经安装了单个etcd,然后进行扩容etcd节点至2个,安装单节点请参照:https://www.cnblogs.com/effortsing/p/10295261.html 实验架构 test1 ...
- Synchronized知道这些就可以了
Synchronized关键字算是Java的元老级锁了,一开始它撑起了Java的同步任务,其用法简单粗暴容易上手.但是有些与它相关的知识点还是需要我们开发者去深入掌握的.比如,我们都知道通过Synch ...
- python学习之不要在列表迭代的时候进行增删操作
注意:列表不能在for循环时使用remove方法 li = [11,22,33,44] for i in li : li.remove(i) print (li) #输出 [22, 44] for ...
- aliyun搭博客从零到一
一.基础环境 lnmp 1台负载均衡SLB 2台ECS 1台 RDS 二.lnmp搭建 1.#配置nginx的yum仓库 2.#yum install -y nginx ...
- Spring Cloud Zuul Filter 和熔断
转一篇很不错的关于Spring Cloud Zuul 相关用法的文章,基本包含常用的一些场景,另外附上实际项目中的熔断.打印请求日志和登录验证的实例. 原文地址:https://www.cnblogs ...
- spring boot-7.日志系统
日志系统分为两部分,一部分是日志抽象层,一部分是日志实现层.常见的日志抽象层JCL,SLF4J,JBoss-Logging,日志实现层有logback,log4j,log4j2,JUL.日志抽象层的功 ...
- [转帖]SSH命令总结
SSH命令总结 ssh-keygen ssh-copy-id 等命令自己用过 但是知道的不系统 也知道 转发命令 但是也只是知道一点点... ttps://www.cnblogs.com/chenfa ...
- Java实现龟兔赛跑
闲极无聊,加上翻手机看到龟兔赛跑的词语,想到了可以通过java起两个线程来实现龟兔赛跑的实现. 代码实现其实很简单: 首先是乌龟类: 然后是兔子类: 最后是赛跑类: 接下里让我们看一下输出结果吧: 乌 ...
- 删除项目中所有的__pycache__ 文件
关于 pycache 当第一次运行 python 脚本时,解释器会将 *.py 脚本进行编译并保存到 __pycache__ 目录 下次执行脚本时,若解释器发现你的 *.py 脚本没有变更,便会跳过编 ...