备份表
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;
