closed
logo logo
关于我们

技术分享

技术分享 mysql差异备份

mysql差异备份

2020-10-20

差异备份原理介绍:
差异备份基于差异备份所包含数据的前一次最新完整备份。差异备份仅捕获自该次完整备份后发生更改的数据。这称为差异备份的“基准”**。差异备份仅包括建立差异基准后更改的数据

注意: 在还原差异备份之前,必须先还原其基准备份

每种主要的文件备份类型都可用作一系列差异备份的基准,例如:

  • 差异数据库备份

  • 部分差异备份

  • 差异文件备份

作为一种最佳做法,差异备份的范围应与其基准的范围相同。因此,差异文件备份应基于包括同一组文件和(或)文件组的文件备份

进行差异备份时通常不需要考虑特殊事项。但注意以下情况:

  • 对某个只读数据库进行差异备份。对于只读数据库,单独使用完整备份比同时使用完整备份和差异备份更容易管理。有关详细信息,请参阅备份只读数据库。

  • 完整备份和文件备份混在一起,这创建了多基准差异备份。

  • 您可以创建一个多基准差异备份,其范围将大于单基准备份。但是,多基准差异备份的还原较为复杂,除专家级用户之外,通常应避免使用这种方式。有关详细信息,请参阅使用多基准差异备份。

  • 需要在更改文件组的 IsReadOnly 属性之后执行部分差异备份

1. 差异备份的大小取决于自建立差异基准后更改的数据量。通常,差异基准越旧,新的差异备份就越大。特定的差异备份将在创建备份时捕获已更改的区的状态。如果创建一系列差异备份,则频繁更新的区可能在每个差异中包含不同的数据。当差异备份的大小增大时,还原差异备份会显著延长还原数据库所需的时间。因此,建议按设定的间隔执行新的完整备份,以便为数据建立新的差异基准。例如,您可以每周执行一次整个数据库的完整备份(即完整数据库备份),然后在该周内执行一系列常规的差异数据库备份

2. 在建立基准之后立即执行的差异备份通常明显小于差异基准。这可以节省存储空间和备份时间。但是,当数据库随着时间的推移发生更改时,数据库与特定差异基准之间的差异将增大。差异备份与其基准间隔的时间越长,差异备份可能就越大。这意味着差异备份的大小最终会接近差异基准的大小。较大的差异备份将失去备份更快、更小的优势

3. 在还原过程中,还原差异备份之前,必须先还原其基准。然后只需还原最新的差异备份,即可将数据库前滚到创建差异备份的时间。通常,应该先还原最新的完整备份,然后再还原基于该完整备份的最新差异备份

实例:
//开启mysql二进制日志功能

[root@wbk ~]# vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve

server-id = 1
log-bin = mysql_bin
[root@wbk ~]# service mysqld restart
Shutting down MySQL.... SUCCESS! 
Starting MySQL.. SUCCESS!

//对数据库进行全量备份

[root@wbk ~]# mysqldump -uroot -p'wangbokang!!' /etc/my.cnf /opt/data/ --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > all-20192221846.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@wbk ~]# ll
总用量 8
-rw-r--r--. 1 root root  203 2月  22 18:55 all-20192221846.sql
-rw-------. 1 root root 1757 1月  15 16:56 anaconda-ks.cfg

//往表里添加新内容

mysql> use wbk;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from wbk;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | xixi |   20 |
|  2 | haha |   22 |
+----+------+------+
2 rows in set (0.00 sec)

mysql> insert wbk values (3,'tom',15),(4,'jerry',10);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from wbk;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | xixi  |   20 |
|  2 | haha  |   22 |
|  3 | tom   |   15 |
|  4 | jerry |   10 |
+----+-------+------+
4 rows in set (0.00 sec)

//修改表内内容

mysql> update wbk set age = 25 where id = 4;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from wbk;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | xixi  |   20 |
|  2 | haha  |   22 |
|  3 | tom   |   15 |
|  4 | jerry |   25 |
+----+-------+------+
4 rows in set (0.00 sec)

//模拟误删数据

mysql> drop database wbk;
Query OK, 2 rows affected (0.01 sec)

mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| zabbix             |
+--------------------+
5 rows in set (0.00 sec)

//刷新创建新的二进制日志

