日志文件:6类
      一般查询日志:log,general_log,log_output
      慢查询日志:
      错误日志
      二进制日志
      中继日志
      事务日志

二进制日志:
     记录了当前服务器的数据修改和有潜在可能性影响数据修改的语句
     默认在数据目录下,通常情况下为mysql-bin
     可以通过mysqlbinlog来查看
     时间记录 time
     偏移位置 position
     show master status 查看当前使用的二进制日志和下一个事件开始时的基于的位置

日志滚动:当超过1G,日志会滚动
        可以按照大小定义
                时间定义
                执行flush logs

查看当前正在使用的log日志
     show binary logs

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       996 |
| mysql-bin.000002 |       126 |
| mysql-bin.000003 |     39892 |
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       194 |
+------------------+-----------+

二进制日志的功用
     即时点恢复:
     复制:

清除日志
PURGE { BINARY | MASTER } LOGS
    { TO 'log_name' | BEFORE datetime_expr(某个时间之前) }

查看mysql的日志
SHOW BINLOG EVENTS

mysql> show binlog events\G
*************************** 1. row ***************************
   Log_name: mysql-bin.000001
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 107
       Info: Server ver: 5.5.33-log, Binlog ver: 4

service-id:服务器身份标识

INSERT INTO t1 value(current_date())

Mysql 记录二进制日志的格式
   基于语句:statement
   基于行:row
   混合模式:mixed

指定从那个位置开始读取
mysql> show binlog events in 'mysql-bin.000001' from 371\G
或者
# mysqlbinlog --start-position=371 mysql-bin.000005

mysqlbinlog
   --start-time
   --stop-time
   --start-position
   --stop-position

二进制日志文件内容格式
      事件发生的日期和时间
      服务器ID
      事件结束位置
      事件的类型
      原服务器生成此事件时的线程ID号
      语句时间戳和写入二进制文件的时间差,单位为秒
      错误代码,0表示正常执行
      事件内容
      事件位置(相当于下一事件的开始位置)

服务器参数:
      log_bin = {ON|OFF},还可以是一个文件路径                          
      log_bin_trust_function_creators  不阻止任何存储函数
      sql_log_bin = {ON|OFF} 当前会话是否将二进制文件进入进二进制文件
      sql_log_off 是否将一般查询日志记入查询日志
      sync_binlog 同步缓冲中的二进制到硬盘的时间,0不基于时间同步,只在事件提交时同步
      binlog_format = {|statement|row|mixed}
      max_binlog_cache_size = mysql二进制日志的缓冲区大小,仅用于缓存事务类的语句
      max_binlog_stmt_cache_size 语句缓冲区大小,即事务类和非事务类公用的大小
      max_binlog_size 二进制日志文件的上限,单位为字节

建议:切勿将二进制日志与数据文件放在同一设备

设置二进制日志文件目录:
  # mkdir /data/binlog
  # chown mysql.mysql /data/binlog

vim /etc/my.cnf

加入 log-bin=/data/binlog/mysql-bin

重启mysql服务生效
  # service mysqld restart

可以临时通过sql_log_bin来控制二进制的写入

中继日志:
  对于非从服务器 中继日志没有启用
  relay_log_purge = {ON|OFF} 是否自动清理不在需要的中继日志
  relay_log_space_limit 中继大小是否限制

备份和恢复:
    1.做灾难恢复
    2.做审计
    3.测试

备份:目的用于恢复;对备份数据做恢复测试

备份类型:

根据备份时,数据库服务器是否在线
        冷备:cold  backup
        温备:warm backup 全局施加共享锁,只能读,不能写
        热备:hot backup

根据备份的数据集:
         完全备份 full backup
         部分备份 partial backup

根据备份时的接口(直接备份数据文件还是通过mysql服务器导出数据)
          物理备份:直接复制(归档)数据文件的备份方式
          逻辑备份:把数据从库中提取出来保存为文本文件

根据备份时是备份整个数据还是仅备份变化的数据
          完全备份:full backup
          增量备份:incremental backup
          差异备份:differential backup 从上一个完全备份开始备份

备份策略:
   选择备份方式
   选择备份时间
   考虑到恢复成本
       恢复时长
   考虑备份成本
       锁时间
       备份时长
       备份负载

备份对象:
    数据
    配置文件:
    代码:存储过程、存储函数、触发器
    OS相关的配置文件,如crontab配置计划及相关脚本

跟复制相关的配置信息:
    二进制日志文件

