首页 > 数据库 >讲解MySQL8.0备份与还原工具(mysqlbackup)

讲解MySQL8.0备份与还原工具(mysqlbackup)

时间:2023-04-09 12:31:48浏览次数:40  
标签:-- data 备份 mysqlbackup MySQL8.0 mysql root backup

一、安装mysqlbackup

  1. 下载

登录oracle edelivery,进入下载连接选择适合你系统的版本下载,在这里我使用的是银河麒麟Kylin OS Server V10 SP2,因此我选择一个通用的预编译二进制的tar包,如下图: 没有Oracle edelivery账号的朋友可以到私信我索取软件安装包。

  1. 安装

[root@light] tar xvf mysql-commercial-backup-8.0.28-linux-glibc2.17-x86_64-minimal.tar.xz [root@light] cd mysql-commercial-backup-8.0.28-linux-glibc2.17-x86_64-minimal [root@light] mv bin/mysqlbackup /usr/local/mysql/bin [root@light] chown mysql.mysql /usr/local/mysql/bin/mysqlbackup [root@light] mysqlbackup --version MySQL Enterprise Backup Ver 8.0.28-commercial for Linux on x86_64 (MySQL Enterprise - Commercial) Copyright (c) 2003, 2022, Oracle and/or its affiliates. 安装完成。

二、使用mysqlbackup mysqlbackup支持将数据库全部文件备份为一个独立的image,也支持将数据库按目录结构备份datafile。话不多说,分开演示。

  1. 创建mysqlbackup专用账户

创建一个immeb@localhost账户,专门用于备份数据库

CREATE USER 'immeb'@'localhost' IDENTIFIED BY 'LaoGeDB123!'; GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON . TO immeb@localhost; GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP, UPDATE, SELECT, ALTER ON mysql.backup_history TO 'immeb'@'localhost'; GRANT LOCK TABLES, CREATE, DROP, FILE, INSERT, ALTER ON . TO 'immeb'@'localhost'; GRANT CREATE, DROP, UPDATE ON mysql.backup_sbt_history TO 'immeb'@'localhost'; GRANT ENCRYPTION_KEY_ADMIN ON . TO 'immeb'@'localhost'; GRANT INNODB_REDO_LOG_ARCHIVE ON . TO 'immeb'@'localhost'; GRANT ALTER ON mysql.backup_progress TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP ON mysql.backup_progress_old TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_progress_new TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP ON mysql.backup_history_old TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_history_new TO 'immeb'@'localhost'; GRANT ALTER ON mysql.backup_sbt_history TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP ON mysql.backup_sbt_history_old TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_sbt_history_new TO 'immeb'@'localhost';

  1. backup-to-image方式的全量备份与还原

1.1 备份image

备份命令:

mysqlbackup
--user=immeb --password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--backup-image=my_full_bak.mbi
--backup-dir=/data/backup
--show-progress
--compress
--with-timestamp
backup-to-image 参数解释:

–backup-image:生成的备份image名称 –backup-dir:生成的备份image所在目录 –show-progress:显示备份进度[可选项] –compress:对备份image进行压缩节省空间[可选项] –with-timestamp:在backup-dir目录下生成’年-月-日-时-分-秒’的目录存储备份image backup-to-image:声明这是备份为image的备份 备份后目录结构如下:

ll /data/backup/2022-04-13_17-16-02 total 4420 -rw-r--r-- 1 root root 315 Apr 13 17:16 backup-my.cnf drwxr-x--- 2 root root 33 Apr 13 17:16 datadir drwxr-x--- 2 root root 191 Apr 13 17:16 meta -rw-r----- 1 root root 4496410 Apr 13 17:16 my_full_bak.mbi -rw-r----- 1 root root 19453 Apr 13 17:16 server-all.cnf -rw-r----- 1 root root 1570 Apr 13 17:16 server-my.cnf 1.2 查看与检验image

可以通过list-image查看备份image中的文件内容 list命令:

mysqlbackup
--backup-image=/data/backup/2022-04-13_17-16-02/my_full_bak.mbi
list-image 可以通过validate验证备份image的有效性 validate命令:

mysqlbackup
--backup-image=/data/backup/2022-04-13_17-16-02/my_full_bak.mbi
validate 1.3 还原image

还原数据库备份之前必须做完成以下前提:

关闭mysqld服务清空 mysql的datadir目录 还原命令:

mysqlbackup
--datadir=/data/mysql/data
--backup-image=/data/backup/2022-04-13_17-16-02/my_full_bak.mbi
--backup-dir=/data/backup/2022-04-13_17-16-02/tmp
--uncompress
copy-back-and-apply-log 参数解释:

–datadir : mysql server的数据库datadir,数据将还原至此 –backup-image:image备份的路径与名称 –backup-dir: image临时工作目录用于释放image都此目录,必须为空 –uncompress[可选项] copy-back-and-apply-log:应用redolog并且copy datafile至datadir 2. backup-to-image方式的增量备份与还原

2.1 备份image

先做全备:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--backup-image=my_full_bak.mbi
--backup-dir=/data/backup
--show-progress
--compress
--with-timestamp
backup-to-image 再做增备[方式一]:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--with-timestamp
--compress
--incremental
--incremental-base=dir:/data/backup/2022-04-14_00-39-35
--backup-dir=/data/backup
--backup-image=my_inc_bak.mbi
backup-to-image 再做增备[方式二]:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--with-timestamp
--compress
--incremental
--incremental-base=history:last_backup
--backup-dir=/data/backup/
--backup-image=my_inc_bak.mbi
backup-to-image 你一定会问:增量备份[方式一]和增量备份[方式二]有什么区别呢? 首先看它俩表面的区别在于–incremental-base的写法: 方式一: --incremental-base= dir:/data/backup/2022-04-14_00-39-35 方式二: --incremental-base=history:last_backup

–incremental-base= dir:/data/backup/2022-04-14_00-39-35是上次全备或增备所在目录,那么这次增量备份就要基于这个目录中的备份为基准。 –incremental-base=history:last_backup是直接使用history:last_backup代替上一次的备份,省去人工寻找目录的麻烦,MEB会自动到backup_history表中查找上一次备份的目录。 这是MEB为我们做的易用性改进。

多个增量备份,只需要多次执行上面的命令即可。

2.2 还原image

先还原全备:

还原数据库备份之前必须做完成以下前提:

关闭mysqld服务清空 mysql的datadir目录 还原全备命令:

mysqlbackup
--datadir=/data/mysql/data
--backup-image=/data/backup/2022-04-14_00-39-35/my_full_bak.mbi
--backup-dir=/data/backup/2022-04-14_00-39-35/tmp
--uncompress
copy-back-and-apply-log 2.3 再还原增备: 还原增备命令:

mysqlbackup
--backup-image=/data/backup/2022-04-14_00-40-43/my_inc_bak.mbi
--backup-dir=/data/backup/2022-04-14_00-40-43/tmp
--datadir=/data/mysql/data
--incremental
copy-back-and-apply-log 多个增量还原,只需要多次执行上面的命令即可。注意----backup-image每次都要用当前增量备份的目录。

  1. datafile方式的全量备份与还原 3.1 备份datafile

备份命令:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--backup-dir=/data/backup
--show-progress
--compress
--with-timestamp
backup 参数解释:

–backup-dir:生成的备份datafile所在目录 –show-progress:显示备份进度[可选项] –compress:对备份image进行压缩节省空间[可选项] –with-timestamp:在backup-dir目录下生成’年-月-日-时-分-秒’的目录存储备份image backup:声明这是备份为datafile的备份 备份后目录结构如下:

ll 2022-04-13_17-32-49/datadir total 2768 -rw-r----- 1 root root 56 Apr 13 17:32 backup-auto.cnf -rw-r----- 1 root root 1965 Apr 13 17:32 binlog.000006.bz -rw-r----- 1 root root 16 Apr 13 17:32 binlog.index -rw-r----- 1 root root 7680 Apr 13 17:32 ibbackup_logfile -rw-r----- 1 root root 5196 Apr 13 17:32 ib_buffer_pool -rw-r----- 1 root root 50974 Apr 13 17:32 ibdata1.ibz drwxr-x--- 2 root root 196 Apr 13 17:32 mysql -rw-r----- 1 root root 2405933 Apr 13 17:32 mysql.ibz drwxr-x--- 2 root root 8192 Apr 13 17:32 performance_schema drwxr-x--- 2 root root 28 Apr 13 17:32 sys -rw-r----- 1 root root 508 Apr 13 17:32 tablespaces_tracker drwxr-x--- 2 root root 209 Apr 13 17:32 ttecdis -rw-r----- 1 root root 152091 Apr 13 17:32 undo_001.uz -rw-r----- 1 root root 171493 Apr 13 17:32 undo_002.uz 3.2 还原datafile

还原数据库备份之前必须做完成以下前提:

关闭mysqld服务清空 mysql的datadir目录 3.2.1 分步还原 第一步:apply-log 因为在备份期间数据库还在读写,把这期间产生的redolog贴回数据文件上,以达到数据一致性

