mysql大数据备份及恢复(一)

Mysql大数据备份和恢复一

MySQL备份一般采取全库备份、日志备份;MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日志记录着该数据库的所有增删改的操作日志还包括了这些操作的执行时间

Binlog的用途:主从同步、恢复数据库

使用binlog工具备份

查看binlog是否开启,因为默认是关闭的

从上图可知off为关闭状态,一般logbin为只读,在/etc/my.cnf下开启

重启数据库

重启后在目录下查看是否生成bin日志,黄色表示为日志

创建数据库,表,数据

创建表的时候 auto_increment为自增

重新开始一个新的日志文件

flush logs;                            #重新生成新的二进制文件

delete from tb1 where id=2;             #删除id列中的序列号为2的数据方便测试

insert into tb1(name) values(‘tom‘);       #创建一个新的数据名为tom

查看数据

查看mysql上的二进制文件日志

查看二进制日志事件

mysql> show binlog events;

+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+

| Log_name         | Pos  | Event_type     | Server_id | End_log_pos | Info                                                                              |

+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+

| mysql-bin.000001 |    4 | Format_desc    |         1 |         123 | Server ver: 5.7.13-log, Binlog ver: 4                                             |

| mysql-bin.000001 |  123 | Previous_gtids |         1 |         154 |                                                                                   |

| mysql-bin.000001 |  154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘                                              |

| mysql-bin.000001 |  219 | Query          |         1 |         316 | create database test1                                                             |

| mysql-bin.000001 |  316 | Anonymous_Gtid |         1 |         381 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘                                              |

| mysql-bin.000001 |  381 | Query          |         1 |         525 | use `test1`; create table tb1(id int primary key auto_increment,name varchar(20)) |

| mysql-bin.000001 |  525 | Anonymous_Gtid |         1 |         590 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘                                              |

| mysql-bin.000001 |  590 | Query          |         1 |         663 | BEGIN                                                                             |

| mysql-bin.000001 |  663 | Table_map      |         1 |         713 | table_id: 108 (test1.tb1)                                                         |

| mysql-bin.000001 |  713 | Write_rows     |         1 |         758 | table_id: 108 flags: STMT_END_F                                                   |

| mysql-bin.000001 |  758 | Xid            |         1 |         789 | COMMIT /* xid=10 */                                                               |

| mysql-bin.000001 |  789 | Anonymous_Gtid |         1 |         854 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘                                              |

| mysql-bin.000001 |  854 | Query          |         1 |         927 | BEGIN                                                                             |

| mysql-bin.000001 |  927 | Table_map      |         1 |         977 | table_id: 108 (test1.tb1)                                                         |

| mysql-bin.000001 |  977 | Write_rows     |         1 |        1026 | table_id: 108 flags: STMT_END_F                                                   |

| mysql-bin.000001 | 1026 | Xid            |         1 |        1057 | COMMIT /* xid=11 */                                                               |

| mysql-bin.000001 | 1057 | Rotate         |         1 |        1104 | mysql-bin.000002;pos=4          | # 此处为日志轮换事件,执行flush logs引起的

+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+

17 rows in set (0.00 sec)

查看指定二进制日志的事件(上面那个命令只能查看默认1的)

mysql> show binlog events in ‘mysql-bin.000002‘;

+------------------+-----+----------------+-----------+-------------+---------------------------------------+

| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |

+------------------+-----+----------------+-----------+-------------+---------------------------------------+

| mysql-bin.000002 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.13-log, Binlog ver: 4 |

| mysql-bin.000002 | 123 | Previous_gtids |         1 |         154 |                                       |

| mysql-bin.000002 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘  |

| mysql-bin.000002 | 219 | Query          |         1 |         292 | BEGIN                                 |

| mysql-bin.000002 | 292 | Table_map      |         1 |         342 | table_id: 108 (test1.tb1)             |