常用的备份工具
  mysqldump(单线程):逻辑备份工具
     InnoDB热备、MyISAM温备、Aria温备
     备份和恢复过程较慢
  mysqldumper:多线程的mysqldump

很难实现差异或增量备份

基于lvm-snapshot
         接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建完成后释放全局锁
         使用cp、tar等工具进行物理备份
         备份和恢复速度较快
         很难实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上尤其如此
  SELECT clause INTO OUTFILE ‘/path/to/somefile’
  LOAD DATA INFILE ‘/path/from/somefile’
      部分备份工具,不会备份关系定义,仅备份表中的数据
      是个逻辑备份工具,快于mysqldump

Innobase:商业备份工具,innobackup 
   Xtarbackup:有Percona提供的开源备份工具
      InnoDB热备,增量备份
      MyISAM热备,不支持增量
      物理备份,速度快

mysqlhotcopy:几乎冷备

mysqldump:仅适用于数据集较小
    使用格式:mysqldump [options] [db_name [tbl_name ...]]
         还原时库应该存在
         -u uername
         -h 主机名
         -p 密码
    恢复时应该使用mysql < /path/to/file.mysql

备份单个库 mysqldump [options] db_name > /path/to/file.mysql
      恢复时如果目标不存在,应先创建数据库,如果不想创建,这使用--databases
    
    # mysqldump -uroot -hlocalhost -p hellodb > /tmp/hello.sql

备份所有的库
        mysqldump --all-databases > /path/to/file.mysql

# mysqldump --all-databases > /tmp/alldb.sql

备份指定的多个库
       --databases tb1 tb2 .....

# mysqldump --databases hellodb mydb > /tmp/hellandmydb.sql

恢复:
       # mysql < /tmp/hellandmydb.sql

注意:备份前要加锁

--lock-all-tables :请求锁定所有表之后在备份,对MyISAM,InnoDB,Aria做温备

--single-transaction:能够对InnoDB存储引擎实现热备

备份代码
    --events:备份事件调度器代码
    --routines:备份存储过程和存储函数
    --triggers:备份触发器
    备份时滚动日志:
         --flush-logs:备份前、请求到锁之后滚动日志
    复制时的同步位置标记
         --master-data={0|1|2}
         0表示不记录,
         1表示记录为change master语句
         2表示记录为注释的change master语句

使用mysqldump备份
        请求锁:--lock-all-tables 或使用--single-transaction进行innodb热备
        滚动日志:--flush-logs
        选定要备份的库 --databases
 记录二进制文件及位置 --master-date

手动请求全局锁
        
        FLUSH [NO_WRITE_TO_BINLOG | LOCAL]  flush_option [, flush_option] ...

flush tables with read lock

flush logs
        
        unlock tables

恢复:
       建议:关闭二进制日志,关闭其他用户的写操作
       应该用souce 恢复

备份策略:基于mysqldump

备份:mysqldump+二进制日志文件
         周日做一次完全备份,备份的同时滚动日志
         周一至周六:备份二进制日志
         
         myadmin flush-logs

恢复:完全备份+各二进制文件至此刻的事件

对于MYsql配置文件,以及与mysql相关的OS配置文件在每次修改后都应该直接进行备份

案例:   对hellodb数据库进行还原操作


    1.查看hellodb数据库表使用的引擎情况,有myisam数据库
    mysql> show table status from hellodb\G

备份hellodb数据库,--master-data-2标记日志文件的位置
    # mysqldump --databases hellodb --lock-all-tables --flush-logs --master-data=2 > /tmp/hello.a.sql

通过命令可以看到此时的位置107,
    mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      107 |              |                  |
+------------------+----------+--------------+------------------+
    或者vim /tmp/hellodb.20160114.sql,也可以看到二进制文件标记

2.模拟失误操作
    创建newtb表,并插入数据
    mysql> create table newtb(name char(30));
    mysql> insert into newtb(name) values('tom'),('lily'),('lucy');


    清空表数据
    mysql> truncate table newtb;
    查看二进制从107位置开始的日志记录
    # mysqlbinlog --start-position=107 /data/binlog/mysql-bin.000004


   将日志中记录这一部分记录截取出来生成增量的sql
   # mysqlbinlog --start-position=107 --stop-position=712 mysql-bin.000005 > /tmp/hello.a.inc.sql

3.还原
    关闭还原操作的日志记录
    mysql> set session sql_log_bin=0;
    还原完整备份
    mysql> source /tmp/hellodb.a.sql
    验证数据库是否存在

还原增量备份
    mysql> source /tmp/hello.a.inc.sql

