技术分享
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)

- 标签:
-
技术分享