percona-toolkit在线添加删除mysql索引、字段(不锁表)

1.安装配置

 yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
 cd /root/soft
 tar zxvf percona-toolkit_2.2.11.tar.gz
 cd percona-toolkit-2.2.11
 perl Makefile.PL
 make
 make install

2.pt-online-schema-change工具使用

#查看操作的数据表结构

2.1在线添加字段,不锁表

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock  --alter=‘add column name char(4)‘ --execute D=test,t=user

#-S 如果有sock需要添加sock路径, name表示要添加的一个字符型字段名, D 表示test数据库名,t 表示user表名

#执行结果如下:

2.2在线增加索引,不锁表

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock --alter=‘add index user_id(u_id,g_id)‘ --execute D=test,t=user

#创建一个组合索引user_id(u_id,g_id)

#执行结果如下:

2.3在线删除索引,不锁表

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock --alter=‘drop index user_id‘ --execute D=test,t=user

#-S 如果有sock需要添加sock路径,user_id表示要删除的索引名, D 表示test数据库名,t 表示user表名

#执行结果如下:

2.4在线删除字段,不锁表

pt-online-schema-change -uroot -hlocalhost -p123 -S /tmp/mysql.sock --alter=‘drop column name‘ --execute D=test,t=user

#-S 如果有sock需要添加sock路径, name表示要添加的一个字段名, D 表示test数据库名,t 表示user表名

#执行结果如下:

备注:操作的表必须有主键否则将会报错,此工具适合MyISAM和InnoDB引擎,缺点是执行时间比较慢,但是不会锁表,如果想同时执行几个操作,直接逗号分隔就好。

时间: 2024-07-30 06:34:49

percona-toolkit在线添加删除mysql索引、字段(不锁表)的相关文章

批量删除mysql一个库所有数据表方法

批量删除mysql一个库所有数据表方法 删除表的命令 drop table 表名; 如果有100张表,手工执行100次,想想就崩溃. 下面提供一个使用information_schema库的方案来批量删除数据表:SELECT CONCAT('drop table ',table_name,';') FROM information_schema.`TABLES` WHERE table_schema='数据库名'; 如通过这条命令来得到drop table 表名;这样的语句,然后批量执行.mys

mysql select是否会锁表 ?

mysql select是否会锁表 ? 有的人说mysql的 select 会锁表 ,有的人说 mysql 的查询不会锁表 .其他他们都对,没有 ,但是很片面. 其实对于mysql的select 是否会锁表 ,这个完全取决于表采用的是什么存储引擎. 这里我就拿大家最熟悉的存储引擎INNODB 和MYISAM 来说明这个问题. 对于myisam的表select 是会锁定表的 ,会导致其他操作挂起,处于等待状态.对于innodb的表select 是不会锁表的.其实这里使用到了快照.快照这里不作讨论.

添加/删除/查看索引

查看索引:SHOW INDEX FROM 表名删除索引:ALTER TABLE `表名` drop index `idx_phone_no` 添加索引:ALTER TABLE `表名` ADD INDEX `idx_phone_no` (`PHONE_NO` ASC)  COMMENT ''; (PHONE_NO为字段名,idx_phone_no为索引别名) 原文地址:https://www.cnblogs.com/sikuaiwu/p/11323538.html

删除Mysql指定数据库下所有表

1.首先运行如下代码SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')FROM information_schema.tablesWHERE table_schema = 数据库名称; 2.查询出来是类似于这样的结果concat('DROP TABLE IF EXISTS ', table_name, ';')DROP TABLE IF EXISTS clients;DROP TABLE IF EXISTS invheader;DROP

Mysql InnoDB 数据更新导致锁表

一.数据表结构 CREATE TABLE `jx_attach` ( `attach_id` int(11) NOT NULL AUTO_INCREMENT, `feed_id` int(11) DEFAULT NULL , `attach_name` varchar(255) NOT NULL, `cycore_file_id` varchar(255) DEFAULT NULL , `attach_size` bigint(20) NOT NULL DEFAULT '0', `complet

mysql的事务处理与锁表

数据库的事务处理可以保证一组处理结果的正确性.mysql中只有INNODB和BDB引擎的数据表才支持事务处理,对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法来实现相同的功能. mysql的事务处理主要有两种方法来实现. 1.用begin,rollback,commit来实现. begin 开始一个事务 rollback 事务回滚 commit 事务确认 Php代码 $conn = mysql_connect('localhost','root','root') or die ("数据

MySQL索引类型总结和使用技巧以及注意事项

      索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录 SEL

sql学习笔记(15)-----------MySQL 索引与优化总结

索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点. 考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多).如果对之建立B-Tree索引,则只需要进行log100(10^6

02: MySQL 索引类型 、 MySQL 存储引擎

day02一.mysql索引二.MySQL存储引擎+++++++++++++++++++++++++++++++++++一.mysql索引1.1 索引介绍 : 相当于 "书的目录" 5000页1~200 目录信息拼音排序部首排序笔画排序 201~5000 正文 1.2 索引的优点与缺点?优点 加快查询的速度缺点 占用物理存储空间,减慢写的速度. 姓名 性别 班级 年龄jimjimNULL 1.3 使用普通索引index:(在表中的字段上创建索引)使用规则?查看 desc 表名: key