1.mysqldump+mysqlbinlog介绍

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


2.binlog


2.1介绍

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


2.2用途

  1)主从复制

  2)恢复数据


2.3开启binary log功能

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

  log-bin [=DIR/[filename]]


  其中,DIR参数指定二进制文件的存储路径;filename参数指定二进制文件的文件名,其形式为filename.number,number的形式为000001、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;

MySQL备份与还原_第1张图片


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