Xtrabackup备份与恢复mysql
1.4 完整备份与恢复... 5socket
Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份一样须要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,若是数据库大于50G,mysqldump备份就不太适合。
备份开始时首先会开启一个后台检测进程,实时检测mysql redo的变化,一旦发现redo中有新的日志写入,马上将日志记入后台日志文件xtrabackup_log中。以后复制innodb的数据文件和系统表空间文件ibdata1,待复制结束后,执行flush tables with read lock操做,复制.frm,MYI,MYD,等文件(执行flush table swith read lock的目的是为了防止数据表发生DDL操做,而且在这一时刻得到binlog的位置)最后会发出unlock tables,把表设置为可读可写状态,最终中止xtrabackup_log。
因为新的MySQL重作日志和数据字典格式,8.0版本只支持mysql8.0和percona8.0,下载地址以下:
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
早于mysql8.0的版本须要使用xtrabackup2.4备份和恢复,下载地址以下:
https://www.percona.com/downloads/Percona-XtraBackup-2.4/
安装依赖包
yum install perl-DBD-MySQL
yum -y install rsync perl l perl-Digest-MD5
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
#查看安装版本
xtrabackup -v
xtrabackup --help
选项 | 描述 |
---|---|
-u, --user=name | 用户 |
-p, --password=name | 密码 |
-P, --port=# | 端口 |
-S, --socket=name | 套接字 |
--backup | 将备份数据恢复到目标目录 |
--databases | 备份数据库,多个以空格分隔,默认备份全部库 |
--databases-file=name | 备份数据库位于文件中 |
--tables=name | 正则过滤表名 |
--tables-file=name | 备份表位于文件中,格式database.table |
--defaults-file | 指定my.cnf配置文件 |
--apply-log | 日志回滚 |
--incremental | 增量备份 |
--incremental-basedir | 基于上次增量备份而增量备份 |
--redo-only | 合并彻底备份和增量备份文件 |
--copy-back | 将备份数据恢复到数据库 |
--no-timestramp | 生成备份文件不以时间戳为目录名 |
--stream | 流的格式作备份, 将备份归档, --stream-tar |
--remote-host=user@ip DST_DIR | 备份到远程主机 |
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root --password=123456 --port=3306--socket=/tmp/mysql.sock /opt/backup
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root--password=123456 --port=3306 --socket=/tmp/mysql.sock --copy-back/opt/backup/2020-04-25_22-12-32
chown mysql . -R
systemctl restart mysqld
backup-my.cnf:记录innobackup使用到mysql参数
xtrabackup_binary:备份中用到的可执行文件
xtrabackup_checkpoints:记录备份的类型、开始和结束的日志序列号
xtrabackup_logfile:备份中会开启一个log copy线程,用来监控innodb日志文件(ib_logfile),若是修改就会复制到这个文件
增量备份
上一步全量备份生成目录:2020-04-25_22-12-32
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root --password=123456 --port=3306--socket=/tmp/mysql.sock --incremental /opt/backup--incremental-basedir=/opt/backup/2020-04-25_22-12-32
生成目录:2020-04-25_22-18-35
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root --password=123456 --port=3306--socket=/tmp/mysql.sock --incremental /opt/backup--incremental-basedir=/opt/backup/2020-04-25_22-18-35
生成目录:2020-04-25_22-23-49
备份恢复
备份恢复思路:将增量备份一、增量备份2...合并到完整备份,加到一块儿出来一个新的完整备份,将新的完整备份以拷贝的形式到数据库空目录。
#xtrabackup把备份过程当中可能有还没有提交的事务或已经提交但未同步数据文件的事务,写到xtrabackup_logfile文件,因此要先经过这个日志文件回滚,把未完成的事务同步到备份文件,保证数据文件处于一致性。
innobackupex --apply-log --redo-only/opt/backup/2020-04-25_22-12-32
1.5.4 合并增量备份1到完整备份
innobackupex --apply-log --redo-only/opt/backup/2020-04-25_22-12-32--incremental-dir=/opt/backup/2020-04-25_22-18-35
1.5.5 合并增量备份2到完整备份
innobackupex --apply-log --redo-only/opt/backup/2020-04-25_22-12-32 --incremental-dir=/opt/backup/2020-04-25_22-23-49
备份恢复:
innobackupex --defaults-file=/etc/my.cnf--copy-back /opt/backup/2020-04-25_22-12-32
查看恢复日志序列号
innobackupex --defaults-file=/etc/my.cnf--copy-back /opt/backup/2020-04-25_22-12-32
chown -R mysql /usr/local/mysql/
1.5.8 启动MySQL,查看数据库恢复状况
systemctl restart mysqld