您的位置:首页 > 数据库 > MySQL

Mysql 文件-(Innodb存储引擎读书笔记)

2014-06-10 22:39 106 查看

1 参数文件及mysql参数

配置参数文件

通过下面命令可以得知当前配置的参数文件在什么位置

./bin/mysql --help | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /home/seven/study/mysql-5.6.17/install/my.cnf ~/.my.cnf

参数查看

mysql> show variables like 'innodb_buffer%'\G; 会查看到很多和innodb_buffer相关的参数设置

mysql> show variables like 'log_error'\G;查看错误日志路径

参数设置

select @@session.read_buffer_size; 查看当前session的read_buffer_size

select @@global.read_buffer_size; 查看全局的read_buffer_size

set  @@session.read_buffer_size=1024000; 设置当前session的read_buffer_size

set  @@session.read_buffer_size=1024000; 设置当前session的read_buffer_size

2 日志文件

  错误日志

  mysql> show variables like 'log_error'\G;查看错误日志路径

  慢查询日志

  mysql> show variables like 'long_query_time'\G; 慢查询的阈值(大于该值为慢查询)

  mysql> show variables like 'slow_query%'\G;查看慢查询日志是否开启及日志文件

  mysql> show variables like 'log_queries_not_using_indexes'\G;可以看出如果运行的sql语句没有使用索引,就将其记录到慢查询日志的动作里是否有设置

  mysqldumpslow slow.log 可以查看记录在slow.log里的慢查询日志

  查询日志

  默认文件名是: 主机名.log, 记录了所有对mysql数据库的请求日志。

  二进制日志

  二进制日志记录的数据库的所有更改操作(不包含show, select这样的操作)。但是有些没有的导致数据库修改的操作也会记录(比如没有导致修改的update操作)。

  开启二进制日志, 在my.conf里设置:

    log_bin = mysql-bin

    binlog_format = mixed

  mysql> show master status; 查看主库状态

  mysql> show binlog events in 'mysql-bin.000001'; 可读的显示binlog

  当进行事物时,为提交的二进制日志会记录在一个缓冲区内。事物提交前将缓冲区的日志刷到二进制文件。binlog_cache_size就是缓冲区的大小。如果过小,会导致日志写入临时文件。

  mysql> show variables like "binlog_cache%"; 查看binlog_cache_size大小。

  mysql> show global status like "binlog_cache%";查看使用缓冲次数和临时文件次数。

  sync_binlog = N表示每写缓冲多少次就同步到磁盘的。1表示没次将缓冲区日志刷到二进制文件时,就同步到磁盘。

  binlog_format参数定义了二进制日志的格式,包括:

    STATEMENT(逻辑的sql语句,对复制有一定要求,可能导致主从不一致,事物隔离级别时REPEATABLE READ)

    ROW(每行的更改,可以解决复制问题,同时事物隔离级别可以为READ COMMITED。但是可能会带来二进制文件大小的增加,同样复制的网络开销变大),

    MIXED(两者结合);

  可以通过mysqlbinlog命令可读的查看二进制日志: ./bin/mysqlbinlog --start-position=120 ./data/mysql-bin.000001

  

3 表结构文件

  .frm文件用来存储表的结构定义。或者相应视图的定义。

4 表存储引擎文件

  表空间文件

  .ibd文件为表空间文件。如果innodb_file_per_table为on的话,则每个表会有独立的表空间。

  ~/study/mysql-5.6.17/install$ ls -lhrt data/test/ 可以看到:

    -rw-r--r-- 1 seven seven 65 3月 15 03:07 db.opt

    -rw-rw---- 1 seven seven 8.4K 6月 8 15:40 t_z.frm

    -rw-rw---- 1 seven seven 96K 6月 8 20:40 t_z.ibd

  重做日志文件

  重做日志是为了实例异常关闭后恢复到关闭前的时刻。保证数据的完整性。默认情况下,数据目录下会有ib_logfile0和ib_logfile1两个文件记录这重做日志。

  Innodb存储引擎至少有1个重做日志文件组(可以设置多个镜像日志组,提高可靠性),每个文件组至少2个重做日志(如默认情况)。日志组中每个重做日志大小相同,循环写入。

  mysql> show variables like "innodb%log%"; 查看影响日志文件的属性。

  其中,innodb_log_file_size即重做日志大小,对innodb存储引擎的性能影响很大,设置的很大,恢复可能耗时很长。设置的很短,可能一个事物的日志需要多次切换重做日志文件。

  另外,重做日志文件太小会导致频繁发生checkpoint.导致性能抖动。

  重做日志的写入并不是直接写入文件,而是先写入日志缓冲(redo log buffer). 然后按照一定的顺序写入日志文件。重做日志从换缓冲区写入文件时,按512字节(扇区大小)。因此可以

  保证写入的原子性,从而不需要doublewrite.

  

  从日志缓冲写入磁盘时按照一定条件进行的:

   主线程周期将重做日志从缓冲写入磁盘,不论事物是否提交。

   innodb_flush_log_at_trx_commit表示事物提交时,如何处理重做日志。(0不写磁盘,等待主线程周期刷新。1表示提交时,将重做日志同步写磁盘并fsync. 2表示异步写磁盘,即写到文件系统的缓存。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: