zoukankan      html  css  js  c++  java
  • MySQL-数据库文件

    1. 概述

      数据库文件主要包含MySQL数据库层面文件和存储引擎层面2中类型的文件。

    1) 数据库层面的文件有参数文件(my.cnf/my.ini),错误文件(error log),慢查询文件(slow log),通用查询文件(genral log),二进制文件(bin log),中继日志文件(relay log),审计日志(auidt log),套接字文件(socket),进程id文件(pid file)和表结构文件(.frm)

    2)存储引擎层面文件有redo log和undo log日志文件

    2. 数据库层面文件介绍

    2.1 参数文件

      参数文件用户保存默认或用户自定义操作选项。用于mysqld服务启动。

    1) 查看实例启动过程中读取参数文件的优先级顺序

    mysql --help|grep -A1 'Default options'
    mysqld --verbose --help |more

    2) 命令参数配置(参数类型:按是否可以在线修改参数划分成两类,动态参数和静态参数)

    mysql> set [global|session] parameter=value;

    3) 查看参数

    mysql> show variables;
    mysql> show vairalbes like '%parameter%';

    2.2 错误日志文件

      错误日志记录MySQL启动,运行,关闭过程中出现的问题。一般存放在数据目录下

    show variables like 'log_error';
    select @@log_error;

    SELECT VARIABLE_NAME, VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME in ( 'log_error', 'log_warnings');

    2.3 二进制日志(binary log)

      用于记录真正执行更改的所有操作(DML语句),并且记录了语句发生时间、执行时长、操作的数据等等。不包含那些没有修改的任何数据的语句,不会记录show,select语句。

      1)二进制日志中常用的定义格式:

        1、语句(statement):默认的记录格式;

        2、行(row):定义的并非数据本身而是这一行的数据是什么;

        3、混合模式(mixed):交替使用行和语句、由mysql服务器自行判断。

        其中基于行的定义格式数据量会大一些但是可以保证数据的精确性。

      2)开启/关闭二进制日志

    -- 写入文件方式(永久)
    vi /etc/my.cnf
    [mysqld]
    log-bin [=DIR  [filename]]
    
    -- 命令方式(临时)
    set global log-bin = 1;

      3)删除二进制日志:

      二进制日志会记录大量的信息(其中包含一些无用的信息)。如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。但是,删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新产生的日志信息不可删(可以做即时点还原)。也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的。若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。

    -- 1. 使用RESET MASTER语句可以删除所有的二进制日志
    
    mysql> reset master; 
    mysql> show binary logs;
    
    -- 2. 根据文件或时间点来删除二进制日志
    
    mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }
    
    -- 其中TO'log_name'表示把这个文件之前的其他文件都删除掉,也可使用BEFORE datetime_expr删除指定时间之前的二进制文件。
    
    mysql> PURGE BINARY LOGS TO 'mysql-bin.000007';
    mysql> PURGE BINARY LOGS BEFORE '2020-03-10 10:26:36'; #使用时间来删除二进制日志

    2.4 慢查询日志(slow log)

      记录所有超过long_query_time时间的语句记录。可以通过mysqldumpslow工具或percona-toolkit工具查看慢查询日志文件,帮助DBA优化慢查询语句。

    -- 相关参数
    SELECT
          VARIABLE_NAME
         ,VARIABLE_VALUE
    -- ,GROUP_CONCAT("'",VARIABLE_NAME,"'")
    FROM
        performance_schema.global_variables 
    WHERE
        VARIABLE_NAME in ( 'slow_query_log', 'slow_query_log_file','long_query_time','');

    慢查询日志分析工具

    -- 按照查询时间维度输出top 10
    mysqldumpslow -s t -t 10 <slow_query_log_file>

    3. innodb存储引擎日志

      innodb存储引擎层面主要有两种日志(redo log和undo log)。innodb的多版本是通过使用undo和回滚段来实现。InnoDB是索引组织表,每行记录实现三个隐藏列(DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR)分别代表每行记录行号,事务ID和回滚指针。

    3.1  redo log日志文件

       redo log用于记录事务操作变化,记录数据被修改后的值。

      redo log记录了所有对innodb数据库的所有操作。它是用来做数据库的crash recover的,是保证数据安全的重功能。InnoDD存储引擎中,默认有2个日志文件(ib_logfile0,ib_logfile1)

    3.2 undo log日志文件 | 回滚段(undo log seg)

      对记录做变更操作时不仅会产生redo记录,也会产生undo记录。

      undo log只记录变更前的旧数据,undo记录默认记录到系统表空间(ibdata1), mysql5.6之后可以设置单独undo 表空间。

  • 相关阅读:
    php字符串处理函数大全 转
    php http Manual
    HTTP协议详解 百度文库
    PHP获取指定日期的上个月的日期 转
    计算指定日期的前N个月日期
    MySQL之count(*)与count(id)效率比较<转>
    生成器
    可迭代对象_迭代器
    变量内容的删除替换和替代
    软件磁盘阵列
  • 原文地址:https://www.cnblogs.com/binliubiao/p/12463011.html
Copyright © 2011-2022 走看看