mysql的日志及利用mysqldump备份及还原的更多相关文章

  1. Android(java)学习笔记247:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)

    1.通过阅读系统源码我们知道: 短信的内容提供者: content://sms/            系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1) ...

  2. Android(java)学习笔记191:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)

    1. 通过阅读系统源码我们知道: 短信的内容提供者: content://sms/            系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1 ...

  3. 利用mysqldump备份mysql

    mysqldump备份机制:通过给定的参数信息和系统表数据,来一张表一张表地获取数据并生成insert语句插入备份文件中,这样由于时间点不一致,就会导致数据不一致,然而对于一个要求强一致性的系统来说, ...

  4. mysqldump备份与还原mysql数据的实例

    有关mysql数据库的备份与还原,我们一般用下面两种方式来处理:1.使用into outfile 和 load data infile导入导出备份数据 本文原始链接:http://www.jbxue. ...

  5. MySQL使用mysqldump备份及还原

    MySQL可以使用mysqldump进行数据的逻辑备份,配合开启bin log日志可以实现数据的全量恢复及增量恢复 MySQL版本查看 修改配置文件记录bin log日志 [mysqld] #bin ...

  6. windows环境下mysql的解压安装以及备份和还原

    系统环境为server2012 1.下载mysql解压版,解压安装包到指定目录 2.在以上目录中,复制一份my-default.ini文件,重命名为my.ini,进行如下修改(按照需要): [mysq ...

  7. 1122Shell脚本之利用mysqldump备份MySQL数据库

    #!/bin/bash #Mysql 自动备份 压缩并上传到 指定ftp #设想每天凌晨3点备份mysql #编辑crontab配置文件 #00 03 * * * backupmysql.sh #压缩 ...

  8. mysql之mysqldump——备份与还原

    导出数据库里的某一张表 [root@localhost ~]# mysqldump -uroot -p test bptest>fi.mysql #导出test数据库中的bptest表 Ente ...

  9. 利用mysqldump备份magento数据库

    在Magento开发和维护过程中,经常需要将Magento的数据库导出.导入,这些工作可以通过mysqldump这个工具来实现. 下面我来简单介绍一下mysqldump在导出导入Magento dat ...

随机推荐

  1. bash执行命令分别输出正常日志和错误日志

    0. 说明 执行bash命令的定时任务时候,希望能把正常的日志输出到一个文件里面,同时如果执行的过程发生异常则把异常日志输出到另一个不同的文件中.方便今后异常排查,极大有利于快速定位出错位置. 需要了 ...

  2. Hihocoder 1329 平衡树·Splay(平衡树)

    Hihocoder 1329 平衡树·Splay(平衡树) Description 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. 小Hi:怎么了? 小Ho:小H ...

  3. 灯 & 树

    这回是两道题一起... [USACO09NOV]灯 [中山市选2009]树 题意:给您一些灯,以及一些边.每次改变一盏灯的时候,它相邻的灯也会变.求把灯状态全部转换的最小操作次数. 解: 解异或方程组 ...

  4. 在Vue中如何使用axios跨域访问数据

    最近在项目中需要用到axios,所以就恶补一下这个axios到底是什么东东.越来它是vue-resource的替代品,官网也说了,以后都用axios, vue-resource不在维护.那么这个axi ...

  5. dojo小代码

    RunSource Using event delegation on an HTML table to highlight rows and columns. ------------------- ...

  6. Python练习1

    一.linux,基于文件大小,创建时间,修改时间,文件内容,文件名称等进行查找汇总和输出 2019-01-04 只操作文本文件 #!/usr/bin/env python # -*- coding: ...

  7. springboot-24-restTemplate的使用

    项目中使用的是HttpClient, 后来改成springboot, 偶然间发现restTemplate { "Author": "tomcat and jerry&qu ...

  8. 面向对象【day07】:类的继承(七)

    本节内容 1.概述 2.类的继承 3.总结 4.练习 一.概述 之前我们说到了类的公有属性和类的私有属性,其实就是类的封装,下面我们来讲讲继承,是面向对象的第二大特性. 面向对象编程 (OOP) 语言 ...

  9. 学习windows编程 day6 之模拟记事本

    //短的函数最好定义为宏 #define BUFFER(x,y) *(y*cxBuffer+x+pBuffer)//取出一个字符 //字符消息 //WM_CHAR,WM_DEADCHAR,WM_SYS ...

  10. 附录A Spring Boot应用启动器

    spring Boot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring- ...