| mysql-bin.000002 | 342 | Delete_rows    |         1 |         391 | table_id: 108 flags: STMT_END_F       |

| mysql-bin.000002 | 391 | Xid            |         1 |         422 | COMMIT /* xid=14 */                   |

| mysql-bin.000002 | 422 | Anonymous_Gtid |         1 |         487 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘  |

| mysql-bin.000002 | 487 | Query          |         1 |         560 | BEGIN                                 |

| mysql-bin.000002 | 560 | Table_map      |         1 |         610 | table_id: 108 (test1.tb1)             |

| mysql-bin.000002 | 610 | Write_rows     |         1 |         654 | table_id: 108 flags: STMT_END_F       |

| mysql-bin.000002 | 654 | Xid            |         1 |         685 | COMMIT /* xid=15 */                   |

+------------------+-----+----------------+-----------+-------------+---------------------------------------+

12 rows in set (0.00 sec)

使用mysqlbinlog工具的-v(--verbose)选项,该选项会将行事件重构成被注释掉的伪SQL语句,如果想看到更详细的信息可以将该选项给两次如-vv,这样可以包含一些数据类型和元信息的注释内容,如

先切换到binlog所在的目录下

mysqlbinlog mysql-bin.000001

mysqlbinlog -v mysql-bin.000001

mysqlbinlog -vv mysql-bin.000001

-h,-P,-p,-u等,这些参数仅在指定了--read-from-remote-server后有效。
恢复导出binlog日志

恢复完成后查看表的数据是否完整

常见的选项有:

--start-datetime  #从二进制日志中读取指定时间戳或者本地计算机时间之后的日志事件

--stop-datetime   #从二进制日志中读取指定时间戳或者本地计算机时间之前的日志事件

--start-position  #从二进制日志中读取指定position 事件位置作为开始

--stop-position   #从二进制日志中读取指定position 事件位置作为事件截至

因为备份得时候把删除那项跳过了,所以id为2的zhangsan也恢复了

使用mysqldump备份恢复

它是用于备份和数据迁移的工具,一般在数据量比较小的情况下使用如几个G,当数据比较大的情况下建议不使用;mysqldump可以对单(多)个表、单(多)个数据库及所有数据库进行导出操作;

mysqldump [options] db_name [tbl_name ...]   #导出指定数据库或单个表

mysqldump [options] --databases db_name ...  #导出多个数据库

mysqldump [options] --all-databases          #导出所有

备份数据库test1

mysqldump -p123456 --flush-logs test1 > /opt/test1.spl

#备份整个数据库,并且重新开启一个新的binlog

mysql -p123456 test1 </opt/test1.spl  #从备份的目录中导入

创建数据测试mysqldump工具

查看数据

创建备份的目录及备份数据库和cp  bin.000001二进制文件

清楚二进制00000.2之前的日志

删除数据测试

然后在进行备份第二个二进制文件

进行数据库恢复

查看表的数据是否恢复

上面数据已经全部恢复 希望能帮到你

时间: 2024-08-07 00:13:11

mysql大数据备份及恢复(一)的相关文章

Mysql大数据备份及恢复

<p>[引自攀岩人生的博客]MySQL备份一般采取全库备份.日志备份;MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日志记录着该数据库的所有增删改的操作日志还包括了这些操作的执行时间</p> Binlog的用途:主从同步.恢复数据库 使用binlog工具备份 查看binlog是否开启,因为默认是关闭的 从上图可知off为关闭状态,一般logbin为只读,在/etc/my.cnf下开启 重启数据库 重启后在目录下查

mysql大数据备份与还原(二)

mysql大数据备份和增量备份及还原 Xtrabackup实现是物理备份,而且是物理热备 目前主流的有两个工具可以实现物理热备:ibbackup和xtrabackup :ibbackup是需要授权价格昂贵,而xtrabackup功能比ibbackup强大而且是开源的 Xtrabackup提供了两种命令行工具: xtrabackup:专用于备份InnoDB和XtraDB引擎的数据: innobackupex:这是一个perl脚本,在执行过程中会调用xtrabackup命令可以实现备份InnoDB,

