mysql 常用命令

-- 查看当前客户端连接
show processlist;
-- kill 掉连接
kill id;
-- 查看隔离级别
show variables like 'transaction_isolation';  
-- 命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB表的语句,事务才真正启动
start transaction; 
-- 马上启动一个事务
start transaction with consistent snapshot;
-- 提交事务
commit;
-- 回滚事务
rollback;

--  更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”(current read)。其实,除了update语句外,select语句如果加锁,也是当前读。
select k from t where id=1 lock in share mode; -- 读锁(S锁,共享锁)
select k from t where id=1 for update; -- 写锁(X锁,排他锁)

-- 用于查找持续时间超过60s的事务
SELECT 
    *
FROM
    information_schema.innodb_trx
WHERE
    TIME_TO_SEC(TIMEDIFF(NOW(), trx_started)) > 60;
    
-- 查看慢sql配置
show variables like 'slow_query_log%';
show variables like 'long_query_time';    

show variables like '%log_output%';-- vlaue=FILE 表示慢sql记录在文件中

-- 开启慢查询
set GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 5;-- 10.000000
-- SET GLOBAL log_queries_not_using_indexes = ON;-- 是否打开看个人需要
set GLOBAL log_output='TABLE';-- FILE
select * from mysql.slow_log order by start_time desc;
-- 关闭慢查询
SET GLOBAL slow_query_log = OFF;
SET GLOBAL long_query_time = 10.000000;
SET GLOBAL log_queries_not_using_indexes = OFF;
SET GLOBAL log_output='FILE';-- FILE

-- 分析binglog的内容
-- mysqlbinlog  --base64-output=decode-rows -v  --start-datetime='2019-01-01 00:00:00'  --stop-datetime='2019-02-01 00:00:00'  mysql-bin.000001 > /tmp/binlog.sql
-- mysqldump -h主机名 -P端口 -u用户名 -p密码  –single-transaction --databases 数据库名1 数据库名2 数据库名3 > 文件名.sql
-- mysqldump -uroot -w "id=6032" -p db_name  tbl_name > /tmp/where.sql  #导出表的部分数据

-- mysqldump -uroot  -p db_name  tbl_name> /tmp/table.sql                         #导出表的数据

-- mysql 预热数据
select * from tb_name limit 100000000,1;

-- 查询5个最大表  
SELECT 
    CONCAT(table_schema, '.', table_name) table_name,
    CONCAT(ROUND(data_length / (1024 * 1024), 2),
            'M') data_length_str
FROM
    information_schema.TABLES
ORDER BY data_length DESC
LIMIT 5; 

-- 查询表中数据超过1000行的表
SELECT 
    CONCAT(table_schema, '.', table_name) AS table_name,
    table_rows
FROM
    information_schema.tables
WHERE
    table_rows > 1000
ORDER BY table_rows DESC;   

show variables like '%max_connection%';
show variables like 'open_files_limit';

-- 设置远程访问MySQL
grant select  on mysqldb.* to 'mysqluser'@'%' identified by 'mysqlpasswd'; -- 创建远程只读账号
grant all privileges on mysqldb.* to 'mysqluser'@'%' identified by 'mysqlpasswd'; -- mysqldb数据名 mysqluser是用户名,%代表任意主机,'mysqlpasswd'指定的登录密码
flush privileges; # 重载系统权限

analyze table t ; -- 命令,可以用来重新统计索引信息 当explain的结果预估的rows值跟实际情况差距比较大,可以采用这个方法来处理
select * from t force index(a) where a between 10000 and 20000; -- 强制使用a的索引
show index from tablename; -- 查询索引的区分度(索引统计值(cardinality列))

-- flush脏页 刷脏页的逻辑会占用IO资源并可能影响到了你的更新语句 平时要关注脏页比例(Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total) 不要让它经常接近75%
show variables like 'innodb_io_capacity'; -- 告诉mysql自身io能力
show global status like 'Innodb_buffer_pool_pages_dirty';
show global status like 'Innodb_buffer_pool_pages_total';


alter table t engine = InnoDB; -- 重建表做空间收缩 :delete命令是不能回收表空间的

show variables like  'innodb_file_per_table' ; -- 设置为ON,是推荐做法:每个InnoDB表数据存储在一个以 .ibd为后缀的文件

-- innodb的行锁是是实现在索引上的,如果访问没有命中索引,也无法使用行锁,将退化为表锁

show variables like 'innodb_flush_log_at_trx_commit' ; -- redo log 刷盘的策略

-- 查看占用的写锁
select * from sys.innodb_lock_waits where locked_table=`'test'.'t'`;

-- 幻读在“当前读”下才会出现 幻读仅专指“新插入的行”

show variables like  'binlog_format' ;

show variables like 'wait_timeout'; -- 针对非交互式连接 jdbc连接数据库是非交互式连接
show variables like 'interactive_timeout'; -- 针对交互式连接 mysql客户端连接数据库是交互式连接

select * from information_schema.INNODB_TRX; -- 看事务具体状态的话,通过trx_mysql_thread_id查看线程是sleep但是还存在事物,这种是避免kill

show variables like 'sync_binlog';

select sleep(1) from dual; -- table 里面有N行,就执行N*1秒  可用来模拟大查询




你可能感兴趣的:(mysql 常用命令)