zoukankan      html  css  js  c++  java
  • mysql 常用查询

    1、查看实例上所有数据库的大小

    select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,
    concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size
    from information_schema.tables
    group by TABLE_SCHEMA
    order by data_length desc;
     

    2、查看具体数据库中表的大小

    select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size,  
    concat(truncate(index_length/1024/1024,2),' MB') as index_size  
    from information_schema.tables where TABLE_SCHEMA = '库名'  
    group by TABLE_NAME  
    order by data_length desc;  


    3、查看表的最后mysql修改时间(可以通过查看数据库中表的mysql修改时间,来确定mysql数据库是否已经长期不再使用。)

    select TABLE_NAME,UPDATE_TIME from INFORMATION_SCHEMA.tables where TABLE_SCHEMA='数据库名';


    4、与存储过程相关查询:

    #查询存储过程
    SELECT name FROM mysql.proc WHERE db='数据库名';
    SELECT routine_name FROM information_schema.routines WHERE routine_schema='数据库名';
    SHOW PROCEDURE STATUS WHERE db='数据库名';
    #查看存储过程详细信息
    SHOW CREATE PROCEDURE 数据库.存储过程名;

    5、查看所有的存储过程:

    show procedure status;


    6、导出MySQL的存储过程

    mysqldump -uroot -p -hlocalhost -P3306 -n -d -t -R DBName > procedurename.sql;


    7、查看指定表的索引

    show indexes from 表名;

     8、生成指定的语句(例 清空指定库下所有表)

    SELECT CONCAT('TRUNCATE TABLE ',table_name,';') FROM information_schema.`TABLES` WHERE table_schema='库名';

     9、mysql 备份单个数据库

    mysqldump -h 127.0.0.1 -P 3306 -ubackup -p  -R  --single-transaction --master-data=2 --databases xxdb | gzip  > /data/backup/bak-3306/xxdb_`date +%F`.sql.gz
    
    
    
    
    --single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables; 
    --master-data=2  记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的 
    --databases xxdb 指定备份的数据库
    
    gunzip  xxx.gz
    
    gziip  xxx 

     10、导入csv文件

    load data infile '/tmp/book_activity_code_data20171017.csv' 
    into table `bbq_activity`.`book_activity_code` 
    fields terminated by ';' optionally enclosed by '"' escaped by '"' 
    lines terminated by '
    '; 

     11、linux查看消耗内存较大的前十个进程信息:

    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

    12、linux查看消耗cpu较大的前十个进程信息:

    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

     13、查看最近几秒内的qps

     select variable_name,sum(per_sec) as qps from (select straight_join   lower(gs0.variable_name) as variable_name,  (gs1.variable_value - gs0.variable_value)/5 as per_sec from (     select variable_name ,variable_value     from information_schema.global_status where variable_name in ('com_select','com_update','com_insert','com_replace','com_delete')     union all     select '',sleep(5) from dual   ) as gs0    join information_schema.global_status gs1 using (variable_name)) t  group by variable_name with rollup;

     14、查看linux 逻辑cpu核数

    cat /proc/cpuinfo | grep 'model name'  | wc -l
    

     15、常用查看命令:

    (1)QPS(每秒Query量)
    QPS = Questions(or Queries) / seconds
    mysql > show global status like 'Question%';
    
    (2)TPS(每秒事务量)
    TPS = (Com_commit + Com_rollback) / seconds
    mysql > show global status like 'Com_commit';
    mysql > show global status like 'Com_rollback';
    
    (3)key Buffer 命中率
    mysql>show global status like 'key%';
    key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%
    key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%
    
    (4)InnoDB Buffer命中率
    mysql> show status like 'innodb_buffer_pool_read%';
    innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%
    
    (5)Query Cache命中率
    mysql> show status like 'Qcache%';
    Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;
    
    (6)Table Cache状态量
    mysql> show global status like 'open%';
    比较 open_tables 与 opend_tables 值
    
    (7)Thread Cache 命中率
    mysql> show global status like 'Thread%';
    mysql> show global status like 'Connections';
    Thread_cache_hits = (1 - Threads_created / connections ) * 100%
    
    (8)锁定状态
    mysql> show global status like '%lock%';
    Table_locks_waited/Table_locks_immediate=0.3% 如果这个比值比较大的话,说明表锁造成的阻塞比较严重
    Innodb_row_lock_waits innodb行锁,太大可能是间隙锁造成的

     16:查看统计mysql的连接数

    select DB,count(1) from information_schema.PROCESSLIST group by DB;
    

    17:kill 指定的查询线程

    --mysql -S /tmp/mysql-3306.sock -ss -e  "show processlist" | awk  '{print "kill "$1";"}' |grep  xxxx | mysql


    获取要kill的线程ID:
    /data/app/mysql/bin/mysql -u root -p -S /data/mysql_data/node-xxx/mysqld.sock  -e  "show processlist"  |grep 'xxxx'  | awk '{print "kill "$1";"}'

     18:mysql中锁的查看

    mysql查看锁表情况
    
    mysql> show status like 'Table%';
    
    +----------------------------+----------+
    
    | Variable_name        | Value |
    
    +----------------------------+----------+
    
    | Table_locks_immediate | 105         |
    
    | Table_locks_waited   | 3           |
    
    +----------------------------+----------+
    
     
    
    Table_locks_immediate  指的是能够立即获得表级锁的次数
    
    Table_locks_waited  指的是不能立即获取表级锁而需要等待的次数
    
     
    
    查看正在被锁定的的表
    
    show OPEN TABLES where In_use > 0;

     19:清空指定库下表

    select CONCAT('TRUNCATE TABLE ',table_name,';') from information_schema.tables where TABLE_SCHEMA = 'db1'
    

    20:修改存储过程的属性

    --设置为DEFINER,则创建存储过程的用户需要存在、并且有调用存储过程权限、有访问存储过程里面对象的权限,每次调用都会对definer=root@localhost审核,看其是否存在并由相应的权限
    update mysql.proc set security_type='DEFINER' where db='xxdb' and name='proc_xxx';
    --
    设置为INVOKER,则每次调用不会去审核definer对应的账户是否存在,只需要调用存储过程的用户有执行存储过程权限,访问存储过程里面包含对象的权限即可
    update mysql.proc set security_type='INVOKER' where db='xxdb' and name='proc_xxx'; 



    与存储过程本身有关的权限有三类,分别是CREATE ROUTINE, ALTER ROUTINE, EXECUTE。一般来说如果用户需要有创建、删除存储过程权限,需要赋予CREATE ROUTINE即可;如果有修改存储过程权限,需要赋予ALTER ROUTINE即可;如果需要有调用存储过程权限,需要赋予EXECUTE权限即可。 但MYSQL本身对存储过程定义的语法结构有些限制,也会对用户调用权限做严格的筛选,
    主要与存储过程定义参数:Definer 和 Security_type有关,前者是创建存储过程的用户,
    一般是表现形式为root@localhost等;而Security_type主要分为DEFINER
    | INVOKER,主要用以审核调用存储过程的安全审核,
    如果设置为DEFINER,则创建存储过程的用户需要存在、并且有调用存储过程权限、有访问存储过程里面对象的权限,每次调用都会对definer=root@localhost审核,看其是否存在并由相应的权限,
    如果设置为INVOKER,则每次调用不会去审核definer对应的账户是否存在,只需要调用存储过程的用户有执行存储过程权限,访问存储过程里面包含对象的权限即可。


    创建存储过程语法以及注意事项:

    语法

    CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体

    DELIMITER //
    CREATE PROCEDURE myproc(OUT s int)
    BEGIN
    SELECT COUNT(*) INTO s FROM students;
    END
    //
    DELIMITER ;
    分隔符

    MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。

    参数

    存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用","分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:

    • IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
    • OUT:该值可在存储过程内部被改变,并可返回
    • INOUT:调用时指定,并且可被改变和返回

      过程体

      过程体的开始与结束使用BEGIN与END进行标识。

      IN参数例子

      DELIMITER //
      CREATE PROCEDURE in_param(IN p_in int)
      BEGIN
      SELECT p_in;
      SET p_in=2;
      SELECT p_in;
      END;
      //
      DELIMITER ;
      #调用
      SET @p_in=1;
      CALL in_param(@p_in);
      SELECT @p_in;

     21、mysql锁的处理

    解除正在死锁的状态有两种方法:
    
    第一种:
    
    1.查询是否锁表
    
    show OPEN TABLES where In_use > 0;
    
    2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)
    
    show processlist
    
    3.杀死进程id(就是上面命令的id列)
    
    kill id
    
    
    
    第二种:
    
    1.查看下在锁的事务 
    
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
    
    2.杀死进程id(就是上面命令的trx_mysql_thread_id列)
    
    kill 线程ID
    
    例子:
    
    查出死锁进程:SHOW PROCESSLIST
    杀掉进程          KILL 420821;
    
    其它关于查看死锁的命令:
    
    1:查看当前的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
    
    2:查看当前锁定的事务
    
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
    
    3:查看当前等锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

    22/查看mysql的QPS 、RPS的例子

    QPS:每秒的查询数
    TPS:每秒的事物量
    
    QPS的计算方法
    Questions = SHOW GLOBAL STATUS LIKE 'Questions';
    Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
    QPS=Questions/Uptime
    例如:
    mysql> show global status like 'questions';
    +---------------+-----------+
    | Variable_name | Value     |
    +---------------+-----------+
    | Questions     | 449106827 |
    +---------------+-----------+
    1 row in set (0.00 sec)
    
    mysql> show global status like 'uptime';
    +---------------+--------+
    | Variable_name | Value  |
    +---------------+--------+
    | Uptime        | 238722 |
    +---------------+--------+
    1 row in set (0.00 sec)
    
    mysql> select 449106827/238722 as 'QPS VALUE' from dual;
    +-----------+
    | QPS VALUE |
    +-----------+
    | 1881.2963 |
    +-----------+
    1 row in set (0.00 sec)
    
    ___________________________________________________________
    
    TPS的计算方法
    Com_commit = SHOW GLOBAL STATUS LIKE 'Com_commit';
    Com_rollback = SHOW GLOBAL STATUS LIKE 'Com_rollback';
    Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
    TPS=(Com_commit + Com_rollback)/Uptime
    例如:
    mysql> SHOW GLOBAL STATUS LIKE 'Com_commit';
    +---------------+----------+
    | Variable_name | Value    |
    +---------------+----------+
    | Com_commit    | 71050554 |
    +---------------+----------+
    1 row in set (0.00 sec)
    
    mysql> SHOW GLOBAL STATUS LIKE 'Com_rollback';
    +---------------+--------+
    | Variable_name | Value  |
    +---------------+--------+
    | Com_rollback  | 537161 |
    +---------------+--------+
    1 row in set (0.00 sec)
    
    mysql> SHOW GLOBAL STATUS LIKE 'Uptime';
    +---------------+--------+
    | Variable_name | Value  |
    +---------------+--------+
    | Uptime        | 238827 |
    +---------------+--------+
    1 row in set (0.00 sec)
    
    
    mysql> select (71050554+537161)/238827 as 'TPS VALUE' from dual;
    +-----------+
    | TPS VALUE |
    +-----------+
    |  299.7472 |
    +-----------+
    1 row in set (0.00 sec)

    23、查看mysql的status信息



    (1)QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql > show global status like 'Question%';


    QPS的计算方法
    Questions = SHOW GLOBAL STATUS LIKE 'Questions';
    Uptime = SHOW GLOBAL STATUS LIKE 'Uptime'; (
    2)TPS(每秒事务量) TPS = (Com_commit + Com_rollback) / seconds mysql > show global status like 'Com_commit'; mysql > show global status like 'Com_rollback'; (3)key Buffer 命中率 mysql>show global status like 'key%'; key_buffer_read_hits = (1-key_reads / key_read_requests) * 100% key_buffer_write_hits = (1-key_writes / key_write_requests) * 100% (4)InnoDB Buffer命中率 mysql> show status like 'innodb_buffer_pool_read%'; innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100% (5)Query Cache命中率 mysql> show status like 'Qcache%'; Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%; (6)Table Cache状态量 mysql> show global status like 'open%'; 比较 open_tables 与 opend_tables 值 (7)Thread Cache 命中率 mysql> show global status like 'Thread%'; mysql> show global status like 'Connections'; Thread_cache_hits = (1 - Threads_created / connections ) * 100% (8)锁定状态 mysql> show global status like '%lock%'; Table_locks_waited/Table_locks_immediate=0.3% 如果这个比值比较大的话,说明表锁造成的阻塞比较严重 Innodb_row_lock_waits innodb行锁,太大可能是间隙锁造成的 (9)复制延时量 mysql > show slave status 查看延时时间 (10) Tmp Table 状况(临时表状况) mysql > show status like 'Create_tmp%'; Created_tmp_disk_tables/Created_tmp_tables比值最好不要超过10%,如果Created_tmp_tables值比较大, 可能是排序句子过多或者是连接句子不够优化 (11) Binlog Cache 使用状况 mysql > show status like 'Binlog_cache%'; 如果Binlog_cache_disk_use值不为0 ,可能需要调大 binlog_cache_size大小 (12) Innodb_log_waits 量 mysql > show status like 'innodb_log_waits'; Innodb_log_waits值不等于0的话,表明 innodb log buffer 因为空间不足而等待

     24、mysqldump备份使用了-A -B参数,如何实现恢复单表?

        先用sed或awk将全库中的需要的表结构过滤出来
    
    sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `SC`/!d;q' /opt/bak_2017-12-07.sql
    
        再用grep将全库中相应的表内容过滤出来
    
    grep 'INSERT INTO `SC`' /opt/bak_2017-12-07.sql
    
        将1和2中过滤出来的SQL语句导入数据库即可
    

     25、show full processlist 的结果的分类展示

    show full processlist  结果分组排序展示
    select ID,USER,HOST,DB,COMMAND,STATE,TIME,left(INFO,60) from information_schema.processlist where COMMAND !='Sleep' and USER !='root' order by DB,STATE;
    select COMMAND,count(1) from information_schema.processlist where  USER !='root' group by COMMAND;
    select DB,count(1) from information_schema.processlist where  COMMAND !='Sleep' and USER !='root' group by DB;
    select left(INFO,6) ,count(1) from information_schema.processlist where  COMMAND !='Sleep' and USER !='root' group by left(INFO,6); 
    

     26:查看mysql的常用引擎的库表分布情况

    select table_schema,table_name,engine from information_schema.tables where table_schema not in ('mysql','information_schema','performance_schema') and (engine='MyISAM' or engine='InnoDB') order by engine,table_schema;
    
    select engine,count(1) from information_schema.tables where table_schema not in ('mysql','information_schema','performance_schema') group by engine;
    

      

  • 相关阅读:
    Net设计模式实例之简单工厂模式(Simple Factory Pattern)
    Net设计模式实例系列文章总结
    2019年工作总结
    在Asp.Net Core中集成Kafka(中)
    如何将生产环境的服务Docker镜像拉取到本地进行调试
    记一次EFCore类型转换错误及解决方案
    Asp.Net Core中创建多DbContext并迁移到数据库
    ABP中的AutoMapper
    EFCore中的导航属性
    Asp.Net Core 调用第三方Open API查询物流数据
  • 原文地址:https://www.cnblogs.com/lx823706/p/7640054.html
Copyright © 2011-2022 走看看