MySQL的冷热备份

MySQL备份功能在实际应用中的重要程度不需要多说,在误删重要数据后或者数据库被攻击后,备份数据的作用就突显出来了。

MySQL备份方式从不同的角度分析有不同的分类。 从运行状态分析,有冷备份和热备份之分。冷备份一般是在数据库关闭或者暂时不对外提供服务时,选择某一时间节点对完整数据库进行快照备份。热备份一般是在数据库运行的状态下,直接对数据进行备份,不影响MySQL对外提供服务。这里主要讲下这两种方式的实现。

冷备份

  1. 直接通过MySQL自带的mysqldump工具进行备份

    备份实现

    # mysqldump -u账号 -p密码 要备份的数据库名 > 要备份到的目录及文件名
    mysqldump -uroot -proot test > /data/backup/test.sql
    

    恢复实现

    mysql -f -uroot -proot test < /data/backup/test.sql
    
  2. 使用 mydumper 工具进行备份

    mydumper是一个针对MySQL和drizzle的高性能多线程的备份和恢复工具。此工具的开发人员分别来自MySQL、facebook、skysql公司,目前已经有一些大型产品业务测试并使用了该工具。

    它的特性/优点:

    • 由C语言编写
    • 相比于MySQL自带的 mysqldump,其速度快了近10倍
    • 具有事务性和非事务性表一致的快照(适用于0.2.2+)
    • 可快速进行文件压缩(File compression on-the-fly)
    • 支持导出binlog
    • 可多线程恢复(适用于0.2.1+)
    • 可以用守护进程的工作方式,定时扫描和输出连续的二进制日志

    它的安装

    # 安装需要的依赖
    yum install glib2-devel zlib-devel pcre-devel cmake
    # 下载。也可以直接在GitHub上下载安装包或者rpm
    git clone https://github.com/maxbube/mydumper.git
    cd mydumper
    cmake .
    make && make install
    

    安装完可以输出下版本号测试是否安装成功

    [root@localhost mydumper]# mydumper -V
    mydumper 0.10.6, built against MySQL 5.7.34
    [root@localhost mydumper]#
    

    备份实现

    mydumper -u root -p root -B test -o /data/backup/test.sql
    

    恢复实现

    myloader -u root -p root -B test -d /data/backup/test.sql
    

    参数介绍

    -host / -h:连接的MySQL服务器

    -user / -u:用户备份的连接用户

    -password / -p:用户的密码

    -port / -P:连接端口

    -socket / -S:连接socket文 件

    -database / -B:需要备份的数据库

    -table-list / -T:需要备份的表,用逗号(,)分隔

    -outputdir / -o:输出的目录

    -build-empty-files / -e:默认无数据则只有表结构文件

    -regex / -x:支持正则表达式,如mydumper-regex'(2l(mysqltest)'

    -ignore-engines / -i:忽略的存储引擎

    -no-schemas / -m:不导出表结构

    -long-query-guard:长查询,默认60s

    -kill-long-queries / -k:可以设置kill长查询

    -verbose / -v:0=silent,1=errors, 2=warmings,3=info,默认是2

    -binlogs / -b:导出binlog

    -daemon / -D:启用守护进程模式

    -snapshot-interval / -I:dump快照间隔时间,默认60s

    -logfile / -L:目志输出,一般在Daemon模式下使用。

    mydumper与mysqldump备份数据效率的对比

    [root@localhost backup]# time mysqldump -uroot -proot test > /data/backup/test1.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    
    real 0m0.033s
    user 0m0.006s
    sys  0m0.005s
    [root@localhost backup]# time mydumper -u root -p root -B test -o /data/backup/test.sql
    
    real 0m0.019s
    user 0m0.005s
    sys  0m0.007s
    [root@localhost backup]#
    

    这里由于数据量很少,差距看的不是很明显,但还是可以看出mydumper要比mysqldump效率高不少

  3. 暴力备份,直接拷贝存放数据文件的 data 目录(不推荐)

