mysql 压缩全量备份软件_Percona Xtrabackup实现mysql全量备份和增量备份

########################################################################

###        安装mysql或者mariaDB本地也要装mysql或者mariaDB相关的包          ##

########################################################################

#######################################

##   xtrabackup 的安装                ###

#######################################

[root@localhost ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm # 安装指定的yum源

[root@localhost ~]# yum -y install percona-xtrabackup.x86_64 # 安装软件

#######################################

##  全量备份服务器的mysql数据         ###

#######################################

1)创建当天备份数据保存的路径

[root@localhost ~]# mkdir -p /backup/mysql/full/2015-05-07

2)全量备份服务器的数据(不压缩)

[root@localhost full]# /usr/bin/innobackupex --user=root --password=123456789 --host=localhost --port=3306 --defaults-file=/etc/my.cnf /backup/mysql/full/2015-05-07/

3) 修改配置文件,增加[mysqld] 选项防止在恢复数据时报错

[root@localhost full]# vi /etc/my.cnf

[mysqld]

datadir="/var/lib/mysql"

########################################

###   全量备份数据恢复                ####

########################################

1) 停止mysql

[root@localhost full]# service mysql stop

2) 模拟数据丢失

[root@localhost ~]# mv /var/lib/mysql /var/lib/mysql_bak

Bye

3) 用上面备份的数据恢复

通过--apply-log指明将日志应用到数据文件上

[root@localhost full]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --apply-log /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

3.1 如果数据库目录为空,可以使用--copy-back选项用于执行恢复操作。因为使用--copy-back恢复要求恢复的目录必须为空

[root@localhost full]# mv /var/lib/mysql /var/lib/mysql_old

[root@localhost full]# mkdir /var/lib/mysql

[root@localhost full]# /usr/bin/innobackupex --user=root --password=123456789 --copy-back --defaults-file=/etc/my.cnf   /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

[root@localhost full]# chown -R mysql:mysql /var/lib/mysql  # 修改所有者,所属组

[root@localhost full]# service mysql start # 启动mysql

[root@localhost full]# mysql -u root -p  # 登录查看数据是否恢复

Enter password:

MariaDB [(none)]> show databases;  # 发现数据已经恢复

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test_db            |

+--------------------+

3.2 如果数据库目录不为空,使用直接copy的方法恢复数据(不常用)

rm -f /var/lib/mysql/ibdata/ib* # 如果innodb数据文件放在单独的目录,需要单独删除。 我这里不是单独放置的

[root@localhost full]# rm -f /var/lib/mysql/ib*  # 删除innodb数据文件  # 如果是恢复MyISAM引擎的数据表则没必要执行这一步

[root@localhost full]# rm -rf /var/lib/mysql/test_db # 删除指定的数据库test_db

# 恢复

[root@localhost full]# cp -r /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/test_db /var/lib/mysql/

[root@localhost full]# cp -r /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/ib* /var/lib/mysql/  # 如果innodb数据文件放在单独的目录,需要单独复制

[root@localhost full]# chown -R mysql:mysql /var/lib/mysql  # 修改所有者,所属组

[root@localhost full]# service mysql start

[root@localhost full]# mysql -u root -p123456789  # 登录数据库查看数据已经恢复

MariaDB [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test_db            |

+--------------------+

4 rows in set (0.00 sec)

MariaDB [(none)]> use test_db;

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

MariaDB [test_db]> select * from test_table1;

+------+----------+

| id   | name     |

+------+----------+

|    1 | zhangsan |

|    2 | lisi     |

|    3 | wangwu   |

|    4 | zhaoliu  |

|    5 | guqi     |

+------+----------+

5 rows in set (0.00 sec) # 数据已经恢复

##############################################

###              增量备份                    ##

##############################################

1)开启二进制日志

[root@localhost ~]# vi /etc/my.cnf

[mysqld]

datadir="/var/lib/mysql"

log-bin=/data/mysql/log/mysql-bin

[root@localhost ~]#  service mysql restart

2)增量备份是建立在全量备份的基础上的所以先确保有一次全量备份,全量备份前面已经介绍

3) 我们往数据库中添加数据,进行第一次增量备份

MariaDB [test_db]> insert into test_table1 values(6,'xiaoming');

Query OK, 1 row affected (0.00 sec)

MariaDB [test_db]> select * from test_table1;

+------+----------+

| id   | name     |

+------+----------+

|    1 | zhangsan |

|    2 | lisi     |

|    3 | wangwu   |

|    4 | zhaoliu  |

|    5 | guqi     |

|    6 | xiaoming |

+------+----------+

6 rows in set (0.00 sec)

[root@localhost ~]# mkdir -p /backup/mysql/increment/2015-05-07 # 创建增量备份保存的路径

4) 进行第一次增量备份

[root@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --incremental-force-scan --incremental /backup/mysql/increment/2015-05-07 --incremental-basedir=/backup/mysql/full/2015-05-07/2015-05-07_18-14-25/ # 第一次增量备份 (如果是mariadb不添加--incremental-force-scan参数可能会因为不支持FLUSH CHANGED_PAGE_BITMAPS而报错导致增量备份失败)

第一次增量备份生成的文件夹为/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/

5) 再次往数据表中插入内容

MariaDB [test_db]> insert into test_table1 values(7,'xiaohong');

Query OK, 1 row affected (0.05 sec)

6)进行第二次增量备份

[root@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --incremental-force-scan --incremental /backup/mysql/increment/2015-05-07 --incremental-basedir=/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/

第二次增量备份生成的文件夹为/backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/

7)查看最后一次增量备份时所对应的二进制日志及位置

[root@localhost ~]# cat /backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/xtrabackup_binlog_info

mysql-bin.000001    833    0-1-3

MariaDB [(none)]> show master status

-> ;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 |      833 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)  # 可以看到如果没有在增量备份后再对数据库进行增删改操作。则从增量备份中得出的信息和从二进制日志中看到的是一样的。

###################################################################

###         增量备份数据还原                                    ###

###################################################################

恢复增量备份

增量备份的还原操作跟完整的还原有点不一样,首先必须使用--apply-log --redo-only对完整备份的目录及所有增量备份目录进行操作,然后就可以像还原完整备份时的操作了。(apply increment log to full data)

1 模拟数据丢失

[root@localhost ~]# service mysql stop

[root@localhost ~]# rm -rf /var/lib/mysql

[root@localhost ~]# mkdir /var/lib/mysql

2 通过--apply-log --redo-only指明将日志应用到数据文件上

[root@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

3 把第一次增量备份的数据应用到全量备份上

[root@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/  --incremental-dir=/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/

4 把第二次增量备份的数据应用到全量备份上

[root@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/  --incremental-dir=/backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/

5 恢复数据(这里和全量备份的恢复相同了)

[root@localhost ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --copy-back /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

6 更改权限,启动服务,登录mysql,查看数据是否恢复

[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql

[root@localhost ~]# service mysql start

MariaDB [test_db]> select * from test_table1;

+------+----------+

| id   | name     |

+------+----------+

|    1 | zhangsan |

|    2 | lisi     |

|    3 | wangwu   |

|    4 | zhaoliu  |

|    5 | guqi     |

|    6 | xiaoming |

|    7 | xiaohong |

+------+----------+

7 rows in set (0.00 sec)  # 数据已经恢复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值