[root@wbk ~]# ll /opt/data/
总用量 188504
-rw-r-----. 1 mysql mysql       56 2月  22 14:15 auto.cnf
-rw-r-----. 1 mysql mysql     4392 2月  22 19:28 ib_buffer_pool
-rw-r-----. 1 mysql mysql 79691776 2月  22 19:36 ibdata1
-rw-r-----. 1 mysql mysql 50331648 2月  22 19:36 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 2月  22 14:15 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 2月  22 19:33 ibtmp1
drwxr-x---. 2 mysql mysql     4096 2月  22 14:15 mysql
-rw-r-----. 1 mysql mysql      857 2月  22 19:36 mysql_bin.000002
-rw-r-----. 1 mysql mysql       19 2月  22 19:33 mysql_bin.index
-rw-r-----. 1 mysql mysql        6 2月  22 19:28 mysql.pid
drwxr-x---. 2 mysql mysql     8192 2月  22 14:15 performance_schema
drwxr-x---. 2 mysql mysql     8192 2月  22 14:15 sys
-rw-r-----. 1 mysql mysql    16735 2月  22 19:28 wbk.err
drwxr-x---. 2 mysql mysql    12288 2月  22 16:02 zabbix
[root@wbk ~]# mysqladmin -uroot -p'wangbokang!!' flush-logs
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
[root@wbk ~]# ll /opt/data/
总用量 188508
-rw-r-----. 1 mysql mysql       56 2月  22 14:15 auto.cnf
-rw-r-----. 1 mysql mysql     4392 2月  22 19:28 ib_buffer_pool
-rw-r-----. 1 mysql mysql 79691776 2月  22 19:36 ibdata1
-rw-r-----. 1 mysql mysql 50331648 2月  22 19:36 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 2月  22 14:15 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 2月  22 19:33 ibtmp1
drwxr-x---. 2 mysql mysql     4096 2月  22 14:15 mysql
-rw-r-----. 1 mysql mysql      904 2月  22 19:39 mysql_bin.000002
-rw-r-----. 1 mysql mysql      154 2月  22 19:39 mysql_bin.000003
-rw-r-----. 1 mysql mysql       38 2月  22 19:39 mysql_bin.index
-rw-r-----. 1 mysql mysql        6 2月  22 19:28 mysql.pid
drwxr-x---. 2 mysql mysql     8192 2月  22 14:15 performance_schema
drwxr-x---. 2 mysql mysql     8192 2月  22 14:15 sys
-rw-r-----. 1 mysql mysql    16735 2月  22 19:28 wbk.err
drwxr-x---. 2 mysql mysql    12288 2月  22 16:02 zabbix

//恢复全量备份

mysql> select * from wbk.wbk;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   20 |
|  2 | jerry |   23 |
+----+-------+------+
2 rows in set (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000003 |  3175191 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> show binlog events in 'mysql_bin.000002';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql_bin.000002 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.23-log, Binlog ver: 4 |
| mysql_bin.000002 | 123 | Previous_gtids |         1 |         154 |                                       |
| mysql_bin.000002 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql_bin.000002 | 219 | Query          |         1 |         290 | BEGIN                                 |
| mysql_bin.000002 | 290 | Table_map      |         1 |         339 | table_id: 180 (wbk.wbk)               |
| mysql_bin.000002 | 339 | Write_rows     |         1 |         396 | table_id: 180 flags: STMT_END_F       |
| mysql_bin.000002 | 396 | Xid            |         1 |         427 | COMMIT /* xid=3646 */                 |
| mysql_bin.000002 | 427 | Anonymous_Gtid |         1 |         492 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql_bin.000002 | 492 | Query          |         1 |         563 | BEGIN                                 |
| mysql_bin.000002 | 563 | Table_map      |         1 |         612 | table_id: 180 (wbk.wbk)               |
| mysql_bin.000002 | 612 | Update_rows    |         1 |         672 | table_id: 180 flags: STMT_END_F       |
| mysql_bin.000002 | 672 | Xid            |         1 |         703 | COMMIT /* xid=3776 */                 |
| mysql_bin.000002 | 703 | Anonymous_Gtid |         1 |         768 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql_bin.000002 | 768 | Query          |         1 |         857 | drop database wbk                     |
| mysql_bin.000002 | 857 | Rotate         |         1 |         904 | mysql_bin.000003;pos=4                |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
15 rows in set (0.01 sec)
[root@wbk ~]# mysqlbinlog --stop-position=768 /opt/data/mysql_bin.000002 | mysql -uroot -p'wangbokang!!'
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@wbk ~]# mysql -uroot -p'wangbokang!!'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.7.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from wbk.wbk;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom   |   20 |
|  2 | jerry |   23 |
|  3 | tom   |   15 |
|  4 | jerry |   25 |
+----+-------+------+
4 rows in set (0.00 sec)
                                   
云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 技术分享

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载

请添加好友为您提供支持
jia7jia_7

请拨打电话
为您提供支持

400-9955-698