关于 XtraBackup
XtraBackup 是一个对数据库做物理热备的备份工具,可用于InnoDB数据库的肺阻塞备份,对于MyISAM的备份需要加表锁。
XtraBackup 主要有两个命令脚本:xtrabackup和innobackupex
xtrabackup只能备份InnoDB和XtraDB两种数据表。
innobackupex则封装了xtrabackup,同时还可以备份MyISAM数据表。在高版本中xtrabackup实现了innobackupex的功能,innobackupex在8.0+版本中已被弃用
XtraBackup 安装
由于yum源中的XtraBackup版本较低不能备份高版本的mysql数据库,不建议使用yum安装XtraBackup。
下载地址 https://www.percona.com/downloads/XtraBackup/LATEST/ 根据自己的mysql版本选择对应的安装包。
我的mysql版本是5.7的这里我用的是2.4.9的版本。
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
如果安装失败可能是缺少对应的依赖包,yum install安装一下对应依赖包即可
如:yum install perl-DBD-MySQL.x86_64
innobackupex常用参数说明
innobackupex - Non-blocking backup tool for InnoDB, XtraDB and HailDB databases
innobackupex - 用于InnoDB、XtraDB和HailDB数据库的非阻塞备份工具
NOTICE: 'innobackupex' is deprecated, please switch to 'xtrabackup'
NOTICE: innobackupex'已被弃用,请使用'xtrabackup '
SYNOPOSIS
innobackupex [--compress] [--compress-threads=NUMBER-OF-THREADS] [--compress-chunk-size=CHUNK-SIZE]
[--encrypt=ENCRYPTION-ALGORITHM] [--encrypt-threads=NUMBER-OF-THREADS] [--encrypt-chunk-size=CHUNK-SIZE]
[--encrypt-key=LITERAL-ENCRYPTION-KEY] | [--encryption-key-file=MY.KEY]
[--include=REGEXP] [--user=NAME]
[--password=WORD] [--port=PORT] [--socket=SOCKET]
[--no-timestamp] [--ibbackup=IBBACKUP-BINARY]
[--slave-info] [--galera-info] [--stream=tar|xbstream]
[--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME]
[--databases=LIST] [--no-lock]
[--tmpdir=DIRECTORY] [--tables-file=FILE]
[--history=NAME]
[--incremental] [--incremental-basedir]
[--incremental-dir] [--incremental-force-scan] [--incremental-lsn]
[--incremental-history-name=NAME] [--incremental-history-uuid=UUID]
[--close-files] [--compact]
BACKUP-ROOT-DIR
此命令行对MySQL数据库进行热备份。默认情况下,它会在指定的备份目录中创建一个由当前日期和时间命名的子目录。使用——no-timestamp选项可以控制。此命令可以对所有数据库或使用——databases选项指定的所有数据库中的所有MyISAM和InnoDB表和索引进行完全备份。创建的备份包含.frm、. mrg、. myd、. myi、. mad、. mai、. trg、. trn、. arm、. arz、. csm、CSV、.opt、.par和InnoDB数据和日志文件。--defaults-file=my.cnf 文件定义了数据库的位置。这个命令会以mysql client程序连接到MySQL服务器,并作为子进程运行xtrabackup。
innobackupex --apply-log [--use-memory=B]
[--defaults-file=MY.CNF]
[--export] [--redo-only] [--ibbackup=IBBACKUP-BINARY]
BACKUP-DIR
在上一个命令中生成的备份文件是不可以直接拿来用的。—apply-log命令会应用日志为使用这个备份做一个准备。这个会命令使用备份目录下的xtrabackup_logfile恢复backup-my.cnf中指定的InnoDB数据文件,并创建backup-my.cnf中指定的InnoDB日志文件。此命令作为子进程运行xtrabackup,但它不会连接到数据库服务器。
innobackupex --copy-back [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] BACKUP-DIR
innobackupex --move-back [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] BACKUP-DIR
—move-back命令与—copy-back类似,唯一的区别是它将文件移动而不是复制它们。由于此选项会删除备份文件,因此必须谨慎使用。当没有足够的空闲磁盘空间来复制文件时,它可能很有用。
innobackupex [--decompress] [--decrypt=ENCRYPTION-ALGORITHM]
[--encrypt-key=LITERAL-ENCRYPTION-KEY] | [--encryption-key-file=MY.KEY]
[--parallel=NUMBER-OF-FORKS] BACKUP-DIR
压缩和解压备份文件
* **--apply-log** 通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
* **--redo-only** 用于--apply-log,强制备份日志时只redo,跳过rollback,这在做增量备份时非常必要。
* **--incremental** 指明是增量备份,--incremental-basedir指定上次完整备份或者增量备份文件的位置。这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。
* **--no-lock** 使用此选项可禁用“LUSH TABLES WITH READ LOCK”的表锁定。如果此备份是用来做主从的不要使用此值。
* **--no-timestamp** 此选项可以禁止生成日期+时间的子目录
* **--databases** 指定备份的数据库,多个数据库用空格分隔
* **--close-files** 该选项表示关闭不再访问的文件句柄,当xtrabackup打开表空间通常并不关闭文件句柄目的是正确的处理DDL操作。如果表空间数量巨大,这是一种可以关闭不再访问的文件句柄的方法。使用该选项有风险,会有产生不一致备份的可能
示例
#备份数据库
xtrabackup --defaults-file=/usr/local/webserver/mysql-5.7/my.cnf --user=root --password='123456' --databases='online_core online_db_2' --backup --target-dir=/data/xtrabackup/dxk/ --socket=/tmp/mysql.sock
#应用日志
innobackupex --use-memory=1G --apply-log /data/xtrabackup/2019-01-07_18-14-01/
#恢复数据
innobackupex --defaults-file=/usr/local/webserver/mysql-5.7-baowei/my.cnf --move-back /data/xtrabackup/2019-01-07_18-14-01/
mysql主库不停机做主从配置
#全量备份主库
innobackupex --defaults-file=/usr/local/webserver/mysql-5.7/my.cnf --socket=/tmp/mysql.sock --user=root --password='123456' --parallel=4 /mnt/datadisk/xtrabackup/
#copy备份文件到从库主机
scp -r xtrabackup root@10.0.223.18:/mnt/datadisk/
#进入从库所在主机,停止从库,移除data目录
/usr/local/webserver/mysql-5.7-baowei/support-files/mysql.server stop
cd /mnt/datadisk
mv mysql_data_baowei mysql_data_baowei_bak
#应用日志
innobackupex --use-memory=1G --apply-log /mnt/datadisk/xtrabackup/2019-01-09_01-00-01/
#恢复数据到从库
innobackupex --defaults-file=/usr/local/webserver/mysql-5.7-baowei/my.cnf --move-back /mnt/datadisk/xtrabackup/xtrabackup/2019-01-09_01-00-01/
#修改从库data目录属主,启动从库
chown -R mysql:mysql /mnt/datadisk/mysql_data_baowei
/usr/local/webserver/mysql-5.7-baowei/support-files/mysql.server start
#主库创建slave账号
/usr/local/webserver/mysql-5.7/bin/mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'baoyuan_slave'@'10.0.223.18' IDENTIFIED BY '123456';
flush privileges;
#查看binlog位置,启动从库slave进程
cat /mnt/datadisk/xtrabackup/2019-01-09_01-00-01/xtrabackup_binlog_info
/usr/local/webserver/mysql-5.7-baowei/bin/mysql -u root -h 127.0.0.1 -P 3307 -p
CHANGE MASTER TO MASTER_HOST='10.0.223.17',MASTER_PORT=3306, MASTER_USER='baoyuan_slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000592',MASTER_LOG_POS=97895353;
start slave;
show slave status\G;
- 在恢复数据到从库时my.cnf一定要指名datadir。
- 进入从库时的账户密码和主库的是一样的,数据是从主库复制过来的。
- 注意主库的iptables防火墙对从库开放3306端口。
- 主从同步延时较大的情况下建议调整从库 innodb_flush_log_at_trx_commit 和 sync_binlog。参考:https://www.jianshu.com/p/74b03a792ff8或https://blog.csdn.net/thundermeng/article/details/50448614
注意事项:
- xtrabackup 8.0只能用于mysql8.0的版本,如果低版本mysql的备份和迁移需要用xtrabackup2.4版本。一定要注意看手册下载安装不同版本的xtrabackup。xtrabackup8及以上高版本没有innobackupex命令
- 查看当前xtrabackup支持的mysql版本
[root@dzfxdb01 datadisk]# xtrabackup -v
xtrabackup version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
参考资料
https://www.cnblogs.com/zhoujinyi/p/5893333.html
https://www.jianshu.com/p/74b03a792ff8
https://blog.csdn.net/thundermeng/article/details/50448614
网友评论