基于mysql社区版5.7,严重声明:本文中图方便直接写入了-p数据库密码,在生产环境中如果指定了一定要使用history -C清空历史命令记录哦,所有博客作者原创纯手打,转载一定要注明本博客链接,感谢!

通过mysqldump方式进行备份和恢复

  • 物理备份:拷贝mysql下的数据目录将其备份即为物理备份。

  • 逻辑备份:使用mysqldump进行备份可以进行逻辑备份。

  • 完全备份:备份所有数据。

  • 增量备份:备份上次备份后,所有新产生的数据。

  • 差异备份:备份完全备份后,所有产生的数据。

 mysqldump -uroot -ppassword 库名 > /目录/备份文件名.sql
#使用mysqldump逻辑备份时会自动锁表,导致数据无法写入。正好可以使用这一特性,组合--flush-logs刷新binlog日志,这样
#可以使得备份完成后刷新日志,对日志进行断点。可以在出现故障的第一时间使用备份后开始的binlog进行恢复,可以提升一部分效率。

备份时库名表示方式:

* --all-databases 或 -A  		     //备份所有库
* 数据库名 //备份单个库
* 数据库名 表名 //单张表
* -B 数据库1 数据库2 //多个库
mysql -uroot -ppassword [库名] < 目录/xxx.sql

通过binlog日志进行恢复

