备份表

  1. CREATE TABLE user_info_v2 SELECT * FROM user_info

复制表结构

CREATE TABLE user_v2 LIKE user

查看状态

--查看字符集 
SHOW VARIABLES LIKE 'character_set%';
--查看排序规则 
SHOW VARIABLES LIKE 'collation%';

查看进程列表

如果你执行了一个sql的操作,但是迟迟没有返回,你可以通过查询进程列表看看他的实际执行状况,如果该sql十分耗时,为了避免影响线上可以用kill命令杀死进程,通过查看进程列表也能直观的看下当前sql的执行状态,如果当前数据库负载很高,在进程列表可能会出现,大量的进程夯住,执行时间很长。

--查看进程列表
SHOW PROCESSLIST;
--杀死某个进程
kill 183665 ## id 值

查看当前运行的所有事物

在执行结果中可以看到是否有表锁等待或者死锁,如果有死锁发生,可以通过下面的命令来杀掉当前运行的事务。

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

KILL 19337  ## trx_mysql_thread_id 值

慢查询日志

有时候如果线上请求超时,应该去关注下慢查询日志,慢查询的分析很简单,先找到慢查询日志文件的位置,然后利用mysqldumpslow去分析。查询慢查询日志信息可以直接通过执行sql命令查看相关变量,常用的sql如下:

-- 查看慢查询配置
-- slow_query_log  慢查询日志是否开启
-- slow_query_log_file 的值是记录的慢查询日志到文件中
-- long_query_time 指定了慢查询的阈值
-- log_queries_not_using_indexes 是否记录所有没有利用索引的查询
SHOW VARIABLES LIKE '%quer%';

-- 查看慢查询是日志还是表的形式
SHOW VARIABLES LIKE 'log_output'

mysqldumpslow的工具十分简单,我主要用到的是参数如下:
栗子:mysqldumpslow -v -s t -t 10 mysql_slow.log.2018-11-20-0500

-t:限制输出的行数,我一般取前十条就够了
-s:根据什么来排序默认是平均查询时间at,我还经常用到c查询次数,因为查询次数很频繁但是时间不高也是有必要优化的,还有t查询时间,查看那个语句特别卡。
-v:输出详细信息

强制使用某个索引

select * from table force index(idx_user) limit 2;

禁止使用某个索引

select * from table ignore index(idx_user) limit 2;

禁用缓存(在测试时去除缓存的影响)

select SQL_NO_CACHE from table limit 2;