MySQL备份与还原

1.mysqldump+mysqlbinlog介绍mysql

  mysqldump备份结合binlog日志恢复。MySQL备份通常采起全库备份加日志备份的方式,例如天天执行一次全备份,每小时执行一次二进制日志备份,这样在MySQL故障后可使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间。sql


2.binlog
数据库


2.1介绍vim

  MySQL的二进制日志记录着该数据库的全部增删改的操做日志(前提是要在本身的服务器上开启binlog),还包括了这些操做的执行时间。为了显示二进制文件内容,可使用mysqlbinlog命令查看。服务器


2.2用途ide

  1)主从复制工具

  2)恢复数据spa


2.3开启binary log功能rest

  经过编辑my.cnf中的log-bin选项能够开启二进制日志,形式以下:日志

  log-bin [=DIR/[filename]]


  其中,DIR参数指定二进制文件的存储路径;filename参数指定二进制文件的文件名,其形式为filename.number,number的形式为00000一、000002等。每次重启MySQL服务或运行mysql>flush logs;都会生成一个新的二进制日志文件,这些日志文件的number会不断递增。除了生成上述的文件外还会生成一个名为fiename.index的文件,这个文件中存储全部二进制日志文件的清单,又称为二进制文件的索引。


开启binary log功能的命令操做:

vim /etc/my.cnf

log_bin=/data/mysql/mysql-bin


/etc/init.d/mysqld restart


查看是否开启:

[root@CentOS 7 ~]# mysql

mysql> show variables like 'log_bin';

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

| Variable_name | Value |

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

| log_bin             | ON    |

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

1 row in set (0.00 sec)


3.二进制日志操做的相关命令


3.1查看MySQL Server上的二进制日志

mysql> show binary logs;

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

| Log_name             | File_size  |

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

| mysql-bin.000001 |       120   |

| mysql-bin.000002 |       120   |

| mysql-bin.000003 |     65402 |

| mysql-bin.000004 |  1190629|

| mysql-bin.000005 |       262   |

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

5 rows in set (0.00 sec)


3.2查看二进制日志信息

mysql> mysql> show binlog events in 'mysql-bin.000001';

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

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

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

|mysql-bin.000001|   4    |Format_desc|      3306    |       120        | Server ver: 5.6.36-log, Binlog ver: 4 |

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

1 row in set (0.00 sec)


3.3查看二进制日志的事件

mysql> show binlog events;

image.png


3.4把某个二进制日志以前的其余二进制日志都删除

pugre binary logs to 'mysql-bin.00010';


3.5把指定时间以前的二进制文件删除

pugre binary logs before '2018-5-7 22:46:26';


4.使用binlog恢复以前删除的数据(id=2)


注意:在实际生产环境中,若是遇到须要恢复数据库的状况,不要让用户能访问到数据库,以免新的数据插入进来,以及在主从的环境下,关闭主从。


4.1查看binlog文件,从中找出delete from test.tb1 where id=2

[root@CentOS7 ~]# cd /data/mysql/

[root@CentOS7 mysql]# mysqlbinlog -v mysql-bin.000002    (因为显示太多,就不写了。但从中能够看出delete事件发生position是27,事件结束position是416)


4.2恢复流程

  直接用bin-log日志将数据库恢复到删除位置287前,而后跳过故障点,载进行恢复


4.3因为以前没有作过全库备份,因此使用全部binlog日志恢复,因此生产环境中须要很长时间恢复,导出相关binlog文件

[root@CentOS7 mysql]# mysqlbinlog /data/mysql/mysql-bin.000001 > /tmp/mysql-bin.000001.sql

[root@CentOS7 mysql]# mysqlbinlog --stop-position=287 /data/mysql/mysql-bin.000002 > /tmp/287.sql

[root@CentOS7 mysql]# mysqlbinlog --start-position=416 /data.mysql/mysql-bin.000002 > /tmp/416.sql


4.4删除test数据库

mysql>drop database test;


4.5利用binlog恢复数据

[root@CentOS7 mysql]# mysql -uroot -p123456 < /tmp/mysql-bin.000001.sql

[root@CentOS7 mysql]# mysq -uroot -p123456 < /tmp/287.sql

[root@CentOS7 mysql]# mysql -uroot -p123456 < /tmp/416.sql


4.6恢复后,检查表的数据是否完整

mysql>select * from test.tb1;


4.7mysqlbinlog相关参数

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

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

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

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


5.mysqldump


5.1介绍

  是MySQL用于备份和数据转移的一个工具。主要生产一系列的SQL语句,能够封装到文件,该文件包含全部重建数据库所需的SQL命,如create database、create table、insert等。能够用来实现轻量级的快速迁移或恢复数据库。

  mysqldump是将数据表导成SQL脚本文件,在不一样的MySQL版本之间升级时相对比较合适。

  

5.2使用建议

  通常在数据量很小的时候(几个G)能够因为备份。当数据量比较大的状况下,不建议使用mysqldump进行备份


5.3使用对象

  能够针对单个表、多个表、单个数据库、多个数据库、全部数据库进行导出的操做


6.mysqldump相关操做命令


6.1导出数据库test

mysqldump -uroot -p --flush-logs test > /tmp/terst.sql

          --flush-logs  完整备份的时候从新开启一个新的binlog


6.2数据库的导入

mysql -uroot -p test > /tmp/test.sql


6.3导出指定数据库或单个表

mysqldump [options] db_name [tbl_name]


6.4导出多个数据库

mysqldump [options] --databases db_name


6.5导出全部

mysqldump [options] --all-databases

相关文章
相关标签/搜索