​ binlog日志也称作二进制日志,记录除查询外的所有的SQL命令,可以用于数据备份和恢复,配置mysql主从同步的必要条件。

  • 要使用binlog日志必须要要先打开binlog日志记录功能,在/etc/my.cnf下打开#log_bin注释

    log_bin=/binlog存放目录/命名前缀
    # 可以单独只打开log_bin,而不指定路径和名字,将默认存放到mysql主文件夹中,在rpm包安装中默认路径是/var/lib/mysql目录,名称
    #前缀也可以不指定默认使用主机名作为前缀,设定了存放目录后要给mysql写入权限才能使用,如果不给写入权限会导致服务无法启动。
    server_id=1
    # 指定服务器ID值范围1-255,开启binlog一定要设置服务器ID不设定也会无法启动服务。
    max_binlog_size=数值m
    # 指定日志文件容量,默认1G
    binlog_format="Mixed"
    # 指定binlog日志记录模式,修改为mixed模式。三种日志记录模式分别是:row(行模式)、statement(报表模式)、mixed(混合模式)
  • 在修改配置文件后需要将mysql重启服务才能生效。

    show master status ;
    File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
    当前日志文件 偏移量 只记录指定数据库的二进制日志 不记录指定数据库的二进制日志 已执行的事务编号
    • 看到File和Positiion有值后即为打开成功。

    • 在数据库主从同步的时候也是必须要打开binlog日志的。

    • 删除指定编号之前的binlog日志文件:purge master logs to "binlog文件名"。

    • 删除所有的binlog日志,重建日志:reset master。

  • 通过在数据库命令行中查询binlog日志查看日志记录模式是否改成混合模式。

    show variables like "%binlog_format%";
    #如果values是MIXED则说明开启了混合模式。

    说到这里又要扯到mysql binlog三种模式。

    模式 优点 缺点
    row(行模式) 非常清楚记录下每一行数据被修改的细节,可以很好支持存储过程和function以及trigger调用和触发器。 主从同步占用大量磁盘IO,日志量巨大。
    statement(报表模式) 记录每一条修改数据的SQL语句事件,并非每条更改记录。减少了binlog日志量,节约磁盘IO,提升性能。 函数、存储过程的复制不能很好的支持,导致有时主从同步出现问题。
    Mixed(混合模式) MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志格式,也就是在Statement和Row之间选择一种,缓和了磁盘IO,和日志文件大小。 兼顾解决磁盘IO问题,但未测试函数、存储过程等。(看下方)
    # at 285168
    #191014 23:35:10 server id 1 end_log_pos 285199 CRC32 0x0cb3a5df Xid = 3048
    COMMIT/*!*/;
    # at 285199
    #191014 23:36:23 server id 1 end_log_pos 285264 CRC32 0x9d6c36f7 Anonymous_GTID last_committed=1012 sequence_number=1013
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 285264
    #191014 23:36:23 server id 1 end_log_pos 285342 CRC32 0xa7d96de8 Query thread_id=1016 exec_time=0 error_code=0
    SET TIMESTAMP=1571067383/*!*/;
    BEGIN
    /*!*/;
    # at 285342
    #191014 23:36:23 server id 1 end_log_pos 285439 CRC32 0x379d2612 Query thread_id=1016 exec_time=0 error_code=0
    SET TIMESTAMP=1571067383/*!*/;
    delete from userdb2.tb1
    /*!*/;
  • 通过binlog时间区间/偏移量进行恢复

       mysqlbinlog [选项] binlog日志文件名 | mysql -uroot -p
    选项
    --start-datetime="yyyy-mm-dd hh:mm:ss"
    --stop-datetime="yyyy-mm-dd hh:mm:ss"
    --strat-position=偏移量
    --stop-position=偏移量

    恢复思路:

    • 第一步首先通过上次的完整备份恢复到完整备份之前的状态。
    • 第二步通过binlog定位到完整备份之后到当前删库之前的偏移量得到起始偏移量和结束偏移量(或者时间)。
    • 第三步准确恢复校对数据。
    • 思路校验:
    • 先创建测试库测试表然后通过循环进行插入数据。
    mysql -uroot -p12345 -e "create database testdb charset=utf8;"
    mysql -uroot -p12345 -e "create table testdb.testtb1(id int);"
    for i in {1..1000};do mysql -uroot -p12345 -e "insert into testdb.testtb1(id) values($i);" ;done
    • 然后通过mysqldump对数据库testdb进行完整备份。
    mysqldump -uroot -p12345 --flush-logs -B testdb > /tmp/testdb.sql
    #参数-B和不加有何区别?
    #1.区别就在于加参数B后可以指定备份数据库列表。
    #2.生成的数据库备份文件中含有创建数据库和选择数据库的指令。
    #CREATE DATABASE /*!32312 IF NOT EXISTS*/ `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */;
    #USE `testdb`;
    • 模拟用户写入数据1001条。
    for i in {3000..4000};do mysql -uroot -p12345 -e "insert into testdb.testtb1(id) values($i);" ;done && mysql -uroot -p12345 -e "insert into testdb.testtb1(id) values(666);" ;
    • 然后测试删库
    mysql -uroot -p12345 -e "drop database testdb;"
    • 然后使用完整备份记录进行恢复。
    mysql -uroot -p12345 < testdb.sql
    • 使用上次完整备份的记录恢复后,中间还有用户写入的1000条数据,可以通过binlog偏移量(时间差)进行恢复,先定位上次备份结束的位置
    [root@db-master tmp]# mysql -uroot -p12345 -e "select count(*) from testdb.testtb1"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +----------+
    | count(*) |
    +----------+
    | 1000 |
    +----------+ # at 869709
    #191015 0:19:55 server id 1 end_log_pos 875708 CRC32 0x9b4fd429 Query thread_id=3032 exec_time=0 error_code=0
    SET TIMESTAMP=1571069995/*!*/;
    ******************************************************************************************
    内容过多省略
    ******************************************************************************************
    # at 875708
    #191015 0:19:56 server id 1 end_log_pos 296078 CRC32 0x84203c10 Query thread_id=4040 exec_time=0 error_code=0
    SET TIMESTAMP=1571071195/*!*/;
    insert into testdb.testtb1(id) values(666)
    /*!*/;
    • 通过偏移量进行恢复(也可以指定binlog文件和结束偏移量恢复到删库前一条,不带开始偏移量。)
    mysqlbinlog --strat-position=869709 --stop-position=875708 /logfile/lqh.000001 | mysql -uroot -p12345

