使用innobackex来备份数据库, 因为xtrbackup只能用于备份innodb引擎的数据库,而innobackex 既可以备份innodb引擎的数据库,也可以备份myisam引擎的数据库。备份时也可分为全量备份和增量备份
一 innobackex 的安装
1 安装依赖包
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
2 安装 xtrbackup
下载地址 https://www.percona.com/downloads/XtraBackup/LATEST/
cd /usr/local/src
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
二 全量备份
1 创建并授权备份用户用户
mysql -uroot -p123456
grant reload,process,lock tables,replication client on *.* to 'backupuser'@'localhost' identified by '123456';
flush privileges;
查询
show grants for backupuser@localhost
2 创建备份保存目录
mkdir /data/backup
3 全量备份mysql
#备份完成后,会在指定的保存目录中生成一个时间戳目录,该时间戳目录名称也是恢复时的apply-log
innobackupex --defaults-file=/etc/my.cnf --user=backupuser --password='123456' -S /tmp/mysql.sock /data/backup
4 其他用法
其他参数
--safe-slave-backup 如果是主从架构 从始终用这个参数备份
--no-timestamp 默认新建一个以时间戳命名的备份目录,--no-timestamp会跳过此功能
--slave-info 如果是主从架构, 从用这个参数备份
在备份从库时,可以使用该参数, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0。
这个参数适用的场景:假设现在有主库A和从库B,目前想再添加一台备库C,并让备库C以主库A为master;因为主库A是生产库,压力一般比较大,所以我们就在备库B上备份一个数据库,然后把这个备份拿到C服务器上 并导入到C库,接下来再在C服务器上执行change master的命令:其中 master_host是A的ip,而master_log_file和master_log_pos就是这个xtrabackup_slave_info里面的值
--parallel 此参数用于开启多个子进程并发备份多个数据文件(注意,一个数据文件只会有一个进程完成备份)。可以加快备份速度。但是在服务器资源不足时,谨慎使用。 如--parallel=4
解压tar
tar -xizf xxxx.tar.gz //注意这里要求加上-i参数
解压xbstream
xbstream -x < xbstream文件 -C 要解压的目录
例: xbstream -x < 1.xbstream -C /root
备份到远程
https://www.cnblogs.com/hllnj2008/p/5207066.html
# innobackupex --stream=tar /tmp | ssh root@192.168.1.7 \ "cat - > /backup/bak.tar" ###非压缩方式
# innobackupex --stream=tar /tmp | ssh root@192.168.1.7 \ "gzip >/backup/bak.tar.gz" ###压缩方式
例:
sudo /bin/innobackupex --defaults-file=/etc/my.cnf --user=backupuser --password=123456 -S /tmp/mysql.sock --parallel=4 --safe-slave-backup --stream=tar /data/backup/full/ | ssh -p 222 denis@192.168.192.20 \ "gzip - > 123/backup.tar.gz"
三 全量备份恢复测试
模拟故障, mysql的数据损毁, 之前已经有全量备份
1 停止mysql服务 不允许mysql进程存在
/etc/init.d/mysqld stop
ps aux |grep "mysqld"
2 删除mysql原有数据
mv /data/mysql /data/mysql.bak
mkdir /data/mysql
3 恢复mysql
初始化
# –use-memory=512M指定备份时使用的内存为512M,默认为100M, 注意单位。默认为字节
innobackupex --use-memory=512M --apply-log /全量备份时间戳目录/
恢复mysql , 设置权限
#使用–copy-back参数恢复
innobackupex --defaults-file=/etc/my.cnf --copy-back /全量备份时间戳目录/
chown -R mysql:mysql /data/mysql
启动mysql , 查看数据是否恢复成功
/etc/init.d/mysqld start
ps aux |grep "mysqld"