innobackupex全量备份+增量备份手记

本文介绍MySQL数据库的全量备份与增量备份过程,并演示了如何进行数据恢复操作。包含具体的备份命令、恢复步骤及权限调整等关键环节。

全量备份

查库

[root@localhost ~]# service mysqld5612 status
[root@localhost ~]# mysql -uroot -proot
mysql> select * from t1.test1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

mysql> select * from t5.test1;
+------+------+
| id   | name |
+------+------+
|    3 | c    |
|    2 | b    |
|    1 | a    |
+------+------+
3 rows in set (0.00 sec)

备份

[root@localhost ~]# mkdir /backups/mysql/ex
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="root" /backups/mysql/ex/$(date +%Y%m%d)/ --no-timestamp --parallel=2
..........
.....
innobackupex: Backup created in directory '/backups/mysql/ex/20151026'
innobackupex: MySQL binlog position: filename 'mysql-bin.000053', position 120
151026 10:10:24  innobackupex: Connection to database server closed
151026 10:10:24  innobackupex: completed OK!

删库

[root@localhost ~]# mysql -uroot -proot
.....
mysql> delete from t1.test1;
Query OK, 3 rows affected (0.33 sec)

mysql> drop table t1.test1;
Query OK, 0 rows affected (0.12 sec)

mysql> select * from t1.test1;
ERROR 1146 (42S02): Table 't1.test1' doesn't exist
mysql> exit
Bye

生成恢复文件

[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --use-memory=512m --apply-log /backups/mysql/ex/20151026/

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 177043625
151026 10:13:18  innobackupex: completed OK!
[root@localhost ~]# service mysqld5612 stop
Shutting down MySQL........ SUCCESS! 

恢复

[root@localhost ~]# rm -rf /home/data/mysql/data/*
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /backups/mysql/ex/20151026/
....
innobackupex: Finished copying back files.

151026 10:15:10  innobackupex: completed OK!

[root@localhost ~]# chown -R mysql:mysql /home/data/mysql/data/
[root@localhost ~]# service mysqld5612 start
Starting MySQL.................................. SUCCESS! 
[root@localhost ~]# mysql -uroot -proot
...
mysql> select * from t1.test1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.06 sec)

mysql> exit
Bye

增量备份

备份

命令丢失待补充

151026 12:48:05  innobackupex: completed OK!

生成恢复文件

[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=backup --password="backup" /backups/mysql/ex/innobackupex_full_20151026_2/ --incremental-dir=/backups/mysql/ex/innobackex_incre_2_2/ --apply-log
....
151026 12:48:37  innobackupex: completed OK!

恢复

[root@localhost ~]# innobackupex --apply-log /backups/mysql/ex/innobackupex_full_20151026_2/
...
151026 12:54:01  innobackupex: completed OK!

修改文件权限

[root@localhost ~]# ll /home/data/mysql/data/
total 5242932
drwxr-xr-x. 2 root root       4096 Oct 26 12:53 business_db
-rw-r--r--. 1 root root 1073741824 Oct 26 12:53 IBdata1
...
-rw-r--r--. 1 root root        693 Oct 26 12:53 xtrabackup_info
[root@localhost ~]# chown -R mysql:mysql /home/data/mysql/data/
[root@localhost ~]# ll /home/data/mysql/data/
total 5242932
drwxr-xr-x. 2 mysql mysql       4096 Oct 26 12:53 business_db
-rw-r--r--. 1 mysql mysql 1073741824 Oct 26 12:53 IBdata1
...
[root@localhost ~]# service mysqld5612 start
Starting MySQL...........
备份增量备份存在多方面的区别: - **备份内容**:备份备份所有选定的数据和结构,而增量备份备份自上一次备份或上一次增量备份后增加或被修改的文件。例如第一次增量备份的对象是备后产生的增加和修改的文件,第二次增量备份则针对第一次增量备份后产生的增加和修改文件,依此类推[^1]。 - **备份基础**:备份可独立进行,不依赖于之前的备份增量备份必须基于上一次完备份增量备份,需在的基础上操作,多次增量备份会形成备份链条,每个增量备份都依赖前面的备份[^2][^3]。 - **数据恢复**:备份恢复时只需使用这一次的备份数据即可,恢复过程相对简单;增量备份如果要恢复到最新状态,需要先恢复备份,再按顺序恢复后续的增量备份,一旦备份链条中有备份丢失或损坏,就无法恢复最新数据[^3]。 - **实现方式**:在数据库方面,备份是对整个数据库进行完整的备份增量备份则是针对数据库的bin - log日志进行备份,需要开启数据库的bin - log日志功能[^2]。 ### 代码示例 以下是一个简单的Python示例,模拟备份增量备份的过程: ```python import os import shutil # 模拟源数据目录 source_dir = 'source_data' # 模拟备份目录 full_backup_dir = 'full_backup' # 模拟增量备份目录 incremental_backup_dir = 'incremental_backup' # 备份函数 def full_backup(): if os.path.exists(full_backup_dir): shutil.rmtree(full_backup_dir) shutil.copytree(source_dir, full_backup_dir) print("备份完成") # 增量备份函数 def incremental_backup(last_backup_dir): if not os.path.exists(incremental_backup_dir): os.makedirs(incremental_backup_dir) for root, dirs, files in os.walk(source_dir): for file in files: source_file = os.path.join(root, file) relative_path = os.path.relpath(source_file, source_dir) last_backup_file = os.path.join(last_backup_dir, relative_path) incremental_backup_file = os.path.join(incremental_backup_dir, relative_path) if not os.path.exists(last_backup_file) or os.path.getmtime(source_file) > os.path.getmtime(last_backup_file): incremental_dir = os.path.dirname(incremental_backup_file) if not os.path.exists(incremental_dir): os.makedirs(incremental_dir) shutil.copy2(source_file, incremental_backup_file) print("增量备份完成") # 执行备份 full_backup() # 执行增量备份 incremental_backup(full_backup_dir) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值