1,mysql体系结构
由数据库和数据库实例组成,是单进场多线程架构。
数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件可以是frm、myd、myi、ibd等结尾的文件,当使用ndb存储引擎时候,不是os文件,是存放于内存中的文件。
数据库实例:由数据库后台进程/线程以及一个共享内存区组成,共享内存可以被运行的后台进程/线程所共享。

?
2,mysql文件类型
Mysql主要文件类型有如下几种:
参数文件:mysql实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类型以及定义作用域。
日志文件:记录mysql对某种条件做出响应时候写入的文件。
Socket文件:当用linux的mysql命令行窗口登录的时候需要的文件
Pid文件:mysql实例的进程文件
Mysql表结构文件:存放mysql表结构定义文件
存储引擎文件:记录存储引擎信息的文件。
?
?
3,参数文件my.cnf
? Mysql实例启动时,会先读取配置参数文件my.cnf
? 寻找my.cnf位置
(1):默认情况: mysql--help|grep my.cnf
(2):后台进程去找:ps–eaf|grep mysql
(3):全局搜索:find /-name my.cnf
? 可以用vi直接维护修改里面的参数值
(1)dynamic :可以通过set进行实时修改
(2)static,只能在my.cnf里面修改,需要restart生效
?
Mysql参数文件中的参数可以分为2种类型:动态(dynamic)参数和静态参数(staitic)
动态参数意味着可以在mysql实例运行中进行修改,set global sort_buffer_size=32999999;修改后,别的connection重新进行连接就可以生效了。
生效范围分为:global和session。
?
?
静态的说明在整个mysql实例运行期间不得进行修改,就类似一个只读的read only
?
?
4,日志文件
日志文件记录了影响mysql数据库的各种类型活动,常见的日志文件有错误日志、二进制日志、慢查询日志、全查询日志、redo日志、undo日志
?
5、错误日志
错误日志对mysql的启动、运行、关闭过程进行了记录,mysql dba在遇到问题时候,第一时间应该查看这个错误日志文件,该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,这个error日志文件类似于oracle的alert文件,只不过默认情况下是以error结尾。可以通过show variables like 'log_error';

?
可以看到错误文件的文件名为服务器的主机名。当然也可以在my.cnf里面设置错误日志文件的路径:
Vim my.cnf
log-error=/usr/local/mysql/mysqld.log
?
我们可以在错误日志文件里面看到一些数据库启动信息,以及告警信息还有就是报错信息
?
6,慢查询日志slow log
?
慢查询日志就是记录运行较慢的sql语句信息,给sql语句的优化带来很好的帮助,可以设置一个阀值,将运行时间超过该阀值的sql语句的运行信息都记录到slow log日志里面去。该阀值可以通过long_query_time来设置,也可以设置到毫秒微秒:

?
但是需要注意一点:对于运行时间等于该阀值的,就不会记录在内了。
?
另外一个参数是log_queries_not_using_indexes,如果运行的sql没有使用索引,只要超过阀值了也会记录在慢查询日志里面的。
?
long_query_time=0 (记录所有sql可以做审计) ,dba可以通过这个审计来推动业务的发展,可以知道哪些业务开展的好那些业务开展的不好,通过慢sql可以分析出哪些应用性能较差需要优化改进,dba的最大职能以及贡献就在于通过对数据库的维护来推动业务的发展和进步。从数据到业务,这是我们需要一直努力的方向。

?
?
慢查询日志还可以记录在table里面,
Slow_log表,也可以将慢查询日志放入一张表里面
show variables like ‘log_output’;查看如果是file就存放在slow log里面,如果是table就在slow_log表里面。
?
?
7、全查询日志
记录了对mysql数据库所有的请求信息,不论这些请求信息是否得到了正确的执行,默认文件名为主机名.log,你可以看到对access denied的请求。
?
数据库审计+ 问题排查跟踪(损失3%-5%性能)
?
?
8,二进制日志
记录了对数据库进行变更的操作,但是不包括select操作以及show操作,因为这类操作对数据库本身没有没有修改,如果你还想记录select和show的话,你就需要查看前面的全查询日志,另外binlog还包括了执行数据库更改操作时间和执行时间等信息。
二进制的主要作用有如下2个:
(1):恢复 recovery。某些数据的恢复需要二进制日志,在全库文件恢复后,可以在此基础上通过二进制日志进行point-to-time的恢复。
(2):复制(replication)。其原理和恢复类似,通过复制和执行二进制日志使得一台远程的mysql数据库(slave)于一台mysql数据库(master)进行实时同步。
?
通过在my.cnf里面设置log-bin =/home/data/mysql/binlog/mysql-bin.log生效,默认是在数据目录datadir下面
?
binlog日志参数:
max_binlog_size:指定了单个二进制文件的最大值,如果超过了该值,就会产生新的日志文件,后缀名+1,并且记录到.index文件里面。默认值是1G,不过从多年的dba生涯总结来说,64M是通用的大小设置。
?
binlog_cache_size:
使用innodb存储引擎时候,所有未提交uncommitted的二进制日志会被记录到一个缓存中,等该事务提交时committed直接将缓冲中的二进制日志写入二进制日志文件里面,而该缓冲的大小就由binlog_cache_size来决定,这个缓冲区是基于session的,也就是每一个线程需要事务的时候,mysql都会分配一个binlog_cache_size的缓存,因此改值设置需要非常小心,不能设置过大,免得内存溢出了。
?
sync_binlog:
sync_binlog=N,参数优化介绍过,大概就是表示每次写缓冲N次就同步到磁盘文件中,如果将N设置为1的话,每次都会写入binlog磁盘文件中,这是最保险最安全的,如果N>1,在意外发生的时候,就表示会有N-1个dml没有被写入binlog中,有可能就会发生主动数据不一致的情况。
?
binlog-do-db、binlog-ingore-db:
表示需要写入或者忽略写入哪些库的日志,默认为空,表示可以将所有库的日志写入到二进制文件里面。
?
log-slave-update:
启用从机服务器上的slave日志功能,使这台计算机可以用来构成一个镜像链(A->B->C) ,可以让从库上面产生二进制日志文件,在从库上再挂载一个