MySQL管理之日志详解.docx
- 文档编号:27441942
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:13
- 大小:23.53KB
MySQL管理之日志详解.docx
《MySQL管理之日志详解.docx》由会员分享,可在线阅读,更多相关《MySQL管理之日志详解.docx(13页珍藏版)》请在冰豆网上搜索。
MySQL管理之日志详解
MySQL管理之日志详解
MySQL日志详解
错误日志MySQL的错误信息是在data目录下的错误日志本身所定义的内容本身是可以定义的编辑配置文件,定义错误日志:
log-error=/path/to/xx.err#定义是否启动错误日志的功能log-warnings={1|0}#定义是否将警告信息也记录在错误日志中
而默认情况下错误日志也记录以下几个方面的消息:
1、服务器启动和关闭过程中的信息未必是错误信息,比如mysql是如何去初始化存储引擎的过程记录在错误日志里等等
2、服务器运行过程中的错误信息比如sock文件找不到,无法加载mysql数据库的数据文件,如果忘记初始化mysql或datadir路径找不到,或权限不正确等都会记录在此
3、事件调度器运行一个事件时产生的信息一旦mysql调度启动一个计划任务的时候,它也会将相关信息记录在错误日志中
4、在从服务器上启动从服务器进程时产生的信息在复制环境下,从服务器进程的信息也会被记录进错误日志一般情况下错误日志不会特别大,可以放心安全的开启,对于诊断服务器故障或问题也是非常有帮助的
如何定义mysql服务器错误日志相关功能:
mysql>showglobalvariableslike'%log%';+-----------------------------------------+---------------------------------+|Variable_name|Value|+-----------------------------------------+---------------------------------+|back_log|50||binlog_cache_size|32768||binlog_direct_non_transactional_updates|OFF||binlog_format|MIXED||binlog_stmt_cache_size|32768||expire_logs_days|0||general_log|OFF||general_log_file|/mydata/data/localhost.log||innodb_flush_log_at_trx_commit|1||innodb_locks_unsafe_for_binlog|OFF||innodb_log_buffer_size|8388608||innodb_log_file_size|5242880||innodb_log_files_in_group|2||innodb_log_group_home_dir|./||innodb_mirrored_log_groups|1||log|OFF||log_bin|ON||log_bin_trust_function_creators|OFF||log_error|/mydata/data/localhost.err||log_output|FILE||log_queries_not_using_indexes|OFF||log_slave_updates|OFF||log_slow_queries|OFF||log_warnings|1||max_binlog_cache_size|18446744073709547520||max_binlog_size|1073741824||max_binlog_stmt_cache_size|18446744073709547520||max_relay_log_size|0||relay_log|||relay_log_index|||relay_log_info_file|relay-log.info||relay_log_purge|ON||relay_log_recovery|OFF||relay_log_space_limit|0||slow_query_log|OFF||slow_query_log_file|/mydata/data/localhost-slow.log||sql_log_bin|ON||sql_log_off|OFF||sync_binlog|0||sync_relay_log|0||sync_relay_log_info|0|+-----------------------------------------+---------------------------------+41rowsinset(0.00sec)日志保存路径,默认路径为当前路径下的hostname.err|log_error|/mydata/data/localhost.err|将服务数据库服务的警告信息写入localhost.err里|log_warnings|1|通常errlog的配置参数一般是log_error=/path/to/somefielog_warnings={1|0}日志的相关功能是全局的,有些功能是静态定义的[root@localhostdata]#pwd/mydata/data[root@localhostdata]#hostnamelocalhost[root@localhostdata]#ll|greperr-rw-r-----1mysqlroot6220Mar3114:
32localhost.err-rw-r-----1mysqlroot68129Feb2609:
30test3.err查看错误日志:
首先重启一下mysql服务进程,并观察错误日志:
[root@localhostdata]#tail-20localhost.err14033114:
32:
02[Note]/usr/local/mysql/bin/mysqld:
Shutdowncomplete
14033114:
32:
02mysqld_safemysqldfrompidfile/mydata/data/localhost.pidended14033114:
32:
02mysqld_safeStartingmysqlddaemonwithdatabasesfrom/mydata/data14033114:
32:
03[Note]Plugin'FEDERATED'isdisabled.#初始化存储引擎14033114:
32:
03InnoDB:
TheInnoDBmemoryheapisdisabled#innodb禁用了堆功能14033114:
32:
03InnoDB:
Mutexesandrw_locksuseGCCatomicbuiltins#互斥量和行级锁是GCC编制的
14033114:
32:
03InnoDB:
Compressedtablesusezlib1.2.314033114:
32:
03InnoDB:
UsingLinuxnativeAIO14033114:
32:
03InnoDB:
Initializingbufferpool,size=128.0M#innodb存储引擎的缓冲池(buffpoll)一般需要改的,而且需要改的特别大,一般8G内存分配给其5G都不足为过(专用于mysql场景)因此可以观察此文件来观察缓冲池到底占用多少内存
14033114:
32:
03InnoDB:
Completedinitializationofbufferpool14033114:
32:
03InnoDB:
highestsupportedfileformatisBarracuda.14033114:
32:
03InnoDB:
Waitingforthebackgroundthreadstostart14033114:
32:
04InnoDB:
5.5.33started;logsequencenumber285627814033114:
32:
04[Note]Serverhostname(bind-address):
'0.0.0.0';port:
3306#服务已经运行并监听在本地0.0.0.0的3306端口14033114:
32:
04[Note]-'0.0.0.0'resolvesto'0.0.0.0';#0.0.0.0反解失败14033114:
32:
04[Note]ServersocketcreatedonIP:
'0.0.0.0'.14033114:
32:
04[Note]EventScheduler:
Loaded0events#时间调度器没有进行任何调度14033114:
32:
04[Note]/usr/local/mysql/bin/mysqld:
readyforconnections.Version:
'5.5.33-log'socket:
'/tmp/mysql.sock'port:
3306MySQLCommunityServer(GPL)#mysql已经启动并在/tmp/目录下生成mysql.sock文件
查询日志查询日志一般情况下mysql是没有启用的,因为mysql本身为关系型数据库,用户连接进数据库的时候,用户的一切行为增删查改都会生成查询日志insert查询为了避免数据冲突,如果此前插入过数据,而如果跟主键或唯一键的数据重复那肯定会报错update时也会查询因为更新的时候很可能会更新某一块数据delete查询,只删除符合条件的数据因此都会产生日志,在并发操作非常多的场景下,查询信息会非常多,那么如果都记录下来会导致IO非常大影响mysql性能,因此如果不是在调试环境下,是不建议开启查询日志功能的mysql>showglobalvariableslike'%log%';+-----------------------------------------+---------------------------------+|Variable_name|Value|+-----------------------------------------+---------------------------------+|back_log|50||binlog_cache_size|32768||binlog_direct_non_transactional_updates|OFF||binlog_format|MIXED||binlog_stmt_cache_size|32768||expire_logs_days|0||general_log|OFF||general_log_file|/mydata/data/localhost.log||innodb_flush_log_at_trx_commit|1||innodb_locks_unsafe_for_binlog|OFF||innodb_log_buffer_size|8388608||innodb_log_file_size|5242880||innodb_log_files_in_group|2||innodb_log_group_home_dir|./||innodb_mirrored_log_groups|1||log|OFF||log_bin|ON||log_bin_trust_function_creators|OFF||log_error|/mydata/data/localhost.err||log_output|FILE||log_queries_not_using_indexes|OFF||log_slave_updates|OFF||log_slow_queries|OFF||log_warnings|1||max_binlog_cache_size|18446744073709547520||max_binlog_size|1073741824||max_binlog_stmt_cache_size|18446744073709547520||max_relay_log_size|0||relay_log|||relay_log_index|||relay_log_info_file|relay-log.info||relay_log_purge|ON||relay_log_recovery|OFF||relay_log_space_limit|0||slow_query_log|OFF||slow_query_log_file|/mydata/data/localhost-slow.log||sql_log_bin|ON||sql_log_off|OFF||sync_binlog|0||sync_relay_log|0||sync_relay_log_info|0|+-----------------------------------------+---------------------------------+41rowsinset(0.30sec)查询日志保存路径|general_log_file|/mydata/data/localhost.log|是否开启日志功能,这里我们没有开启|log|OFF|定义日志输出保存位置,可以保存在文件中"FILE"为保存在general_log_file文件上也可以将其保存在表中TABLE(默认保存在mysql库中的general_log)|log_output|FILE|
mysql>usemysql;Databasechangedmysql>showtables;+---------------------------+|Tables_in_mysql|+---------------------------+|columns_priv||db||event||func||general_log||help_category||help_keyword||help_relation||help_topic||host||ndb_binlog_index||plugin||proc||procs_priv||proxies_priv||servers||slow_log||tables_priv||time_zone||time_zone_leap_second||time_zone_name||time_zone_transition||time_zone_transition_type||user|+---------------------------+24rowsinset(0.00sec)这两个值可以同时保存在文件和表中
总结:
查询日志就是记录了查询语句以及启动时间涉及参数如下loglog_out_putFILE,TABLEgeneral_logOFFgeneral_log_file/mydata/data/mysql.log
慢查询日志慢查询日志中记录了市场,明确说明了哪个时间段执行和结束,中间执行了多长时间对于非常繁忙的服务器,如果中途出现了查询速度非常慢的场景中,通常需要启动慢查询日志功能,慢查询日志对性能的影响微乎其微,但是可以详细记录了服务器上的慢查询,因此可以去定位服务器的瓶颈涉及参数:
是否开启慢查询日志功能,建议开启,改为ONslow_query_logOFF保存慢查询日志的位置slow_query_log_file/mydata/data/localhost-slow.log
mysql>showglobalvariableslike'%slow_quer%';+---------------------+---------------------------------+|Variable_name|Value|+---------------------+---------------------------------+|log_slow_queries|OFF||slow_query_log|OFF||slow_query_log_file|/mydata/data/localhost-slow.log|+---------------------+---------------------------------+3rowsinset(0.00sec)
查看并设置慢查询时间周期mysql>showglobalvariableslike'long%';+-----------------+-----------+|Variable_name|Value|+-----------------+-----------+|long_query_time|10.000000|+-----------------+-----------+1rowinset(0.00sec)单位为秒,默认时间超过十秒都叫做慢查询,我们可以修改这个值来定义慢查询的查询时长语句执行超过十秒(无论是由于其他资源征用而导致被阻塞查询过程时间还是其他原因都被称为慢查询)
慢查询的时长:
取决于命令从启动开始到执行结束,中途无论是因为什么原因,都是慢查询,并不是轮到语句执行超过X秒,哪怕没轮到它执行被阻塞单位为秒,可以精确到微秒
将慢查询日志时间设置为毫秒级并执行操作语句,再去查看慢查询日志开启慢查询:
mysql>setglobalslow_query_log=1;QueryOK,0rowsaffected(0.17sec)
mysql>showglobalvariableslike'%slow_qu%';+---------------------+---------------------------------+|Variable_name|Value|+---------------------+---------------------------------+|log_slow_queries|ON||slow_query_log|ON||slow_query_log_file|/mydata/data/localhost-slow.log|+---------------------+---------------------------------+3rowsinset(0.00sec)设置慢查询时间mysql>setgloballong_query_time=0.000001;QueryOK,0rowsaffected(0.00sec)新建会话,并进行简单操作[root@localhost~]#mysqlmysql>showdatabases;mysql>usetest1;mysql>showtables;由于调整的时间间隔极小,所以mysql认为每个操作都是慢查询,都一一记录了我们的操作过程,如下所示:
[root@localhostdata]#tail-Flocalhost-slow.log#Time:
14033115:
50:
21#User@Host:
root[root]@localhost[]#Query_time:
0.000093Lock_time:
0.000000Rows_sent:
1Rows_examined:
0SETtimestamp=1396252221;select@@version_commentlimit1;#Time:
14033115:
50:
28#User@Host:
root[root]@localhost[]#Query_time:
0.030523Lock_time:
0.029807Rows_sent:
10Rows_examined:
10SETtimestamp=1396252228;showdatabases;#Time:
14033115:
50:
59#User@Host:
root[root]@localhost[]#Query_time:
0.000084Lock_time:
0.000000Rows_sent:
1Rows_examined:
0SETtimestamp=1396252259;SELECTDATABASE();#User@Host:
root[root]@localhost[]#Query_time:
0.000029Lock_time:
0.000000Rows_sent:
1Rows_examined:
0usetest1;SETtimestamp=1396252259;#administratorcommand:
InitDB;#Time:
14033115:
51:
22#User@Host:
root[root]@localhost[]#Query_time:
0.000290Lock_time:
0.000087Rows_sent:
1Rows_examined:
1SETtimestamp=1396252282;showtables;我们在数据库进行了4次操作,都一一被记录到日志里[root@localhostdata]#grep'Time'localhost-slow.log|wc-l4在配置文件配置慢查询long_query_time=##如果服务器非常繁忙,经常会产生慢查询的话,那么日志量会非常大,那么需要手工去设置日志滚动功能
事物日志事物日志是innodb专用功能,这里只考虑innod存储引擎相关参数:
在事物提交时,innodb是否将缓冲到文件中同步,只要提交则立刻同步,同时又不会保证每个语句都同步,因此性能不会有特别大的影响1表示事物提交后同步,一般是每间隔1秒钟同步一次,就算有事物丢失那么最多就丢失1秒钟的数据,但是定义为1对mysql的性能影响特别大的,因为不管事物是否提交,每隔1秒钟都会去在同步一次数据,意味着每1秒就消耗一次IO2一般只有事物提交才同步,尤其是事物量非常大的时候,性能是非常明显的,但是如果出现问题会丢失整个事物
|innodb_flush_log_at_trx_commit|1||innodb_locks_unsafe_for_binlog|OFF|
定义内存空间的大小,万一都写在buffer里面,如果进程崩溃,也会丢失事物,因此避免这种情况,一旦事物提交了,那么需要立即同步到磁盘中,而不是间断同步,需要定义以下的参数:
|innodb_log_buffer_size|8388608|
每个日志的单位大小为5MB,如果有些大数据的话,则需要将其调大,否则恢复起来会比较慢,但是太大了也会导致恢复比较慢|innodb_log_file_size|5242880|
在每个组里面提供2个文件,上面有提到过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 管理 日志 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)