文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

应该怎么样备份与恢复mysql数据库

2024-04-02 19:55

关注

下文主要给大家带来应该怎么样备份与恢复mysql数据库,希望这些内容能够带给大家实际用处,这也是我编辑应该怎么样备份与恢复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<'2016-05-04'" > 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
  1. 最后重新对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/

对于以上关于应该怎么样备份与恢复mysql数据库,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