• mysql日志文件


    MySQL的binlog日志的作用
    - 1:用来记录mysql内部增删改查等对MySQL数据有更新内容的记录。像show和select一般不会记录
    - 2:mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000002 - 
    MySQL5.6以后需要用此命令来查看,可以避免出现乱码
    - 3:mysqlbinlog拆库,拆除test库的所有操作,然后进行恢复
    mysqlbinlog -d test mysqlbin.000002 > test.sql
    - 4:mysqlbinlog mysqlbin000002 --start-position=510 --stop-position=1312 -r pos.sql
    输出初始位置为510,结束位置为1312,导出到sql文件
    
    
    mysqlbinlog

    此命令是用来解析mysqlbinlog日志,mysql-bin.index记录了所有的binlog文件。

    --master-data
    如果值等于2,结果如下:
    --CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=191;
    此行会被注释掉,我们要的文件名以及位置点。就是我们的备份点。
    
    如果值等于1,结果如下:
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=191;
    代表这条语句是可执行的。用在slave库上。
    
    错误日志(error log)

    记录MySQL服务进程mysqld在启动/关闭或运行过程中遇到的错误日志信息

    log-error=/var/log/mysqld.log
    
    查询日志(query log)

    1:普通查询日志(general query log):记录客户端连接信息和执行SQL语句信息,一般不建议开启,会造成磁盘I/O。

    show variables like 'general_log%';
    general_log
    general_log_file
    

    2:慢查询日志(slow query log): 记录执行时间超出指定值(long query time)的sql语句。

    slow_query_log = ON
    log-slow-queries=/var/lib/mysql/slow.log
    long_query_time=2
    log-queries-not-using-indexes #未使用索引的语句
    
    二进制日志(binary log)

    记录数据被修改的相关信息

    log-bin = mysql-bin
    log-slave-updates
    
    MySQL清除错误的连接
    mysql> FLUSH HOSTS;
    Query OK, 0 rows affected (0.00 sec)
    
    binlog的三种模式

    1:statement level

    每一条会修改数据的sql都会记录到master的bin-log中。slave在复制的的时候sql进程会解析成原来master端执行过的相同的sql来再次执行。

    优点:解决row level下的缺点,不需要记录每一行数据的变化。减少binlog日志量,节约I/0提高性能。记录Master上所执行的语句细节,以及执行语句时候的上下文信息。

    缺点:bug比较多,会造成mysql复制出现问题,如在存储过程中使用last_insert_id()函数,会使slave和master上得到不一致的ID等等。

    2:Row Level

    日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改。

    优点:binlog中可以不记录执行的sql语句的上下文相关信息,仅仅只需要记录哪一条记录被修改了,修改成什么样了。会清楚的记录下每一行数据修改的细节。不会出现某些特定情况下的存储过程、或function,以及trigger的调用和触发无法被正确复制的问题。

    缺点:binlog日志量会很大。尤其是alter table之类的表结构变更语句,实际上会导致重建整个表。

    3:Mixed Level

    实际上是前两种模式的结合。在mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,在statement 和 row 之间选择一种。新版本中的statment level 还是和以前一样,仅仅记录执行的语句。而新版本的MySQL中对row level模式也做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement 模式来记录,如果sql 语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。

    默认是行模式

      mysql> show variables like 'binlog_format';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | binlog_format | ROW   |
    +---------------+-------+
    1 row in set (0.00 sec)
    
  • 相关阅读:
    浅谈Android内存管理
    adb 常用命令
    ElasticSearch+Logstash+Filebeat+Kibana集群日志管理分析平台搭建
    分布式版本控制系统GIT的使用
    KVM虚拟化原理与基础应用示例
    Nginx反代Mogilefs分布式储存示例
    Redis持久化存储与复制功能简述
    Redis服务搭建与基础功能示例
    常用的NoSQL数据库类型简述
    XtraBackup的备份原理与应用示例
  • 原文地址:https://www.cnblogs.com/skymyyang/p/9181841.html
Copyright © 2020-2023  润新知