zoukankan      html  css  js  c++  java
  • MySQL日志及引擎

    MySQL日志文件

    错误日志(error log):记录mysql服务器mysqld在启动/关闭或运行过程中遇到的错误信息。

    查询日志(query log):

      普通查询日志(general query log):记录客户端连接信息和执行的sql语句信息。

      慢查询日志(slow query log):记录执行时间超出指定值(long_query_time)的sql语句。

    二进制日志(binary log):记录数据被修改的相关信息。

    在配置文件中进行配置各日志路径

    log-output=file  
    slow_query_log = 1  
    long_query_time = 1  
    slow_query_log_file = /data/mysql/mysql_3306/log/slow.log  
    log-error = /data/mysql/mysql_3306/log/error.log  
    binlog_format = mixed  
    log-bin = /data/mysql/mysql_3306/log/mysql3306_bin  

     查看log相关及测试

    mysql> show variables like '%_log%';

    开启普通查询日志

    mysql> set global general_log=ON;
    Query OK, 0 rows affected (0.07 sec)

    测试查看效果

    mysql> select user,host from mysql.user;
    [root@localhost data]# cat localhost.log 
    mysqld, Version: 5.6.22-log (MySQL Community Server (GPL)). started with:
    Tcp port: 3306  Unix socket: /tmp/mysql_3306.sock
    Time                 Id Command    Argument
    181204 12:20:03        2 Query    show variables like '%_log%'
    181204 12:21:40        2 Query    select user,host from mysql.user
    [root@localhost data]# 

     慢查询日志

    # 慢查询参数
    long_query_time=1 #多长时间记录
    log-slow-queries=/data/slow.log
    log_queries_not_using_indexes 

     二进制日志

    log-bin
    sql-log-bin

     binlog日志三种模式

    1  Statement Level 模式

      每一条修改数据的sql都会记录到master的bin-log中,slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行。

      优点:不需要记录每一行数据的变化,较少bin-log日志量,节约IO,提高性能。

    2  Row Level 模式

      日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据行修改

      优点:bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅需要记录那一条记录被修改了。

      缺点:产生大量的日志内容。

    3  Mixed 模式

      前两种模式的结合。

    模式调整

    查看

    mysql> show variables like '%binlog_format%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | binlog_format | MIXED |
    +---------------+-------+
    1 row in set (0.00 sec)

    在线修改生效

      运行时在线修改

    set session binlog_format='ATATEMENT';
    set session binlog_format='ROW';
    set session binlog_format='MIXED';

      全局生效

    set global binlog_format='STATEMENT';
    set global binlog_format='ROW';
    set global binlog_format='MIXED';

     MySQL服务引擎

      对于用户和应用程序同样一张表,无论什么引擎来存储,用户看到的数据都是一样的,不同的存储引擎存取,引擎功能,占用空间大小,读取性能都有区别。

      MySQL最常用存储引擎:MyISAM和InnoDB。

    MyISAM引擎

      每一个MyISAM表都对应硬盘上的三个文件,这三个文件都有一样的文件名,有不同的扩展名。.frm文件保存表的定义,这个文件不是MyISAM引擎的一部分,而是服务的一部分;.myd保存表的数据;.myi是表的索引文件。

    [root@localhost mysql]# file user.frm
    user.frm: MySQL table definition file Version 9
    [root@localhost mysql]# file user.MYD
    user.MYD: Hitachi SH big-endian COFF executable, not stripped
    [root@localhost mysql]# file user.MYI
    user.MYI: MySQL MISAM compressed data file Version 1

    MyISAM引擎特点

    1  不支持事务(事务时逻辑上的以组操作,组成这操作的各个单元,要么全成功,要么全失败。

    事务的四大特性(ACID)

      1.原子性(Atomicity),事务是一个不可分割的单位,事务中的所有sql等操作要么都发生,要么都不发生。

      2.一致性(Consistercy),事务发生前和发生后,数据的完整性必须保持一致。

      3.隔离性(Isolation),并发访问数据时,一个事务在执行完毕前,对于其它的会话不可见,多个并发事务之间的数据是相互隔离的。

      4.持久性(Durability),一个事务一旦提交,对数据库中的数据改变时永久性的,出了错误,事务也不允许撤销,只能通过”补偿性事务“。

    2  表级锁定(锁整个表)降低了并发性能。

    3  读写互相阻塞,在写入的时候阻塞读取,在读取的时候阻塞写入,读本身不会阻塞另外的读。

    4  只会缓存索引,可以通过key_buffer_size缓存索引,提高访问性能,减少磁盘IO,只会缓存索引,不缓存数据。

    5  读取表快,占用资源少

    6  不支持外键约束,支持全文索引。

    生产业务场景

    1  不需要事务支持的业务,一般为读数据比较多的网站业务。

    2  并发相对较低的业务。

    3  数据修改相对较少的业务。

    4  以读为主的业务。

    5  对数据一致性要求不是很高的业务。

    6  中小站网站部分业务。

    总结:单一对数据库的操作都可以用,单一就是尽量纯读或纯写。

    引擎调优

    1  设置合适的索引(缓存机制)。

    2  调整读写优先级,根据实际需求确保重要操作更优先执行。

    3  启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)。

    4  尽量顺序操作让insert数据都写入到尾部,减少阻塞。

    5  分解大的操作,降低单个操作的阻塞时间。

    6  降低并发数,某些高并发场景通过应用进行排队队列机制。

    7  对于相对静态的数据库,利用query Cache或memcached缓存服务提高访问效率。

    8  MyISAM的count只有在全表扫描的时候高效,带有其它条件的要进行实际的数据访问。

    9  把主从同步的主库用InnoDB,从库用MyISAM引擎。

    InnoDB引擎

      InnoDB引擎包含在二进制安装包里,和其它的引擎相比,兼容ACID事务,以及参数的完整性。

    InnoDB引擎特点

    1  支持事务:支持4个事务隔离级别,支持多版本读。

    2  行级锁定(更新时一般时锁当前行),通过索引实现,全表扫描仍然时表锁。

    3  读写阻塞与事务隔离级别相关。

    4  具有非常高效的缓存特性,能缓存索引,也能缓存数据。

    5  整个表和主键以cluster方式存储,组成一颗平衡树。

    6  所有Secondary Index都会保存主键信息。

    7  支持分区、表空间。

    8  支持外键约束。

    InnoDB业务场景

    1  需要事务支持(具有较好的事务特性)。

    2  行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。

    3  数据更新较为频繁的场景。

    4  数据一致性要求较高的业务。

    5  硬件设备内存较大,利用InnoDB较好的缓存能力来提高内存利用率,减少磁盘IO。

    InnoDB引擎调优

    1  主键尽可能小,避免给Secondary index带来过大的空间负担。

    2  避免全表扫描,因为会使用表锁。

    3  尽可能缓存所有的索引和数据,提高相应速度,减少磁盘IO。

    4  咋大批量小插入的时候,尽量自己控制事务不使用autocommit自动提交。

    5  合适使用innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。

    6  避免主键更新,因为会带来大量的数据移动。

    MySQL引擎

    1  查看有那些引擎可用

    mysql> show engines;
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
    | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
    | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
    | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
    | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
    | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
    | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
    | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
    | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    9 rows in set (0.00 sec)

    MySQL引擎更改

    1  MySQL命令语句修改

    alter table talbe_name engine=InnoDB;

    修改示例

    mysql> show create table t1;
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                                |
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | t1    | CREATE TABLE `t1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> alter table t1 engine=MyISAM;
    Query OK, 4 rows affected (0.10 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> show create table t1;
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                                |
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | t1    | CREATE TABLE `t1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    View Code

    2  用sed对备份内容进行引擎更换。

    3  mysql_convert_table_format命令修改。

    mysql_convert_table_format --user=username --password=passwd --socket=sockpath --ENGINE=MyISAM dbname tbnama

    4  创建表时指定引擎

    mysql> create table t(
        -> id int,
        -> name varchar(10))ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (2.02 sec)
    
    mysql> show create table t;
    +-------+------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                           |
    +-------+------------------------------------------------------------------------------------------------------------------------+
    | t     | CREATE TABLE `t` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(10) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +-------+------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    问题:

      1.MySQL有哪些存储引擎,各自有什么特点和区别?

      2.生产场景如何选用MySQL的引擎?

  • 相关阅读:
    docker在Linux环境下的安装
    docker在Windows环境下的安装
    tcpdump和windump
    Centos7下安装Elasticsearch 5.6.6
    使用concurrent.futures模块并发,实现进程池、线程池
    Nginx配置Gzip
    linux常用命令
    Linux下文档与目录结构
    快速读取大文件的几种方式
    linux 将大文件分解为多个小文件
  • 原文地址:https://www.cnblogs.com/wangzihong/p/10064399.html
Copyright © 2011-2022 走看看