【windows】环境下mysql的数据备份以及恢复

[windows]环境下mysql的数据备份以及恢复 无论是刚刚入行的'猿友'还是入行很久的'老猿',我相信都会遇到过因为各种原因(很多情况下是自己误删了数据库)的操作.drop databases xxxxx 而误删了线上项目的数据库是一件很恐怖的事情,那么如果大家遇到这种情况怎么办呢?首先不要着急(我感觉说了也白说-,-),先看一看自己的mysql是否开启了binlog日志功能,如果没有???game over !!! 关于查看binlog日志有没有开启,请到自己的Mysql文件下找my.i

MySQL数据库数据备份和恢复详解(上)

本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM和Innodb,文中设计的 MySQL 版本为 5.0.22. 目前 MySQL 支持的免费备份工具有:mysqldump.mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件.MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几

Mysql大数据备份和增量备份及还原

<h2><a href="http://mdsa.51cto.com/act/TechNeo/TechNeo17" target="_blank" style="text-decoration:none;">Tech Neo技术沙龙 | 11月25号,九州云/ZStack与您一起探讨云时代网络边界管理实践</a></h2><br> <p>[引自攀岩人生的博客]Xtraback

大数据备份和恢复应用案例--通过分区表备份和恢复数据

海量数据备份和恢复方案 对于OLAP的数据库的业务特点,是将批量的数据加载入库,然后对这些数据进行分析处理,比如报表或者数据挖掘,最后给业务提供一种决策支持:另外,这类数据库的数据实时性非常高,一旦这些数据处理完毕后,就很少再次使用(有时,也需要对这类数据进行查询). 对于OLAP数据库的备份和恢复可以考虑这样几种方案: 1.使用分布式数据库 将数据分布到多个库里,当数据库恢复时,只需要恢复单个库的数据,大大节省恢复时间. 2.结合分区技术,以传输表空间方式进行备份和恢复 1.建立分区表,将分区

MySQL的数据备份和恢复

用mysqldump命令导出数据,用mysql命令导入数据. 导出: shell>mysqldump -h host -uroot -proot srcdbname(数据库名) [tables(表名)] > data.sql 导入: shell>mysql -h host -uroot -proot destdbname < data.sql 上述方式,库需要先建好:如果想自动建库,利用--database参数即可,例子: mysqldump -h localhost --port

MySQL数据库-完全备份及恢复

MySQL数据库-完全备份及恢复 数据库备份的分类 物理角度: 冷备份:也称脱机备份,特点:关掉数据库再备份 热备份:也称联机备份,特点:开启数据库再备份 温备份:数据库只有可读权限的状态下备份 逻辑角度: 对数据库的对象的备份,例如数据表,及数据表中的一些sql语句等 备份策略角度: 完全备份:每次对数据进行整体的备份 差异备份:在第一次完整备份a数据后,以后的每次的备份是a+b,b就是针对于a数据发生变化的数据,称之为'差异数据'.缺点:b的数据内存会越来越大b+=b,导致数据恢复缓慢.恢复

MySQL大表备份的简单方法

MySQL大表备份是一个我们常见的问题,下面就为您介绍一个MySQL大表备份的简单方法,希望对您学习MySQL大表备份方面能有所帮助. 这里所说的大表是超过4G以上的表,我目前见到过最大为60多G的单表,对于这种表每天一个全备可以说是一件很痛苦的事.那么有没有办法,可以实现一个全备加增量的备份呢.答案当然是有的. 在常规环境直可以用全备加binlog一同保存.这种环境大多可以用一个Slave上进行备份操作. 思路:先停止Slave的同步,刷新buffer,对于Innodb 如果想直接拷贝还需要把