mysqlbackup
--backup-dir=/data/backup/2022-04-13_17-32-49
--uncompress
apply-log 第二步:copy-back 把已经达到数据一致性的数据文件copy到mysql的datadir目录下,此时不能再用uncompress参数,因此apply-log时已经uncompress过了。

mysqlbackup
--datadir=/data/mysql/data
--backup-dir=/data/backup/2022-04-13_17-32-49
copy-back 3.2.2 合并还原 以上两步可以合为一步完成,即把apply-log与copy-back合并为copy-back-and-apply-log,它首先会把redolog贴回datafile并初始化新的redolog,然后把backupdir目录下的全部数据copy回mysql datadir

mysqlbackup
--datadir=/data/mysql/data
--backup-dir=/data/backup/2022-04-13_17-32-49
--uncompress
--show-progess
copy-back-and-apply-log 参数解释:

–datadir: mysql server的datadir目录,就是要还原到这里 –backup-dir:生成的备份datafile所在目录 –show-progress:显示还原进度[可选项] –uncompress[可选项] –apply-log: 把备份期间的redo log贴回datafile –copy-back:把datafile复制回datadir目录 –copy-back-and-apply-log:把备份期间的redolog贴回datafile再把datafile复制回datadir目录 聪明的你一定发现了,在使用以上两种备份方式进行备份时都加了–compress参数,为什么还原的时候–uncompress参数却是可选项呢? 因为mysqlbackup 8.0.21版本开始可以识别备份是否为compress,如果是,那么它在还原时会自动uncompress,不需要显示告诉它。 在mysqlbackup 4.X以及8.0.21之前版本是必须要显示指定uncompress的。

  1. datafile方式的增量备份与还原 4.1 备份datafile

先做全备:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--backup-dir=/data/backup
--show-progress
--compress
--with-timestamp
backup 再做增备[方式一]:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--with-timestamp
--compress
--incremental
--incremental-base=dir:/data/backup/2022-04-14_02-09-39
--incremental-backup-dir=/data/backup
backup 再做增备[方式二]:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--with-timestamp
--compress
--incremental
--incremental-base=history:last_backup
--incremental-backup-dir=/data/backup
backup 多个增量备份,只需要多次执行上面的命令即可。

4.2 还原datafile

4.2.1 先把全备apply-log

还原数据库备份之前必须做完成以下前提:

关闭mysqld服务清空 mysql的datadir目录 全备apply-log命令:

mysqlbackup
--backup-dir=/data/backup/2022-04-14_02-09-39
apply-log 4.2.2 再增备apply-incremental-backup 增备apply-incremental-backup命令:

mysqlbackup
--incremental-backup-dir=/data/backup/2022-04-14_02-15-27
--backup-dir=/data/backup/2022-04-14_02-09-39
apply-incremental-backup 多个增量还原,只需要多次执行上面的命令即可。注意–incremental-backup-dir每次都要用当前增量备份的目录。

4.2.3 最后将备份copy-back到datadir 将备份copy-back到datadir命令:

mysqlbackup
--datadir=/data/mysql/data
--backup-dir=/data/backup/2022-04-14_02-09-39
copy-back-and-apply-log 5. 还原后如何启动mysqld服务 还原后,datadir目录下的数据文件用户属组不是mysql,因此要修改其属组,否则mysqld访问无法启动。 修改属组命令:

chown mysql.mysql /data/mysql/data -R 启动mysqld服务:

systemctl start mysqld 6. 配置安全使用mysqlbackup 严谨的朋友已经发现在以上命令中存在安全漏洞:用户名和密码是明文写在命令中的,且命令冗长,不易操作。 如何配置能让mysqlbackup更安全呢? 将socket、user、password写到my.cnf中,mysqlbackup --defaults-file=/etc/my.cnf方式吗?掩耳盗铃罢了,因为在my.cnf中同样是明文的。 这里我们使用mysql_config_editor来处理,既能隐藏密码,又能减少命令复杂度。 mysql_config_editor 是什么,读者可以自行查阅官方文档,下面直接上命令:

配置: 将mysqlbackup要使用的登录连接信息通过mysql_config_editor加密保存起来:

mysql_config_editor set --login-path=backup --user=immeb --password --socket=/data/mysql/data/mysqld.sock Enter password:##此处输入password后回车 查看: 看一看加密保存的信息:

mysql_config_editor print --login-path backup [backup] user = "immeb" password = ***** socket = "/data/mysql/data/mysqld.sock" 可以看到,除了保存了user、socket外,还加密保存了密码。

改造: mysqlbackup命令就可以如下改造,直接调用此加密信息:

改造前:

mysqlbackup
--user=immeb
--password=LaoGeDB123!
--socket=/data/mysql/data/mysqld.sock
--backup-image=my_full_bak.mbi
--backup-dir=/data/backup
--show-progress
--compress
--with-timestamp
backup-to-image 改造后:

