xtrabackup的简单介绍
MySQL中的xtrabackup的原理解析 1.首先会启动一个xtrabackup_log后台检测的进程,实时检测mysql redo的变化,一旦发现redo有新的日志写入,立刻将日志写入到日志文件xtrabackup_log中 2.复制innodb的数据文件和系统表空间文件idbdata1到对应的以默认时间戳为备份目录的地方 3.复制结束后,执行flush table with read lock操作 4.复制.frm .myd .myi文件 5.并且在这一时刻获得binary log 的位置 6.将表进行解锁unlock tables 7.停止xtrabackup_log进程 xtrabackup的优势 1.备份快速可靠地完成 2.备份期间不间断的事务处理 3.节省磁盘空间和网络带宽 4.自动备份验证 5.由于更快的恢复时间,正常运行时间更长
xtrabackup的安装
官方地址:https://www.percona.com/doc/percona-xtrabackup/2.2/installation/yum_repo.html 因为用的是5.5的mysql数据库,所以选择的2.2版本 安装Percona存储库 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm 测试存储库yum list| grep percona能看到很多包就行了。 安装Percona XtraBackup yum install percona-xtrabackup-22
innobackupex备份
安装后有innobackupex和xtrabackup两种命令做备份,我选的是innobackupex备份。 编写脚本,备份单个或者多个库 --databases 用于指定要备份的数据库, 备份多个库使用方法: --databases=“db1 db2” 用空格分开。不加是全部数据库都备份。
#!/bin/bash
#author menard 2019-08-23
#xtrabackup、innobackupex方式备份数据库
host=localhost
post=3306
user=root
password=pass
file=/server/mysql/mysql.sock
f=/etc/my.cnf
dir=/data_backup/
date=`date "+%F"`
innobackupex --defaults-file="$f" --host="$host" --port="$port"--user="$user" --password="$password" --socket=$file --stream=tar "$dir" | gzip > $dir/data_full_$date.tar.gz
执行脚本,出现这种情况说明脚本没问题,正在备份。查看备份目录可以看到有备份文件生成并且在增大
innobackupex恢复数据
将备份好的文件拷贝到新的服务器。 解压gunzip data_full_2019-08-23.tar.gz解压后是一个tar包,因为我备份时加了参数stream=tar,解压tar包时一定要注意,必须要加-i,不然解压后只有一个backup-my.cnf gunzip data_full_2019-08-23.tar.gz tar -ixf data_full_2019-08-23.tar -C dir 停止mysql服务 service mysqld stop 因为还原数据的话数据库目录必须是空的,所以可以把原数据库目录改名再创建一个空目录。 mv /var/lib/mysql /var/lib/mysql_back mkdir /var/lib/mysql 通过命令恢复数据,两条命令都必须执行。上面一条是对ibdata1、ib_logfile0、ib_logfile1文件做处理,不执行第一条的话数据库会报数据错误的问题错。下面一条是把备份文件拷贝到数据库目录。 innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log 备份数据目录 innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back 备份数据目录 修改数据库权限后启动数据库。 chown -R mysql. /var/lib/mysql service mysqld start