mysqldump用法,以及用mysqldump做完全+增量备份

利用mysqldump对MySQL的完全备份和增量备份

 备份的目的:当数据是一种重要资产时,我们需要经常对其进行备份,以防止数据损坏时,能够及时将它恢复到损坏时的状态。    

 

备份内容:数据、配置文件、二进制日志、事务日志

备份分类:

    备份类型:

      热备份、温备份和冷备份

      热备份:读、写不受影响;

      温备份:仅可以执行读操作;

       冷备份:离线备份;读、写操作均中止;

    物理备份和逻辑备份

       物理备份:复制数据文件;

       逻辑备份:将数据导出至文本文件中;

   完全备份、增量备份和差异备份;

       完全备份:备份全部数据;

       增量备份:仅备份上次完全备份或增量备份以后变化的数据;

     差异备份:仅备份上次完全备份以来变化的数据

备份工具:xtrabackup, mysqldump               

MyISAM引擎只能支持温备份,InnoDB可以支持热备和温备。

备份策略:完全+增量;完全+差异

mysqldump备份工具介绍

 mysqldump 语法

 mysqldump DB_NAME [tb1] [tb2] 只备份某个数据库,或库中某个表,注:它不包含该数据库的名称,即将来要还原时,必须手动创建数据库

 --master-data={0|1|2}

   0::不记录二进制日志文件及位置:

   1 CHANGE MASTER TO 的方式记录位置,可用于恢复后直接启动从服务器:

   2 CHANGE MASTER TO 的方式记录位置,但默认被注释:

 --lock-all-tables:锁定所有表 MyISAM引擎的表开始备份前,先锁定所有表。

 --flush-logs :备份前,锁定表,执行日志滚动

 —single-transaction 启动热备


 如果指定库中的表均为InnoDB,可以用—single-transaction 启动热备:

   --events 备份事件,备份数据库定义的事件调度器

   --routines 备份存储过程和存储函数 

   --triggers 备份触发器

   备份多个库

   --all-databases: 备份所有库

   --databases DB_NAME,DB_NAME,…备份指定库

   这两个命令由于不止备份一个库,所有还原前可以不用手动创建库。

测试一:mysqldump 完全备份 + 二进制日志做及时点还原 模拟 完全备份+增量备份

测试环境: MySQL 版本:mysql-5.1.73-8

       Linux发行版:CentOS6.8

实验前准备:

1、创建数据库jiaowu tutors表,如下

        创建数据库教务:mysql> CREATE DATABASE jiaowu;

        创建tutors表:

CREATE TABLE `tutors` (

  `TID` smallint(5) unsigned NOT NULL AUTO_INCREMENT,

  `Tname` varchar(50) NOT NULL,

  `Gender` enum('F','M') DEFAULT 'M',

  `Age` tinyint(3) unsigned DEFAULT NULL,

  UNIQUE KEY `TID` (`TID`)

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;  // 创建表结构

INSERT INTO `tutors` VALUES  // 插入表数据

(1,'HongQigong','M',93),(2,'HuangYaoshi','M',63),(3,'Miejueshitai','F',72),(4,'OuYangfeng','M',76),(5,'YiDeng','M',90),(6,'YuCanghai','M',56),(7,'Jinlunfawang','M',67),(8,'HuYidao','M',42),(9,'NingZhongze','F',49);

    2、启用二进制日志

     在配置文件/etc/my.cnf [mysqld]添加 log-bin=mysql-bin mysql-bin表示二进制日志名称);然后重启服务:service mysqld restart

     查看bin_log是否开启:mysql> SELECT @@sql_log_bin;  1:表示开启

         

实验步骤:

1、  锁表、刷新

mysql> FLUSH TABLES WITH READ LOCK;

blob.png

2、  查看当前二进制日志

mysql> SHOW MASTER LOGS;

blob.png

3、  做日志滚动

mysql> FLUSH TABLES WITH READ LOCK;

blob.png

4、  查看滚动后二进制记录起始记录位置:下个事务从mysql-bin.000004106处开始记录:

mysql> SHOW BINARY LOGS;

blob.png

5、  创建备份目录

[root@Paul ~]# mkdir /root/backup

blob.png

6、  做完全备份

[root@Paul ~]# mysqldump -uroot -p jiaowu > /root/backup/jiaowu-`date +%F_%H-%M-%S`

blob.png

7、  查看备份文件

[root@Paul backup]# ls -l /root/backup/

blob.png

8、  更改备份后的属主、属组

[root@Paul backup]# chown -R mysql.mysql /root/backup/

blob.png

9、  查看更改后结果:

[root@Paul backup]# ls -l /root/backup/

blob.png

10、备份结束后,解锁

mysql> UNLOCK TABLE;

blob.png

11、在jiaowu数据库的tutors标准插入新数据

mysql> INSERT INTO tutors (Tname) VALUES ('stu1'),('stu2');

blob.png

12、看表更新后内容

mysql> SELECT * FROM tutors;

    

blob.png

13、进入二进制目录

   [root@Paul backup]# cd /var/lib/mysql

blob.png

 

14、备份更新后的二进制日志

[root@Paul mysql]# cp mysql-bin.000004 /root/backup

blob.png

15、删除所有数据文件

[root@Paul mysql]# rm -rf ./*

blob.png

16、重新启动mysql服务

[root@Paul ~]# service mysqld restart

blob.png

17、创建原数据库

mysql> CREATE DATABASE jiaowu;

blob.png

18、还原数据库

mysql jiaowu < jiaowu.2018-04-21-07-13-59

blob.png

19、查看还原后结果:

mysql> select * from tutors;

blob.png 

 

20、利用二进制日志做及时点还原

[root@Paul backup]# mysqlbinlog mysql-bin.000004 | mysql -uroot –p

blob.png

21、查看还原结果:

mysql> select * from tutors;

blob.png


猜你喜欢

转载自blog.51cto.com/437549/2106166