mysqlbackup
--login-path=backup
--backup-image=my_full_bak.mbi
--backup-dir=/data/backup
--show-progress
--compress
--with-timestamp
backup-to-image
通过改造前后对比,安全性与易用性都得到加强。

  1. 进阶 上面讲解了mysqlbackup的常规用法,其实它还有很多高级功能,比如:

备份加密 磁带备份 创建主从复制 创建组复制 指定备份对象 指定还原对象 ———————————————— 版权声明:本文为CSDN博主「huang714」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/huang714/article/details/124187282

标签:--,data,备份,mysqlbackup,MySQL8.0,mysql,root,backup
From: https://blog.51cto.com/geeks/6178752

相关文章

  • CentOS7-实现全网备份脚本
    一、应用场景备份公司的重要的文件或者日志文件,系统配置文件等二、脚本思路1、本地打包备份2、同步服务推送至备份服务器3、同步成功发送邮件提醒管理员4、编写计划任务5、本地备份文件保留时间,服务器备份文件保留时间三、项目实施1、服端配置rsync服务步骤一:安装rsync......
  • Linux系统下安装MySQL8.0图文教程
    Linux系统下安装MySQL8.0图文教程1.环境准备1.1. 操作系统Centos7.3,中标麒麟7.61.2. 防火墙配置(可关闭防火墙,不建议)操作系统开启防火墙(注意:不建议把防火墙关闭,应该设置开放对应的端口,或者开放给哪些IP地址的哪些端口)。(1) 防火墙端口开放设置:https://www.cnblogs.com/liu......
  • RMAN删除过期备份或非过期备份
    (一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RMAN资料库(RMANRepository)中生成RMAN备份记录,默认情况下RMAN备份记录会被存放在目标数据库的控制文件中,如果配置了恢复目录(RecoveryCatalog),那么该备份记录也会被存放到恢复目录中。R......
  • KVM--虚拟机备份还原
    随着云计算,虚拟化在生产业务中的大规模推广,虚拟机的备份恢复显的尤为重要。面对勒索病毒,数据误删等事件,最重要的就是有“备份数据”可供恢复,从而解决数据丢失业务中断的问题。kvm虚拟机基础备份方式虚拟机克隆备份虚拟机文件复制备份快照备份1,虚拟机克隆备份克隆设备必须暂......
  • 无备份情况下恢复MySQL truncate table
    近期陆续有客户遇到MySQL的数据库问题,最近正好开始研究MySQL的一些技术。大家都知道我之前是擅长Oracle恢复,如果不会MySQL数据库恢复,总感觉却少一点什么。既然如此,就顺道研究一下吧。幸运的是,Google能够发现一些针对MySQL的恢复文章以及一些工具。我们都知道,MySQLServer都很多存......
  • Ghost备份
     1.准备先退出电脑上所有的安全软件,因为安全软件可能会误报以及拦截u盘pe系统文件,最终导致重装失败。确保电脑有两个以上可用磁盘分区,一个用于安装系统,一个用于保存重装所用的window电脑系统镜像。2.制作大白菜u盘启动盘3.设置U盘启动重启电脑,出现开机画面时,通过U盘启动......
  • openGauss备份恢复之gs_probackup
    一、概述1、基础信息gs_probackup是一个用于管理openGauss数据库备份和恢复的工具。它对openGauss实例进行定期备份,以便在数据库出现故障时能够恢复服务器。可用于备份单机数据库,也可对主机或者主节点数据库备机进行备份,为物理备份。可备份外部目录的内容,如脚本文件、配置文件、日......
  • rsync增量备份
    一、rsync远程同步1、什么是rsync远程同步rsync是C/S架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。rsync默认端口为873rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压......
  • Redis数据库容灾备份企业实战及故障恢复【转】
    本章目录0x00数据持久化1.RDB方式2.AOF方式如何抉择RDBORAOF?0x01备份容灾 一、备份1.手动备份redis数据库2.迁移Redis指定db-数据库3.Redis集群数据备份与迁移二、恢复1.系统Redis用户被删除后配置数据恢复流程2.Kubernetes中单实例异常数据迁移恢复实践......
  • oracle数据库按用户备份恢复,使用 expdp、impdp
    1,在数据库本机执行su-oracle切换oracle用户sqlplys/assysdba使用超级用户登select*fromdba_directories;查看管理员目录,一般会存在几个。2,导出命令,expdpuser/passwd@orclschemas=userdumpfile=expdp.dmpdirectory=DATA_PUMP_DIRlogfile=expdp.log##......