热备份

  1. InnoDB Hot Backup

    InnoDB Hot Backup 是MySQL社区版的热备份工具,但是它是收费的,只能试用30天,只有购买企业版才可以得到永久使用权。

  2. xtrabackup

    xtrabackup 是Percona公司发布的一个开源热备份工具,支持在线热备份(备份时不影响数据读写),是商业备份工具 InnoDB Hot Backup 的一个很好的替代品。

    xtrabackup中包含两个工具:

    • xtrabackup:用于热备份InnoDB及XtraDB表中数据的工具,不能备份其他类型的表,也不能备份数据表结构
    • innobackupex:是将xtrabackup进行封装的perl 脚本,可以说是xtrabackup的升级版,它提供了备份MyISAM表的能力。由于它的功能更为全面完善,所以一般选择它来进行热备份

    安装方式:

    下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

    操作手册:https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html

    注意事项:

    1、xtrabackup安装的版本需要和MySQL对应。xtrabackup8.0只能备份MySQL8.0的数据。如果MySQL版本没有达到8.0, 则不能使用这个版本。

    2、xtrabackup8.0及以上高版本没有innobackupex命令

    这里MySQL版本是5.7,所以下载的 xtrabackup2.4 版本

    [root@localhost ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/perconaxtrabackup-24-2.4.4-1.el7.x86_64.rpm
    [root@localhost ~]# yum localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
    [root@localhost ~]# rpm -qa | grep xtrabackup
    percona-xtrabackup-24-2.4.4-1.el7.x86_64
    [root@localhost ~]#
    

    查看当前 xtrabackup 版本及对应支持的MySQL版本

    [root@localhost ~]# xtrabackup -v
    xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
    [root@localhost ~]#
    

    常用参数:

    --host 指定主机
    --user 指定用户名
    --password 指定密码
    --port 指定端口
    --databases 指定数据库
    --incremental 创建增量备份
    --incremental-basedir 指定包含完全备份的目录
    --incremental-dir 指定包含增量备份的目录
    --apply-log 对备份进行预处理操作
    一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。
    因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
    --redo-only 不回滚未提交事务
    --copy-back 恢复备份目录
    

    备份操作:

    # 完成后会自动在指定的备份目录下创建一个当前时间的文件夹
    innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --databases test --backup /data/backup/test
    

    恢复操作:

    # 停止MySQL
    service mysql stop
    # 将存放mysql数据文件的data目录备份
    mv /www/server/data /www/server/data_backup
    # 恢复操作,会自动创建data目录,创建的位置是my.cnf配置文件中配置的data目录地址
    innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/test/2021-07-08_00-22-18
    # 修改data目录权限
    chown -R mysql:mysql /www/server/data
    # 启动MySQL
    service mysql start
    

    原理解释:

    1. innobackupex启动后,会先fork一个进程,用于启动xtrabackup,然后等待xtrabackup备份ibd数据文件;
    2. xtrabackup在备份innoDB数据是,有2种线程:redo拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执行后,会启动一个redo拷贝的线程,用于从最新的 checkpoint点开始顺序拷贝redo.log;再启动ibd数据拷贝线程,进行拷贝ibd数据。这里是先启动redo拷贝线程的。在此阶段,innobackupex进行处于等待 状态(等待文件被创建)
    3. xtrabackup拷贝完成ibd数据文件后,会通知innobackupex(通过创建文件),同时xtrabackup进入等待状态(redo线程依旧在拷贝redo.log)
    4. innobackupex收到xtrabackup通知后哦,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件(如frm、 MYD、MYI、CSV、opt、par等格式的文件),在拷贝非InnoDB文件的过程当中,数据库处于全局只读状态。
    5. 当innobackup拷贝完所有的非InnoDB文件后,会通知xtrabackup,通知完成后,进入等待状态;
    6. xtrabackup收到innobackupex备份完成的通知后,会停止redo拷贝线程,然后通知innobackupex,redo.log文件拷贝完成;
    7. innobackupex收到redo.log备份完成后,就进行解锁操作,执行:UNLOCK TABLES;
    8. 最后innbackupex和xtrabackup进程各自释放资源,写备份元数据信息等,innobackupex等xtrabackup子进程结束后退出。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容