查看系统设置:
show [ gloabl | session ] variables like ‘%word%’;
查看运行状态:
show [ gloabl | session ] status like ‘%word%’;
查看mysql版本:
[root@localhost ~ ]mysql -v
或者
mysql> status;
或者
mysql> select version();
MySQL日志文件:错误日志,二进制日志,查询日志,慢查询日志,事务日志
错误日志(Error Log):默认是开启的,文件通常的名称为localhost.err
一般包含以下几个方面:
1.服务器启动和关闭过程中的信息
2.服务器运行过程中的错误信息
3.事件调度器运行一个事件时产生的信息
4.在从服务器上启动服务器进程时产生的信息
查看全局系统设置中的错误日志信息:
mysql> show global variables like ‘%log_error%’;
log_error为错误日志文件路径
log_error_verbosity为错误日志级别
* 以上信息可以在my.cnf中添加更改 *
错误日志级别如下:
当数据库错误日志文件太多,管理员可以备份并删除,然后使用mysqladmin命令开启新的错误日志
[root@localhost ~ ] # mysqladmin -u root -p flush-logs
MySQl二进制日志(Binary log & Binary Log Index):
主要用于记录修改数据或者有可能引起数据改变的MySQL语句,并且记录了语句发生的所有变化操作等。
二进制日志记录功能需要在配置文件中修改“log-bin=file_name”或者“log-bin=file_path”如果不设置路径的话,默认是保存在/usr/local/mysql/data下。
查看二进制文件信息:
mysql> show global variables like ‘%log_bin%’;
* 二进制文件不开启不影响mysql的运行与操作,只是不能做主从复制了 *
系统文件中的其他参数:
“max_binlog_size“可以设置binlog的最大存储上线。当日志达到该上线的时候,MySQL会重新创建一个日志开始记录。但是也有例外,比如在即将达到上线的时候,产生了一个较大的事务,超出了设置的最大上线。为了保证事务安全,MySQL不会将一个事务分开记录到两个binlog中。
mysql> set [ global | seesion ] max_binlog_size=NO.;
有些设置可以在mysql中修改,但是有些设置只有读的权限。所以,只读的设置只能在my.cnf配置文件中修改,然后重启mysqld服务生效。
“binlog-do-db=db_name1“:只对某个数据库(db_name)做记录,其他数据库则被忽略。
“binlog-ignore-db=db_name2“:只忽略对某个数据库(db_name)的记录
- 在db_name1中对其他数据库执行的命令也被记录,在binlog-ignore-db=db_name2对其他数据库执行的命令也被忽略
查看二进制日志:
1.在mysql交互式的界面查看
mysql> show binary logs;
查看所有日志的二进制信息
mysql> show binlog events\G
查看指定日志的二进制信息
mysql> show binlog events in ‘binlog_name’\G
2.使用命令行查看二进制文件
因为二进制文件是不可以使用cat来查看的,所以需要使用专用的命令来查看
[ root@localhost data ]# mysqlbinlog binlog_name
删除二进制日志信息
数据库只要运行就会产生大量日志文件,如果长时间不清理,那些不用的日志就会浪费很多的磁盘空间。若要删除二进制日志需要做到如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。删除二进制文件的方法如下:
1.根据文件或时间点来删除二进制日志:
mysql> purge { binary | master } logs { to log_name | before datetime_expr };
log_name:表示把这个文件之前的其他文件都删除掉,删除的日志不包括这个日志
datetime_expr:指定把这个时间点之前的二进制日志删除,也是删除的内容不包括这个时间点
2.删除所有的二进制日志(不建议使用,慎用)
mysql> reset master;
事务日志(redo日志)
事务日志是InnoDB特有的日志,可以帮助提高事务的效率。
使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录持久到磁盘上的事务日志中。而不用每次都将修改的数据本身持久到磁盘。
记录持久到事务日志之后,内存中被修改的数据在后台可以慢慢的刷回到磁盘
如果数据修改的记录已经持久化到事务日志中,但数据本身还没有写回到磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据,具体的恢复方式则视存储引擎而定。
事务日志采用追加的方式,只可增加,不可减少。因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。
事务提交过程:
一个事务,在没有提交的时候,产生的日志,记录到cache中;等到事务需要提交的时候,则把日志写入到磁盘。
可以在mysql中查看缓存大小mysql> show variables like ‘%binlog%’;
1.binlog_stmt_cache_size = 32768 当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句
2.binlog_format = [ ROW | STATEMENT | MIXED] :可以指定二进制日志的类型
ROW:基于行的复制(默认),仅记录哪条数据被修改了,缺点是会产生大量的日志,让日志暴涨,但是可以保证数据的精准性。
STATEMENT:基于SQL语句的复制,每一条会修改数据的sql语句会记录到binlog中。优点并不需要记录每一行的数据变化,减少了binlog日志量。缺点是在某些情况下会导致master-slave中的数据不一致。
MIXED:混合模式复制,交替使用行和语句,由mysql服务器自行判断
3.sync_binlog = NO. :设定做多少次写操作之后同步一次二进制日志到磁盘文件中,0表示不同步,1表示执行一条语句都会同步到二进制文件中。查看事务日志的定义:
mysql> show global variables like ‘%innodb_flush%’;
其中innodb_flush_log_at_trx_timeout | 1
在事务提交时,innodb是否同步日志从缓冲区到文件中
当值为1时(默认值),在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到刷新磁盘地操作,性能会很差造成大量的磁盘I/O,但是这种方法最安全。
当值为2时,每次提交事务都会写入日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有缓存的,所以这个写入并不能保证数据已经写入到物理磁盘。
当值为0时,日志缓存每秒一次地被写到日志文件,并且对日志文件做到刷新磁盘地操作,但是在一个事务提交之前不做任何操作。
慢查询日志(slowquerylog):
它对服务器性能地影响微乎其微,但是可以记录mysql服务器上执行了长时间查询地语句。可以帮助我们定位性能问题。MySQL 还提供了专门用来分析满查询日志的工具程序mysqldumpslow,用来帮助数据库管理人员解决可能存在的性能问题。
查看慢查询日志的定义:
mysql> show global variables like ‘%slow_query_log%’;
long_query_time = NO. =====>设置慢查询时间
也可以通过my.cnf文件来修改慢查询的配置参数
慢查询分析mysqldumpslow
可以通过打开log文件查看得知哪些SQL执行效率低下。从日志中,可以发现查询时间超过long_query_time时间的query为慢查询,而小于long_query_time时间的没有出现在此日志中。
如果慢查询日志中记录内容很多,可以使用mysqldumpslow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。mysqldumpslow对日志文件进行了分类汇总,显示汇总后摘要结果
进入log的存放目录,运行
[root@localhost data]# mysqldumpslow mysqld-slow.log
mysqldumpslow -s c -t 10 /database/mysql/slow-query.log
这会输出记录次数最多的10条SQL语句,其中:
-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒序;
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
例如:
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回记录集最多的10个查询。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照时间排序的前10条里面含有左连接的查询语句。