1.查询执行中的语句
SELECT * FROM information_schema.processlist WHERE state LIKE '' and info like '';
state是语句的执行状态,比如metadata lock是等待获取元数据锁,info是执行的语句
- 查询正在操作某个表的连接,并且批量生成kill语句
SELECT
CONCAT('KILL ', t.PROCESSLIST_ID
, ';') AS kill_command
FROM performance_schema.metadata_locks AS ml
JOIN performance_schema.threads AS t
ON ml.OWNER_THREAD_ID = t.THREAD_ID
WHERE ml.OBJECT_SCHEMA = ''
AND ml.OBJECT_NAME = ''
ORDER BY ml.LOCK_STATUS DESC;
OBJECT_SCHEMA是数据库名称,OBJECT_NAME是表名称。
- kill某个连接
kill processlistId
processlistId是第二步查询出来的连接ID
- 更改自增主键的值
ALTER TABLE table_name AUTO_INCREMENT = %d;
- 重命名表
RENAME TABLE old_table TO new_table;
重命名表是非常快速的操作,对于千万行级别表,也只需要两分钟左右的时间。
- 执行数据迁移的顺序
a. 建立和源表结构一致的新表,但是先不建立索引(为了快速实现数据迁移)
b. 进行数据迁移 insert into new_table(column_names) select column_names from old_table where conditions;
c. 建立索引
对于百万行数据,步骤b大约需要15分钟,步骤c单个索引,大概需要两分钟。