MySQL数据备份及恢复(1)

前言

MySQL备份一般采用全库备份加日志备份的方式,根据业务的需要,可以采用每周日凌晨1点进行完全备份以及每小时进行一次增量备份,这样在MySQL故障后可以使用完全备份和日志备份尽可能的去恢复最完整的数据。

一、binlog日志恢复

MySQL的二进制日志记录着该数据库所有增删改的操作日志(前提是需要自己开启binlog),还包括了这些操作的执行时间,binlog的使用场景无外乎就是主从同步以及恢复数据库。开启binlog功能,需要编辑MySQL的主配置文件,如下:

1、查看二进制功能是否开启(如下,值为OFF,则表示未开启):

2、开启二进制日志功能:

[[email protected] ~]#  vim /etc/my.cnf    #在mysqld字段下写入下面配置,以便开启二进制日志并指定二进制文件名
#开启二进制日志,需要指定server-id,否则服务将会启动失败
log-bin=/usr/local/mysql/data/bin_log
server-id=1
[[email protected] ~]# systemctl restart mysqld
#重启后,将在指定的目录下生成两个文件,如下:
[[email protected] data]# pwd
/usr/local/mysql/data
[[email protected] data]# ls | grep bin_log
bin_log.000001   #每次重启mysql服务或执行flush logs命令,都会生成一个新的这样的文件,依次为000001、000002......
bin_log.index       #这个文件存储所有二进制文件的索引

开启二进制日志功能后,所有增删改的操作都会记录到二进制日志文件当中,注意,是增删改的操作,不包括查操作。

3、确定二进制日志功能已开启

4、执行增删改以便测试bin_log是否有记录

mysql> reset master;            #清空所有的二进制文件,从00001开始
<!--创建一个库,并在库中创建一个表-->
mysql> create database test_db1;
mysql> use test_db1;
mysql> create table tb1(id int primary key auto_increment,name varchar(20));
<!--向表中插入两条数据-->
mysql> insert into tb1(name) values(‘zhangsan‘);
mysql> insert into tb1(name) values(‘lisi‘);
#重新开始一个新的日志文件再执行操作。注意,此时上面所有的操作写入的是第一个二进制日志文件
mysql> flush logs;
mysql> delete from tb1 where name=‘lisi‘;    <!--删除插入的第二条数据-->
mysql>  insert into tb1(name) values(‘tom‘);         <!--再插入一条新的数据-->
<!--以上的操作是写入了第二个日志文件-->

5、MySQL中查看二进制日志文件及文件内容

查看二进制日志文件:

查看二进制日志文件内容:

完整的命令格式如下:

SHOW BINLOG EVENTS[IN ‘log_name‘] [FROM pos] [LIMIT [offset,] row_count]
# in:指定要查看的二进制文件;
# from:指定从哪个“pos”位置开始查看
# limit:限制返回的行数,offset是指跳过多少行再显示

注:如果不指定二进制文件名,那么默认显示第一个二进制日志文件中的事件,文件内容中包含了日志文件名、事件的开始位置、事件类型、结束位置、信息等内容。

其他命令:

  • show master logs:也是查看二进制日志文件;
  • PURGE BINARY LOGS:用于删除二进制文件;

例子:

  • PURGE BINARY LOGS TO ‘mysql-bin.00010‘; #把这个文件之前的其他文件都删除掉
  • PURGE BINARY LOGS BEFORE ‘2016-08-28 22:46:26‘; #把指定时间之前的二进制文件删除了

6、使用mysqlbinlog本地查看二进制日志内容

[[email protected] data]# pwd
/usr/local/mysql/data
[[email protected] data]# mysqlbinlog bin_log.000001
#使用-v选项可以查看出日志文件中的详细信息,两个v可以查看出更详细的信息,但是三个vvv也不会有什么作用了
[[email protected] data]# mysqlbinlog -v bin_log.000001
[[email protected] data]# mysqlbinlog -vv bin_log.000001 

7、通过二进制日志恢复数据

假设在开始删除lisi记录的那条sql语句是误操作,现在要通过二进制日志来恢复数据。

1)首先需要找到删除lisi记录的sql语句在二进制日志中的位置,每条sql语句都是一个事务,所以需要从其begin到commit,才算是完整的sql语句。如下:

从上面可以看出,delete事件发生position是219,事件结束是393。

2)事件恢复流程:直接用bin-log日志将数据库恢复到删除位置219前,然后跳过故障点,再进行恢复下面所有的操作,具体恢复流程如下:

导出相关binlog文件(将二进制文件转换为sql语句生成新的文件):

[[email protected] data]# mysqlbinlog bin_log.000001 > /tmp/01.sql
[[email protected] data]# mysqlbinlog --stop-position=219 bin_log.000002 > /tmp/219.sql
[[email protected] data]# mysqlbinlog --start-position=393 bin_log.000002 > /tmp/393.sql

