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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

技术分享图片

2、  查看当前二进制日志

mysql> SHOW MASTER LOGS;

技术分享图片

 

3、  做日志滚动

mysql> FLUSH TABLES WITH READ LOCK;

技术分享图片

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

mysql> SHOW BINARY LOGS;

技术分享图片

5、  创建备份目录

[[email protected] ~]# mkdir /root/backup

技术分享图片

6、  做完全备份

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

技术分享图片

7、  查看备份文件

[[email protected] backup]# ls -l /root/backup/

技术分享图片

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

[[email protected] backup]# chown -R mysql.mysql /root/backup/

技术分享图片

9、  查看更改后结果:

[[email protected] backup]# ls -l /root/backup/

技术分享图片

10、备份结束后,解锁

mysql> UNLOCK TABLE;

技术分享图片

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

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

技术分享图片

12、看表更新后内容

mysql> SELECT * FROM tutors;

    

技术分享图片

 

13、进入二进制目录

   [[email protected] backup]# cd /var/lib/mysql

技术分享图片

 

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

[[email protected] mysql]# cp mysql-bin.000004 /root/backup

技术分享图片

15、删除所有数据文件

[[email protected] mysql]# rm -rf ./*

技术分享图片

16、重新启动mysql服务

[[email protected] ~]# service mysqld restart

技术分享图片

17、创建原数据库

mysql> CREATE DATABASE jiaowu;

技术分享图片

18、还原数据库

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

技术分享图片

19、查看还原后结果:

mysql> select * from tutors;

技术分享图片 

 

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

[[email protected] backup]# mysqlbinlog mysql-bin.000004 | mysql -uroot –p

技术分享图片

21、查看还原结果:

mysql> select * from tutors;

技术分享图片

 

 

 

 

 

 

 


以上是关于mysqldump用法,以及用mysqldump做完全+增量备份的主要内容,如果未能解决你的问题,请参考以下文章

mysqldump 的用法

mysql 用mysqldump时出现错误 啥回事?

mysql用mysqldump命令备份之后不能正确还原

mysql怎么导出数据库sql文件

为啥我的电脑CMD 中mysqldump和mysql命令不能用

如何用mysqldump