使用xtrabackup备份数据库mysql
提供一个参考文档:http://xtra.aminglinux.comlinux
mysqldump对于导出几个G的数据库或几个表,仍是不错的,速度并不慢。一旦数据量达到几十上百G, 不管是对原库的压力仍是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具, 是实现MySQL在线热备工做的不二选择,可进行全量、增量、单表备份和还原。 xtrabackup命令只支持InnoDB和XtraDB存储引擎的数据库非阻塞地备份, 而innobackupex经过perl封装了一层xtrabackup,对MyISAM的备份经过加表读锁的方式实现。
在CentOS7上这样安装percona-xtrabackupsql
安装yum源 rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm yum install -y percona-xtrabackup-24 //yum安装2.4版本
用xtrabackup作全量备份的命令是:数据库
innobackupex --defaults-file=/etc/my.cnf --host=10.100.100.100 --port=3333 \ --user=bakuser --password=your_pass /data/backup/mysql --socket=/var/lib/mysql/mysql.sock
说明:bash
在执行该备份操做以前,须要先建立一个用户bakuser(用户名自定义), 并授予reload, lock tables, replication client, process, super等权限。 备份数据将会放到/data/backup/mysql目录里面,自动生成一个以当前日期、时间为名字的目录,例如2018-10-15_03_00_01。
增量备份:app
innobackupex --host=10.100.100.100 --port=3333 --user=bakuser --password=your_pass \ --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/last-backup-file
说明:socket
--incremental :表示本次备份是一个增量备份(若针对的上次备份为一个全量备份,这里也能够认为是个差量备份) --incremental-basedir:指定本次增量备份针对的哪个备份(能够是上个增量,也能够是上个全量) 增量备份能够一环扣一环,好比能够周一作一个全量备份,而后周二作周一的增量,周三作周二的增量。。。
恢复:工具
1)全量备份的恢复性能
预备恢复:innobackupex --apply-log /PATH/TO/BACKUP/dir-quan --user-memroy=2G 中止MySQL/MariaDB,将datadir目录里面的数据清空(或者挪走) 恢复:innobackupex --defaults-file=/etc/my.cnf --copy-back /PATH/TO/BACKUP/dir-quan 改权限:chown -R mysql:mysql /PATH/TO/datadir 启动MySQL/MariaDB
说明:测试
--apply-log:指定全备文件路径 --use-memory=N:指定恢复数据时,使用内存大小,默认为100M,若备份数据量大且有足够的空闲内存时, 能够用来指定大小的内存来工做,单位可使用G,M....。 --defaults-file: 指定配置文件路径,经过配置文件它会找到datadir在哪里
2)增量备份的恢复
中止服务 删除dataidir里面的数据 准备全量: innobackupex --apply-log --redo-only /PATH/TO/全量备份目录 准备增量1: innobackupex --apply-log --redo-only /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/第一次增量备份目录 准备增量2: innobackupex --apply-log --redo-only /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/第二次增量备份目录 ...... 准备最后一个增量: innobackupex --apply-log /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/最后一次增量备份目录 再次准备全量: innobackupex --apply-log /PATH/TO/全量备份目录 #(此次不用加--redo-only了)
恢复:
innobackupex --copy-back /PATH/TO/全量备份目录 改权限:chown -R mysql:mysql /PATH/TO/datadir 启动MySQL/MariaDB
说明:
--redo-only:表示进行准备(应用日志)工做时,只进行redo操做,只会重作已提交但未应用的事务, 不会回滚未提交的事务。缘由是后面还有个增量备份,未提交的可能在后面增量备份时进行提交。 须要注意的是,最后一个增量备份不须要加这个选型。
MariaDB新版本(10.3.x+)的备份和恢复
MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题。 缘由多是MariaDB10.3以上版本的redo日志格式和以前不一样了。 解决方案是,使用mariabackup,它是MariaDB提供的一个开源工具,用于对InnoDB,Aria和MyISAM表进行物理在线备份。 这个工具是基于Percona的XtraBackup(版本2.3.8)的解决方案:
全量备份:
mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21
测试:
[root@wangzb01 ~]# mkdir /data/backup [root@wangzb01 ~]# mariabackup --backup --user=root --password=mysql --target-dir /data/backup/2019-03-19 [root@wangzb01 ~]# cd /data/backup/ [root@wangzb01 backup]# ls 2019-03-19/ aria_log.00000001 bbs ibdata1 performance_schema xtrabackup_info aria_log_control blog ib_logfile0 test zabbix backup-my.cnf ib_buffer_pool mysql xtrabackup_checkpoints zrlog
全量恢复:
中止数据库 清空datadir mariabackup --prepare --target-dir /data/backup/2019-02-21/ mariabackup --copy-back --target-dir /data/backup/2019-02-21/ 改属主、属组 启动
测试:
[root@wangzb01 ~]# /etc/init.d/mysqld stop //恢复以前先中止服务 [root@wangzb01 ~]# mv /data/mysql /data/mysql_bak //更名 [root@wangzb01 ~]# du -sh /data/mysql/ 255M /data/mysql/ [root@wangzb01 ~]# mariabackup --prepare --target-dir /data/backup/2019-03-19/ [root@wangzb01 ~]# echo $? //查看命令是否执行成功 [root@wangzb01 ~]# mariabackup --copy-back --target-dir /data/backup/2019-03-19/ //会在/data/下自动建立mysql目录 [root@wangzb01 ~]# echo $? [root@wangzb01 ~]# du -sh /data/mysql 147M /data/mysql [root@wangzb01 mysql]# chown -R mysql:mysql /data/mysql [root@wangzb01 mysql]# /etc/init.d/mysqld start [root@wangzb01 ~]# du -sh /data/mysql/ 255M /data/mysql/
增量备份:
mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21 第一个增量:mariabackup --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21_inc1 --incremental-basedir /data/backup/2019-02-21 第二个增量:mariabackup --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21_inc2 --incremental-basedir /data/backup/2019-02-21_inc1
增量恢复:
先准备全备 mariabackup --prepare --target-dir /data/backup/2019-02-21 --apply-log-only 准备第一个增量: cd /data/backup mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc1 --apply-log-only 准备第二个增量: mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc2 --apply-log-only 恢复: mariabackup --copy-back --target-dir ./2019-02-21
备份脚本
#!/bin/bash bakdir=/data/backup d=`date +%F` for db in bbs blog db2 do mysqldump -uroot -paminglinux $db > $bakdir/$db\_$d.sql done cd $bakdir gzip *_$d.sql find ./ -name "*.gz" -mtime +30 |xargs rm