zoukankan      html  css  js  c++  java
  • MySQL-日志 备份 恢复

    1、 MySQL日志记录

      日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等

      默认情况下,所有日志创建于mysql数据目录(data目录)


    2、 MySQL日志文件系统的组成

      a、错误日志:记录启动、运行或停止mysqld时出现的问题。

      b、通用日志:记录建立的客户端连接和执行的语句。

      c、二进制日志:记录所有更改数据的语句。还用于复制。

      d、慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。  

      备注: 重点关注二进制日志、慢查询日志,其他了解即可。


    3、错误日志

      1. 查看错误日志的位置

      mysql> show variables like "%log_error%";
      +---------------+-------------------------------------------------+
      | Variable_name | Value |
      +---------------+-------------------------------------------------+
      | log_error | /usr/local/mysql/data/localhost.localdomain.err |
      +---------------+-------------------------------------------------+
      1 row in set (0.27 sec)


    4、 通用日志

      1. 查看通用日志是否开启以及位置

      mysql> show variables like "%general%";
      +------------------+-------------------------------------+
      | Variable_name | Value |
      +------------------+-------------------------------------+
      | general_log | OFF |
      | general_log_file | /usr/local/mysql/data/localhost.log |
      +------------------+-------------------------------------+

      2. 开启通用日志

      mysql> set @@global.general_log=1;

    5、 二进制日志(重点)

       MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录写类型的SQL语句(增删改),不记录读类型SQL语句(select)

          二进制日志作用

      二进制日志主要用于数据库数据恢复和主从复制

    6、 二进制日志相关操作

      1. 查看二进制日志是否开启

      mysql> show variables like "log_bin";
      +---------------+-------+
      | Variable_name | Value |
      +---------------+-------+
      | log_bin | ON |
      +---------------+-------+

      2. 查看每个二进制文件的大小

      mysql> show master logs;
      +------------------+-----------+
      | Log_name | File_size |
      +------------------+-----------+
      | mysql-bin.000004 | 478421400 |
      | mysql-bin.000005 | 9653 |
      | mysql-bin.000006 | 340631484 |
      +------------------+-----------+
      3 rows in set (0.00 sec)

      3. 查看当前二进制日志文件状态

      mysql> show master status;
      +------------------+----------+--------------+------------------+
      | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +------------------+----------+--------------+------------------+
      | mysql-bin.000006 | 107 | | |
      +------------------+----------+--------------+------------------+


      4. 开启二进制日志

      [root@localhost /]# vim /etc/my.cnf

      log-bin=mysql-bin #二进制日志

      5. 查看二进制日志的内容

        [root@localhost /]# /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-000001.bin

        备注: /usr/local/mysql/bin/mysqlbinlog 是MySQL提供的命令,只不过这里敲绝对路径

        /usr/local/mysql/data/mysql-000001.bin 是需要查看的二进制文件内容

      6. 清空所有二进制日志文件

        mysql> reset master;

      7. 新增一个日志文件,新写入的SQL语句,在最新的二进制日志中

        mysql> flush logs;

    8、二进制日志文件恢复数据的实例

        1. 做了一个完整备份

        mysqldump –uroot –p test –l –F > '/tmp/test201507/sql'

        -l 备份时加锁,在整个备份期间,只允许读操作
          -F 即flush logs 可以重新生成新的bin-log日志文件
          

        2. 接下来,模拟进行新操作:

        mysql> insert into users values(3,'jack');
        mysql> update users set name='mary' where id=2;

        然后模拟一次误操作,所有数据库被清空:

        mysql> delete from users;


        3. 准备恢复丢失的数据,开始一个新的bin-log日志(目的是保留需要原来的bin-log日志):

        mysql>flush logs;

        4. 先恢复到之前的完整备份文件

        mysql –uroot –p test –f < '/tmp/test201507.sql';

          5. 接着恢复后面的操作(8:05分),需要从bin-log日志中恢复:

         mysqlbinlog mysql-bin.0000003 --start-position='106' –-stop-position='306' | mysql –uroot -p

        备注:

          mysqlbinlog 使用mysql提供的mysqlbinlog命令

          --start-position 代表开始的位置

          --stop-position 结束的位置,只会将开始位置和结束位置之间的SQL语句拿到

    9、主从复制(重点)

        所谓的主从复制,就是让写操作的SQL语句(insert/delete/update)在一台服务器执行,读操作的SQL语句(select)在另外一台服务器执行。
        我们把负责写的服务器叫做主数据库,简称主库。负责读的服务器,叫做从数据库,简称从库。

    10、主从复制的原理

        1、主库把数据更改记录到二进制日志(Binary Log)中

        2、从库将主库上的二进制日志复制到自己的中继日志(Relay Log)中

        3、从库读取中继日志中的事件(SQL语句),将其重放到从库数据库上执行,从而实现从库数据与主库数据的同步。

    11、 主从复制优缺点

      优点:

        1. 主从复制后,读操作与写操作分别在不同的服务器,减轻了单台服务器的压力
        2. 主从一般配置为一主多从,多个从库,增加查询速度,并且避免了数据库的单点故障


          缺点:

        1. 当有大量数据写入时,从库与主库之间的数据存在一定的时间差。

                2. 主从延迟没有不可避免。

  • 相关阅读:
    leetcode108 Convert Sorted Array to Binary Search Tree
    leetcode98 Validate Binary Search Tree
    leetcode103 Binary Tree Zigzag Level Order Traversal
    leetcode116 Populating Next Right Pointers in Each Node
    Python全栈之路Day15
    Python全栈之路Day11
    集群监控
    Python全栈之路Day10
    自动部署反向代理、web、nfs
    5.Scss的插值
  • 原文地址:https://www.cnblogs.com/onlyzc/p/8417059.html
Copyright © 2011-2022 走看看