percona之innobackup备份数据库

1.传统的备份工具mysqldump是官方自带的逻辑热备份工具,但是有如下缺点:
备份过程中要锁表
大表备份速度慢,而且会占用大量内存,可能引发内存溢出

而percona开发的innobackup是一款物理热备份工具,备份速度快,支持增量备份,备份过程中不锁表(myisam引擎表依然会锁表)。

xtrabackup住要有两个工具:
xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

2.为备份创建最小权限的用户
mysql> CREATE USER ’bkpuser’@’127.0.0.1’ IDENTIFIED BY ’123456’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’127.0.0.1’;
mysql> FLUSH PRIVILEGES;
3.下载安装工具包
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.3/binary/redhat/6/x86_64/percona-xtrabackup-2.3.3-1.el6.x86_64.rpm
rpm -i percona-xtrabackup-2.3.3-1.el6.x86_64.rpm
4.全备份
innobackupex --user=bkpuser --password=123456 --host=127.0.0.1  /tmp/mysqlbackup/ >2>&1
查看备份文件,可以看到2016-03-08_13-46-05就是我们的全备分目录
            [root@EC-Web3 ~]# ls /tmp/mysqlbackup/
            2016-03-08_13-46-05  backup.log
5.查看备份日志,确认备份成功
        [root@EC-Web3 ~]# tail -n 20 /tmp/mysqlbackup/backup.log
        160308 13:46:54 [01] Copying ./openchart/extension.MYI to /tmp/mysqlbackup//2016-03-08_13-46-05/openchart/extension.MYI
        160308 13:46:54 [01]        ...done
        160308 13:46:54 Finished backing up non-InnoDB tables and files
        160308 13:46:54 [00] Writing xtrabackup_binlog_info
        160308 13:46:54 [00]        ...done
        160308 13:46:54 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
        xtrabackup: The latest check point (for incremental): '25001887878'
        xtrabackup: Stopping log copying thread.
        .160308 13:46:54 >> log scanned up to (25001887878) 在备份中有数据插入,记录到xtraback的redo中
        
        160308 13:46:54 Executing UNLOCK TABLES  备份muisam的表还是会锁表
        160308 13:46:54 All tables unlocked
        160308 13:46:54 Backup created in directory '/tmp/mysqlbackup//2016-03-08_13-46-05'
        MySQL binlog position: filename 'mysql-bin.000002', position '3029097' 最后的二进制日志位置
        160308 13:46:54 [00] Writing backup-my.cnf
        160308 13:46:54 [00]        ...done
        160308 13:46:54 [00] Writing xtrabackup_info
        160308 13:46:54 [00]        ...done
        xtrabackup: Transaction log of lsn (25001204178) to (25001887878) was copied.
        160308 13:46:54 completed OK!
6.假设数据库文件损坏,利用全备和binlog日志恢复数据

创建数据目录:mkdir -p /var/lib/mysql

利用全备的redo日志,提交或者回滚事物:innobackupex --apply-log /tmp/mysqlbackup/2016-03-08_13-46-05
从备份目录恢复数据:cd/var/lib/mysql;innobackupex --copy-back /tmp/mysqlbackup/2016-03-08_13-46-05

授权:cd /var/lib;chown -R mysql.mysql mysql

恢复时为了防止大量二进制日志产生,可以关闭二进制日志。

启动数据库,注意此时要禁止连接,因为数据还未完全恢复:service mysqld start
找到原来的二进制文件,恢复数据到当前:mysqlbinlog --start-position=3029097 mysql-bin.000002|mysql -udba -p -h127.0.0.1 -P3307

恢复完成,数据库可以连接

7.innobackup增量备份
             innobackupex --incremental /tmp/mysqlbackup/backup1 --incremental-basedir=/tmp/mysqlbackup/2016-03-08_13-46-05/

8.innobackup增量备份还原

首先需要将每个增备还原到全备,在从全备恢复数据库

innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
...
所有增量都做了之后,在执行恢复:
innobackupex --copy-back  /path/to/BACKUP-DIR

你可能感兴趣的:(mysql)