mysql利用tgz恢复_mysql数据库备份与恢复

数据库备份方式

热备份:不影响业务的正常读写

温备份:对表加锁,只允许对数据库进行读操作

冷备份:业务暂停

物理备份:备份mysql相关的数据文件

逻辑备份:将数据从mysql中导出来,一般是一个sql文件(无索引数据)

全备份:完全备份

增量备份:针对上一次备份进行叠加

差异备份:针对上一次完全备份,选择差异进行备份

使用mysqldump备份

逻辑备份、单进程(速度慢)、锁表(一般在从库进行备份);

可以使用mysqldumper工具,进行多进程备份。

备份实例:

# mysqldump --flush-logs cacti plugin_thold_contacts plugin_thold_log plugin_thold_template_contact plugin_thold_threshold_contact thold_data thold_template >cacti_thold.sql //cacti库多表备份

# mysqldump -h rds.amazonaws.com -u root -p production_sts pubkey_change_logs --where="created pubkey_change_logs_0312to0503.sql //指定备份部分内容(归档时使用)

# mysqldump -u root -p -d --databases treasure treasure_admin treasure_logs treasure_sts >duobao.sql //多库备份,及只备份表结构,不备份数据-d

# mysqldump -u root -pxxxx -B ehr --single-transaction --master-data=2 --routines |/usr/bin/bzip2 > /data1/mysql_backup/ehr-db01/ehr_inc.sql.bz //线上使用的大库备份

恢复方法:

mysql命令直接导入、source命令、load命令

使用xtrabackup进行增量备份

热备份、物理备份,安装及介绍:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

安装后含有xtrabackup和innobackup两个工具,此处使用用后者;

需要扫描mysql相关数据文件、配置文件,不支持远程备份(如:云数据库实例)。

备份实例:

# innobackupex --user=root -pxxxxx /data/backup/innodbbackup/ //最简单的完全备份

# innobackupex --user=root -pxxxxx --incremental --incremental_basedir=/data/backup/innodbbackup/2018-02-07_17-08-31/ /data/backup/innodbbackup/ //增量备份,需要指定上次的备份位置(lsn信息)

# innobackupex -u root -pxxxxx --no-timestamp --extra-lsndir=/data1/innobackup/0207/lsn_17/ --stream=tar /data1/innobackup/ |gzip > /data1/innobackup/0207-1737.tgz //打包压缩

# innobackupex --user=root -pxxxxx /data/backup/innodbbackup/ --stream=tar |gzip|sshpass -p "sshpass" ssh -p 18122 root@10.10.166.176 "cat - > /data1/xtrabackup/zabbix/0207_1737.tgz" //备份并发送到远程服务器

数据恢复:

1.服务器准备:安装同版本mysql,初始化后,关闭mysql服务,清空mysql的数据目录

2.获取备份:也可以直接在备份的时候远程保存

3.恢复命令:

# tar -i -xf 0207_1737.tgz //如果打包了,先解包

日志文件恢复(完全备份):完成事务、同步数据等操作,使数据文件达到一致性

# innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log --redo-only -u root -pxxxx /tmp/mysql/fullbackup

增量日志文件恢复(如果是多个增量,按顺序依次恢复),需要指定lsn

# innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log --redo-only -u root -pxxxxx /tmp/mysql/incre-1337 --incremental-dir=/tmp/mysql/incre/1337

# innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log -u root -pxxxx /tmp/mysql/2016-04-26_13-48-39 //最后一次将增量和完全备份合并,将未提交的事物回滚,但不需要--redo-only参数。

数据恢复:要保证原来的数据目录为空(如果有其他库,先移动在其他目录,后期移回来即可)

# innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back -u root -pxxxxx /tmp/mysql/2016-04-26_13-48-39

最后重新对mysql_data目录授权,并启动mysql服务即可。

线上使用增量备份脚本

#!/bin/bash

hour=`date +%H`

day=`date +%F`

now=`date +%F_%H`

passwd="mysqlpass"

function backup()

{

case $1 in

full)

/usr/bin/innobackupex -u root -p${passwd} --no-timestamp --extra-lsndir=/data1/innobackup/${day}/lsn_${now}/ --stream=tar /data1/innobackup/${day}/ |gzip > /data1/innobackup/${day}/${now}.tgz

;;

incre)

if [ -f /data1/innobackup/${day}/lsn_${last}/xtrabackup_checkpoints ];then

/usr/bin/innobackupex -u root -p${passwd} --no-timestamp --incremental --incremental_basedir=/data1/innobackup/${day}/lsn_${last}/ --extra-lsndir=/data1/innobackup/${day}/lsn_${now}/ --stream=tar /data1/innobackup/${day} |gzip > /data1/innobackup/${day}/${now}.tgz

else

echo "incremental_basedir not found,do a full backup"

/usr/bin/innobackupex -u root -p${passwd} --no-timestamp --extra-lsndir=/data1/innobackup/${day}/lsn_${now}/ --stream=tar /data1/innobackup/${day}/ |gzip > /data1/innobackup/${day}/${now}.tgz

fi

;;

*)

echo "nothing todo"

;;

esac

}

case $hour in

01)

last=`date +%F -d -yesterday`

find /data1/innobackup/ -name "${last}*" -type d -exec rm -r "{}" \;

backup full

;;

10)

last=`date +%F_%H -d -9hours`

backup incre

;;

14|18|22)

last=`date +%F_%H -d -4hours`

backup incre

;;

*)

echo "not backup time"

esac

复杂应用实例:打包(tar、xbstream)、压缩、远程备份、增量备份、恢复

备份:

# innobackupex --no-timestamp --extra-lsndir=/backup/lsn/2304 /backup/2304_full_remot --stream=tar |gzip |sshpass -p "sshpass" ssh root@192.168.183.130 "cat - >/backup/remote/2304_full.tgz"

# innobackupex --no-timestamp --extra-lsndir=/backup/lsn/0000 --incremental --incremental_basedir=/backup/lsn/2304 /backup/0000_full_remot --stream=xbstream |gzip |sshpass -p "sshpass" ssh root@192.168.183.130 "cat - >/backup/remote/0000_incr.xbstream.gz"

# innobackupex --no-timestamp --extra-lsndir=/backup/lsn/0006 --incremental --incremental_basedir=/backup/lsn/0000 /backup/0006_full_remot --stream=xbstream |gzip |sshpass -p "sshpass" ssh root@192.168.183.130 "cat - >/backup/remote/0006_incr.xbstream.gz"

恢复:

# cd /backup/remote/

# tar -i -xf 2304_full.tgz

# innobackupex --apply-log --redo-only /backup/remote/

# gunzip -c 0000_incr.xbstream.gz > 0000_incr/0000_incr.xbstream

# xbstream -x -C 0000_incr/< 0000_incr/0000_incr.xbstream

# innobackupex --apply-log --redo-only --incremental /backup/remote/ --incremental-dir=/backup/remote/0000_incr/

# gunzip -c 0006_incr.xbstream.gz > 0006_incr/0006_incr.xbstream

# xbstream -x -C 0006_incr/< 0006_incr/0006_incr.xbstream

# innobackupex --apply-log --redo-only --incremental /backup/remote/ --incremental-dir=/backup/remote/0006_incr/

# innobackupex --copy-back /backup/remote/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值