上述指令中,第一条比较好理解,无非就是使用msyqlbinlog查看第一个二进制文件,并生成新文件,后面两条指令呢,--stop-postition意思是查看时到219这个位置不查看,一直到393才又开始接着查看。最后的结果就是新生成的文件中不会包含删除lisi记录的sql语句。

3)删除数据库

mysql> drop database test_db1;

4)利用binlog恢复数据

[[email protected] data]# mysql -uroot -p123.com < /tmp/01.sql   #恢复第一个日志文件
[[email protected] data]# mysql -uroot -p123.com < /tmp/219.sql   #恢复第二个
[[email protected] data]# mysql -uroot -p123.com < /tmp/393.sql    #恢复第三个

5)确定数据已恢复

二、mysqldump备份工具

mysqldump是mysql用于备份和数据转移的一个工具。主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建数据库所需要的 SQL命令,如CREATE DATABASE,CREATE TABLE,INSERT等等。可以用来实现轻量级的快速迁移或恢复数据库。 mysqldump 是将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。 mysqldump一般在数据量很小的时候(几个G)可以用于备份。当数据量比较大的情况下,就不建议用mysqldump工具进行备份了。

mysqldump可以针对单个表、多个表、单个数据库、多个数据库、所有数据库进行导出的操作。

mysqldump使用示例:

1、备份某一个表

[[email protected] backup]# mysqldump -u root -p123.com mysql user > mysql-user.sql          #备份mysql库中的user表
[[email protected] backup]# ls                  #查看备份文件
mysql-user.sql

2、恢复mysql数据库中的user表

[[email protected] backup]# mysql -u root -p123.com mysql < mysql-user.sql 

3、备份mysql库

[[email protected] backup]# mysqldump -u root -p123.com --databases mysql > mysql.sql            #备份mysql库

[[email protected] backup]# ls             #查看备份文件
mysql.sql

4、恢复mysql库

[[email protected] backup]# mysql -u root -p123.com < mysql.sql 

5、备份所有的库(当导出的数据量较大时,可以添加“--opt”选项以优化执行速度)

[[email protected] backup]# mysqldump -u root -p123.com --opt --all-databases > all-data.sql         #备份所有库

[[email protected] backup]# ls              #查看备份文件
all-data.sql

原文地址:https://blog.51cto.com/14154700/2466014

时间: 2024-10-03 22:29:24

MySQL数据备份及恢复(1)的相关文章

mysql数据备份及恢复

mysql数据备份: 1数据备份方式: 方式分类: 物理备份:     直接拷贝库或对应的文件,文件的所有者/组必须是mysql cp -r /var/lib/mysql 目录/备份文件名 cp /var/lib/mysql/user.*  /mydata/ tar -zcvf  /mydata/mysal.tar.gz /var/lib/mysql/mysql/* 只支持myisam储存引擎的表       mysqlhotcopy  -u root -p 123456 数据库名   目录/备

mysql 数据备份和恢复

数据库的备份和恢复 1. 安装mysql 图形管理工具. 2. 使用phpmyadmin 图像化工具. 3.下载地址  http://www.phpmyadmin.net/ 4. 原文地址:https://www.cnblogs.com/chengyangyang/p/10649674.html

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

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

【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 表是保存成文件的形式,因此相对比较容易备份,上面提到的几

Linux下MySQL的备份和恢复

MySQL备份的原因  1. 灾难恢复  2. 审计   3. 测试1234512345 mysql的备份类型  1. 根据服务器的在线状态:     热备:服务器处于运行状态     冷备:服务器出去停止状态     温备:服务器处于半离线状态,只能读,但是不能写  2. 根据备份的数据集:     完全备份:备份整个数据库     部分备份:备份某个表  3. 根据备份时的接口:     物理备份:直接将数据库文件从磁盘上复制出来     逻辑备份:把数据从数据库中提取出来备份成文本文件  

Linux下Mysql数据库备份和恢复全攻略

很多用户都有过丢失宝贵数据的经历,随着大量的数据被存入到MySQL数据库中,再加上错误地使用DROP DATABASE命令.系统崩溃或对表结构进行编辑等操作,都可能酿成灾难性的损失.所以对MySQL数据库进行备份,以备在出现意外时及时进行恢复是非常必要的. 一. 使用mysql相关命令进行简单的本地备份     1 mysqlldump命令 mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法.

MySQL数据备份之mysqldump使用(转)

mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的du

Mysql完全备份和恢复

Mysql完全备份和恢复 实验介绍 数据库备份从物理与逻辑的角度划分可以分为:物理备份.逻辑备份.从数据库的备份策略角度,可以分为完全备份.差异备份.增量备份.这次实验主要介绍完全备份,完全备份优点是备份与恢复操作简单方便,缺点是数据存在大量的重复,占用大量的备份空间,备份时间长. Mysql完全备份 1.使用tar打包文件夹备份 Mysql的数据库文件默认都是保存在安装目录下的data文件夹下面,可以直接保存data文件夹.但是占用的空间很大,可以使用tar打包压缩进行保存.由于数据库文件很大