• MariaDB——日志文件


    数据库各类日志

     查询日志:
        记录每一条sql语句,建议不开启,因为如果访问量过大,会占用相当大的资源,影响数据库的性能。
         vim /etc/my.cnf.d/server.cnf
         general_log = ON | OFF       #查询日志开关
         general_log_file localhost.log   #查询日志的文件名 (/var/lib/mysql)
         log_output TABLE | FILE | NONE  #查询日志的存储格式

     慢查询日志:
        执行时长超出指定时间的查询操作。(测试命令select sleep(4);)
        slow_query_log = ON | OFF  #开启慢查询日志
        slow_query_log_file = localhost-slow.log  #慢查询日志的文件路径
        long_query_time     #慢查询时长,默认是10s
        log_slow_rate_limit    #如果记录的慢查询日志非常多的话,会按照速率来记录,默认1s记录一个
        log_slow_verbosity=full | query_plan #记录的详细级别

     错误日志:
        mysqld启动和关闭过程中输出的事件信息。
        mysqld运行中产生的错误。
        event scheduler 运行一个event时产生的日志信息。
        在主从复制架构中的从服务器上启动从服务器线程时产生的信息。
        log_error = /var/log/mysql_error.log  #指定错误日志的输出位置。
        log_warnings 为0,表示不记录告警信息。
        log_warnings 为1,表示告警信息写入错误日志。
        log_warnings 大于1,表示各类告警信息,例如有关网络故障的信息和重新连接信息写入错误日志。(默认为2)

     二进制日志:
         针对时间点还原起着至关重要的作用。
         查看二进制日志:
         show master logs;
         show binary logs;
         show binlog events [in 'log_name']
         show master status;
        记录导致数据改变或可能导致数据改变的sql语句。所有的增删改,查询没有记录到二进制日志文件之中。
        log_bin = OFF | ON
        log_bin_basename = /var/lib/mysql/mysql-bin
        binlog_format = statement | row | mixed  #二进制记录格式
         statement:基于语句记录
         row:基于行记录
         mixed:混合记录

     中继日志:
        复制架构中,备服务器用于保存主服务器的二进制日志中读取到的事件。
      
     事务日志:
        transaction log (ib_logfile0 ib_logfile1)
        innodb_buffer_pool_size   #一般设为为物理内存的3/4或者4/5
        innodb_log_files_in_group = 2 #事物日志文件的个数,默认为两个事物日志文件
        innodb_log_file_size=50331468(48m) #事务日志文件的单个大小 48 m
        innodb_log_group_home_dir=./  #事务日志文件所在路径,默认在mariadb的数据目录/var/lib/mysql
        事务型存储引擎自行管理和使用(innodb),myisam引擎不支持事物,外键,行级锁。
         redo log:重做日志
         undo log:撤销日志



    查询日志:
      show variables like '%general_log%';
      #查看general_log与general_log_file的值,默认general_log状态为OFF
      show variables like '%log_output%';
      #查看log_output格式

    打开查询日志:
       [server]
       general_log=1
      show variables like '%general_log%';
      #进入/var/lib/mysql查看查询日志
      tail -f localhost.log
      #记录每一条你的sql语句
     
    慢查询日志:
      执行时长超出指定时间的查询操作。
      #需要注意的是:记录太多,记录太详细也会对数据库的性能造成影响。
      [server]
      slow_query_log=1
      long_query_time=4
      show variables like '%slow%';
      #查看slow_query_log是否开启,查看slow_query_log_file的名称
      show variables like '%long%';
      #查看long_query_time的时间是4s。
      tail -f localhost-slow.log
      select sleep(5); #数据库执行之后会被记录到慢查询日志
     
    二进制日志:
      show master logs;  #如果提示你没有在使用binary logging那么说明你没有开启二进制日志。
      [server]
      log_bin=mysql-bin
      #重启数据库
      show binlog events in ‘mysql-bin.000001’;  #只是记录了一些版本信息,查看内容需要用到mysqlbinlog
      二进制日志文件无法使用vim十进制来查看,只能使用mysql提供的二进制文件查看工具——mysqlbinlog
      mysqlbinlog mysql-bin.000001
      show master logs;  #可以查看到现在使用的二进制文件和文件的大小
      #执行一些sql命令:create database kkk character set utf8;
      #show master logs进行查看二进制的文件大小发生了变化
      #mysqlbinlog mysql-bin.000001查看二进制文件的记录,会发现其中记录了刚刚的sql语句。
      show variables like ‘%binlog_format%';
      #查看二进制日志的记录格式,默认是mixed。(statement按语句记录|row按行记录|mixed混合)
        statement
        基于语句来记录——当你已经有相同的表的时候,就会发生还原不了的情况。
        但是它能够很好的节省空间,你只需要记录一条sql语句。
        row
        基于行记录——也就是基于数据记录。
        还原就避免了基于语句记录的缺点。
        但是非常占用空间。
        mixed
        混合模式——数据库会自己去判定到底记录sql语句还是按行来记录。
        它是一种折中模式——既可能出现两者的缺点,又在某种程度上规避了这种缺点。
      sql_log_bin=1|0    #是否启用二进制日志
      log_bin_index=PATH   #二进制日志索引位置
      sync_binlog=1|0    #设定是否启用二进制日志同步功能
      max_binlog_size=SIZE  #单个二进制文件最大体积,默认为1G
      expire_logs_days=0   #超过多少天就清除二进制日志,默认为0,代表不启用此功能
      #mysql-bin.index使用十进制存储可以使用cat来查看。
      二进制日志手动滚动:flush logs;
      二进制日志文件的构成:
       日志文件:mysql-bin.000001 二级制格式
       索引文件:mysql-bin.index  索引文件
      #查看二进制日志文件的大小:
      show variables like ’%max_binlog_size%';  #其值刚好一个G,如果超过1G就会滚动生成一个新的。
      #查看索引文件的路径
      show variables like ‘%log_bin_index%’;
      #sync_binlog=1|0    #设定是否启用二进制日志同步功能
      数据库支持并发,但是二进制文件不支持。
      开启为1的话,立马写入,就会涉及io操作,会影响数据库的性能,但是数据安全。
      如果为0:等到资源空闲时写入,保障了性能。
      如果数据库down了,设置为1没有丢失,设置为0可能会有数据的丢失。
      #查看二进制日志的过期删除时间
      show variables like ‘%expire_logs_days%’;
      如果要删除,一般不设置自动删除,tar打包自己手动删除。
     
    二进制日志的滚动:
      自动滚动:如果记录的日志大小超过最大值,那么会生成一个新的二进制日志。mysql-bin.000001——>mysql-bin.000002——>mysql-bin.000003
      手动滚动:
       flush logs;    #手动滚动二进制日志
       show master logs;  #查看二进制日志
       show master status;  #查看当前使用二级制日志文件
      在重启数据库之后二进制日志也会滚动。
      #需要注意的是:日志的滚动只能往前,无法向后,因为这样的话还原就会有问题。二级制文件不要随意删除。
      #日志滚动之后,mysql-bin.index会自动帮你记录到文件中。
      #二进制日志是数据库之中最重要的日志。
      #二级制日志的记录格式:时间——server id——end_log_pos——CRC32——thread id——exec_time——error_code
      #sever id 如果你做了数据库的集群那么id号不能一样,它是一种身份标识。
      #如果是主从:都要有一个server id ,如果都为1——它会以为是自己,就不会同步了。
      #end_log_pos 日志的结束位置;thread id 执行事件的线程id号;exec_time 从执行(语句的时间戳)到写入花费的时间。
      #error_code=0 错误代码
     
    基于二进制日志还原数据:
      两种还原方式——基于位置和基于时间
      还原工具——mysqlbinlog
         #--start-datetime=
         #--stop-datetime=
         #--start-position=
         #--stop-position=
     
    中继日志:
      复制架构中,备服务器用于保存主服务器的二进制日志中读取到的事件。
      在复制架构之中,master的写操作记录到二进制文件之中,slave来同步master的写操作,具体过程如下:
       1、slave的 I/O thread请求master的二进制文件
       2、master通过dump thread将二进制的内容发送到salve
       3、slave将接受到的内容存放到自己的中继日志之中
       4、slave在通过SQL thread进行回放,同步到自己的数据库中
     
    事物日志:
      show variables like ‘%buffer_pool%’; #查看buffer_pool的大小
      buffer_pool对于数据库的性能而言,起着重要的作用。搭好数据库,第一件事就要改这个参数。
      事务日志是成组来的,默认是两个交替进行。
      也是非常重要的一个日志。是由innodb自己来管理的。
      大致过程如下:
       1、数据库client的操作,默认开起事务且自动提交,事务操作会写到事务日志之中
       2、再由事务日志同步到磁盘之中
       3、将磁盘中的内容再读到内存,也就是buffer_pool,客户端请求数据就直接到内存之中获取。
      数据库down了,起来之后,会检查事务日志,有哪些事务是提交了的,但没有写入磁盘,做redo操作。
      没有提交的事务,那么做undo操作——rollback——自动帮你撤销。
      mysql的进程是mysqld
     
    错误日志:
      错误日志开启之后,如果不指定文件的路径, 默认在系统日志/var/log/messages
      这个时候记录的日志文件需要注意它的权限,可能会因为权限问题导致无法写入。
     
     
  • 相关阅读:
    java.io.IOException: HTTPS hostname wrong: should be 规格严格
    linux syslog 规格严格
    SVN,HG,GIT 命令说明 规格严格
    pclose : no child process 规格严格
    使用NetBeans6开发OSGi应用(1)——FirstOSGi[88250原创]
    Netbeans大战Eclipse 谁将走向祭坛?
    XP中的重要惯例和规则
    使用NetBeans6开发OSGi应用(1)——FirstOSGi[88250原创]
    简简单单删除所有.svn目录
    简简单单删除所有.svn目录
  • 原文地址:https://www.cnblogs.com/getbird/p/11737088.html
Copyright © 2020-2023  润新知