mysql多种备份与恢复方式一的更多相关文章

  1. mysql多种备份方式比较及实现

    Mysql备份 MySQL的备份和还原: 备份:存放为副本-->数据备份 RAID1,RAID10:保证硬件损坏而不会业务中止,不能保证逻辑上的损害 例如:DROP TABLE mydb.tb1 ...

  2. MySQL多种安装方式选择

    1.rpm包安装方式 rpm包的安装方式非常简单,这里以el6平台下的mysql-5.6.34版本为例,首先,要通过上述搜狐镜像地址下载到如下四个MySQL相关软件安装包. a.下载安装包 MySQL ...

  3. 2020重新出发,MySql基础,MySql数据库备份与恢复

    @ 目录 MySQL数据库备份与恢复 数据库为什么需要备份 MySQL备份类型 MySQL热备份及恢复 逻辑备份 mysqldump SELECT INTO-OUTFILE mydumper 裸文件备 ...

  4. Linux 平台MySQL启动关闭方式总结

    MySQL的启动方法有很多种,下面对比.总结这几种方法的一些差异和特性,下面实验的版本为MySQL 5.6.如有疏漏或不足,敬请指点一二.   1:使用mysqld启动.关闭MySQL服务 mysql ...

  5. mysql查询优化之一:mysql查询优化常用方式

    一.为什么查询速度会慢? 一个查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中在“执行”阶段包含了大量为了检索数据到存储引擎 ...

  6. MYSQL的备份与恢复--逻辑备份mysqldump

    目录 0.备份与恢复概述 1.逻辑备份-完整备份与恢复 2.逻辑备份-增量备份与恢复 (1)环境准备 (2)恢复全量数据 (3)恢复增量备份 3.新来的开发妹子删了库! (1)模拟环境准备 (2)全备 ...

  7. MYSQL的备份与恢复--物理备份xrabackup

    目录 1.数据库完整备份与恢复 (1)环境准备 (2)完全备份恢复流程 2.数据库增量备份与恢复 (1)增量和差异概述 (2)增量备份和恢复 3.数据库差异备份与恢复 4.简单命令进行物理备份 5.实 ...

  8. C#高性能TCP服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...

  9. C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍

    在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一 ...

随机推荐

  1. ELK 学习笔记之 Logstash之inputs配置

    Logstash之inputs配置: input plugin doc: https://www.elastic.co/guide/en/logstash/current/index.html 插件很 ...

  2. JVM(一)内存分配

    方法区: ①存储被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码数据 ②又称为永久代,仅对于Hotspot来讲,JRockit和IBM J9里面没有永久代的概念,1.8以后是元空间,直接使 ...

  3. .NET斗鱼直播弹幕客户端(上)

    现在直播平台由于弹幕的存在,主播与观众可以更轻松地进行互动,非常受年轻群众的欢迎.斗鱼TV就是一款非常流行的直播平台,弹幕更是非常火爆.看到有不少主播接入弹幕语音播报器.弹幕点歌等模块,这都需要首先连 ...

  4. MFC底层窗口实现

    简要说明 MFC是微软的一个基础类库,如果在Windows平台上做GUI的开发,这是一个不错的选择.简单的记录MFC学习过程中的需要掌握或者后期需要查看的知识点. Windows消息机制 操作系统首先 ...

  5. JavaScript ES6函数式编程(一):闭包与高阶函数

    函数式编程的历史 函数的第一原则是要小,第二原则则是要更小 -- ROBERT C. MARTIN 解释一下上面那句话,就是我们常说的一个函数只做一件事,比如:将字符串首字母和尾字母都改成大写,我们此 ...

  6. web开发基础之HTTP协议

    HTTP协议 HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数 ...

  7. 张高兴的 .NET Core IoT 入门指南:(五)串口通信入门

    在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.IO.Ports NuGet 包中.之所以 ...

  8. 1002. 写出这个数 (20)-PAT乙级真题

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字.输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每一 ...

  9. 代码审计-phpcms9任意文件读取

    漏洞文件: /phpcms/modules/content/down.php download函数 这个函数开始几行代码的作用和init函数中的几乎一样,都是从parse_str 解析传入的a_k参数 ...

  10. 2019.4.22 python_Flag

    想了很久  最后觉得还是对编程的知识点好好重新的拉一边 回炉重造并不可笑 虽然从C到java到php到python 有两年的时间了 但是很多知识点都是零零碎碎,没有花时间复习和记录 所以决定从pyth ...