mysqlbackup全称MySQLEnterpriseBackup(MEB),是MySQL官方推出的跨平台mysql数据库物理备份与还原的强大工具。它支持全量备份、增量备份、备份压缩、备份验证、备份加密、流式备份等特性,类似Oracle数据库的RMAN。相比于percona公司的xtrabackup,它的功能更强大,效率更高。 下面基于mysqlbackup8。0。28版本讲解mysqlbackup的安装、全量备份、增量备份、备份压缩、备份验证、备份还原等功能。一、安装mysqlbackup 1。下载 登录oracleedelivery,进入下载连接选择适合你系统的版本下载,在这里我使用的是银河麒麟KylinOSServerV10SP2,因此我选择一个通用的预编译二进制的tar包,如下图: 没有Oracleedelivery账号的朋友可以到私信我索取软件安装包。 2。安装〔rootlight〕tarxvfmysqlcommercialbackup8。0。28linuxglibc2。17x8664minimal。tar。xz〔rootlight〕cdmysqlcommercialbackup8。0。28linuxglibc2。17x8664minimal〔rootlight〕mvbinmysqlbackupusrlocalmysqlbin〔rootlight〕chownmysql。mysqlusrlocalmysqlbinmysqlbackup〔rootlight〕mysqlbackupversionMySQLEnterpriseBackupVer8。0。28commercialforLinuxonx8664(MySQLEnterpriseCommercial)Copyright(c)2003,2022,Oracleandoritsaffiliates。 安装完成。二、使用mysqlbackup mysqlbackup支持将数据库全部文件备份为一个独立的image,也支持将数据库按目录结构备份datafile。话不多说,分开演示。 0。创建mysqlbackup专用账户 创建一个immeblocalhost账户,专门用于备份数据库CREATEUSERimmeblocalhostIDENTIFIEDBYLaoGeDB123!;GRANTSELECT,BACKUPADMIN,RELOAD,PROCESS,SUPER,REPLICATIONCLIENTON。TOGRANTCREATE,INSERT,DROP,UPDATEONmysql。backupprogressTOGRANTCREATE,INSERT,DROP,UPDATE,SELECT,ALTERONmysql。backuphistoryTOGRANTLOCKTABLES,CREATE,DROP,FILE,INSERT,ALTERON。TOGRANTCREATE,DROP,UPDATEONmysql。backupsbthistoryTOGRANTENCRYPTIONKEYADMINON。TOGRANTINNODBREDOLOGARCHIVEON。TOGRANTALTERONmysql。backupprogressTOGRANTCREATE,INSERT,DROPONmysql。backupprogressoldTOGRANTCREATE,INSERT,DROP,ALTERONmysql。backupprogressnewTOGRANTCREATE,INSERT,DROPONmysql。backuphistoryoldTOGRANTCREATE,INSERT,DROP,ALTERONmysql。backuphistorynewTOGRANTALTERONmysql。backupsbthistoryTOGRANTCREATE,INSERT,DROPONmysql。backupsbthistoryoldTOGRANTCREATE,INSERT,DROP,ALTERONmysql。backupsbthistorynewTO 1。backuptoimage方式的全量备份与还原 1。1备份image 备份命令:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockbackupimagemyfullbak。mbibackupdirdatabackupshowprogresscompresswithtimestampbackuptoimage 参数解释:backupimage:生成的备份image名称backupdir:生成的备份image所在目录showprogress:显示备份进度〔可选项〕compress:对备份image进行压缩节省空间〔可选项〕withtimestamp:在backupdir目录下生成’年月日时分秒’的目录存储备份imagebackuptoimage:声明这是备份为image的备份 备份后目录结构如下:lldatabackup20220413171602total4420rwrr1rootroot315Apr1317:16backupmy。cnfdrwxrx2rootroot33Apr1317:16datadirdrwxrx2rootroot191Apr1317:16metarwr1rootroot4496410Apr1317:16myfullbak。mbirwr1rootroot19453Apr1317:16serverall。cnfrwr1rootroot1570Apr1317:16servermy。cnf 1。2查看与检验image 可以通过listimage查看备份image中的文件内容 list命令:mysqlbackupbackupimagedatabackup20220413171602myfullbak。mbilistimage 可以通过validate验证备份image的有效性 validate命令:mysqlbackupbackupimagedatabackup20220413171602myfullbak。mbivalidate 1。3还原image 还原数据库备份之前必须做完成以下前提:关闭mysqld服务清空mysql的datadir目录 还原命令:mysqlbackupdatadirdatamysqldatabackupimagedatabackup20220413171602myfullbak。mbibackupdirdatabackup20220413171602tmpuncompresscopybackandapplylog 参数解释:datadir:mysqlserver的数据库datadir,数据将还原至此backupimage:image备份的路径与名称backupdir:image临时工作目录用于释放image都此目录,必须为空uncompress〔可选项〕copybackandapplylog:应用redolog并且copydatafile至datadir 2。backuptoimage方式的增量备份与还原 2。1备份image 先做全备:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockbackupimagemyfullbak。mbibackupdirdatabackupshowprogresscompresswithtimestampbackuptoimage 再做增备〔方式一〕:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockwithtimestampcompressincrementalincrementalbasedir:databackup20220414003935backupdirdatabackupbackupimagemyincbak。mbibackuptoimage 再做增备〔方式二〕:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockwithtimestampcompressincrementalincrementalbasehistory:lastbackupbackupdirdatabackupbackupimagemyincbak。mbibackuptoimage 你一定会问:增量备份〔方式一〕和增量备份〔方式二〕有什么区别呢? 首先看它俩表面的区别在于incrementalbase的写法: 方式一:incrementalbasedir:databackup20220414003935 方式二:incrementalbasehistory:lastbackup incrementalbasedir:databackup20220414003935是上次全备或增备所在目录,那么这次增量备份就要基于这个目录中的备份为基准。 incrementalbasehistory:lastbackup是直接使用history:lastbackup代替上一次的备份,省去人工寻找目录的麻烦,MEB会自动到backuphistory表中查找上一次备份的目录。 这是MEB为我们做的易用性改进。 多个增量备份,只需要多次执行上面的命令即可。 2。2还原image 先还原全备: 还原数据库备份之前必须做完成以下前提:关闭mysqld服务清空mysql的datadir目录 还原全备命令:mysqlbackupdatadirdatamysqldatabackupimagedatabackup20220414003935myfullbak。mbibackupdirdatabackup20220414003935tmpuncompresscopybackandapplylog 2。3再还原增备: 还原增备命令:mysqlbackupbackupimagedatabackup20220414004043myincbak。mbibackupdirdatabackup20220414004043tmpdatadirdatamysqldataincrementalcopybackandapplylog 多个增量还原,只需要多次执行上面的命令即可。注意backupimage每次都要用当前增量备份的目录。3。datafile方式的全量备份与还原 3。1备份datafile 备份命令:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockbackupdirdatabackupshowprogresscompresswithtimestampbackup 参数解释:backupdir:生成的备份datafile所在目录showprogress:显示备份进度〔可选项〕compress:对备份image进行压缩节省空间〔可选项〕withtimestamp:在backupdir目录下生成’年月日时分秒’的目录存储备份imagebackup:声明这是备份为datafile的备份 备份后目录结构如下:ll20220413173249datadirtotal2768rwr1rootroot56Apr1317:32backupauto。cnfrwr1rootroot1965Apr1317:32binlog。000006。bzrwr1rootroot16Apr1317:32binlog。indexrwr1rootroot7680Apr1317:32ibbackuplogfilerwr1rootroot5196Apr1317:32ibbufferpoolrwr1rootroot50974Apr1317:32ibdata1。ibzdrwxrx2rootroot196Apr1317:32mysqlrwr1rootroot2405933Apr1317:32mysql。ibzdrwxrx2rootroot8192Apr1317:32performanceschemadrwxrx2rootroot28Apr1317:32sysrwr1rootroot508Apr1317:32tablespacestrackerdrwxrx2rootroot209Apr1317:32ttecdisrwr1rootroot152091Apr1317:32undo001。uzrwr1rootroot171493Apr1317:32undo002。uz 3。2还原datafile 还原数据库备份之前必须做完成以下前提:关闭mysqld服务清空mysql的datadir目录 3。2。1分步还原 第一步:applylog 因为在备份期间数据库还在读写,把这期间产生的redolog贴回数据文件上,以达到数据一致性mysqlbackupbackupdirdatabackup20220413173249uncompressapplylog 第二步:copyback 把已经达到数据一致性的数据文件copy到mysql的datadir目录下,此时不能再用uncompress参数,因此applylog时已经uncompress过了。mysqlbackupdatadirdatamysqldatabackupdirdatabackup20220413173249copyback 3。2。2合并还原 以上两步可以合为一步完成,即把applylog与copyback合并为copybackandapplylog,它首先会把redolog贴回datafile并初始化新的redolog,然后把backupdir目录下的全部数据copy回mysqldatadirmysqlbackupdatadirdatamysqldatabackupdirdatabackup20220413173249uncompressshowprogesscopybackandapplylog 参数解释:datadir:mysqlserver的datadir目录,就是要还原到这里backupdir:生成的备份datafile所在目录showprogress:显示还原进度〔可选项〕uncompress〔可选项〕applylog:把备份期间的redolog贴回datafilecopyback:把datafile复制回datadir目录copybackandapplylog:把备份期间的redolog贴回datafile再把datafile复制回datadir目录 聪明的你一定发现了,在使用以上两种备份方式进行备份时都加了compress参数,为什么还原的时候uncompress参数却是可选项呢? 因为mysqlbackup8。0。21版本开始可以识别备份是否为compress,如果是,那么它在还原时会自动uncompress,不需要显示告诉它。 在mysqlbackup4。X以及8。0。21之前版本是必须要显示指定uncompress的。4。datafile方式的增量备份与还原 4。1备份datafile 先做全备:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockbackupdirdatabackupshowprogresscompresswithtimestampbackup 再做增备〔方式一〕:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockwithtimestampcompressincrementalincrementalbasedir:databackup20220414020939incrementalbackupdirdatabackupbackup 再做增备〔方式二〕:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockwithtimestampcompressincrementalincrementalbasehistory:lastbackupincrementalbackupdirdatabackupbackup 多个增量备份,只需要多次执行上面的命令即可。 4。2还原datafile 4。2。1先把全备applylog 还原数据库备份之前必须做完成以下前提:关闭mysqld服务清空mysql的datadir目录 全备applylog命令:mysqlbackupbackupdirdatabackup20220414020939applylog 4。2。2再增备applyincrementalbackup 增备applyincrementalbackup命令:mysqlbackupincrementalbackupdirdatabackup20220414021527backupdirdatabackup20220414020939applyincrementalbackup 多个增量还原,只需要多次执行上面的命令即可。注意incrementalbackupdir每次都要用当前增量备份的目录。 4。2。3最后将备份copyback到datadir 将备份copyback到datadir命令:mysqlbackupdatadirdatamysqldatabackupdirdatabackup20220414020939copybackandapplylog5。还原后如何启动mysqld服务 还原后,datadir目录下的数据文件用户属组不是mysql,因此要修改其属组,否则mysqld访问无法启动。 修改属组命令:chownmysql。mysqldatamysqldataR 启动mysqld服务:systemctlstartmysqld6。配置安全使用mysqlbackup 严谨的朋友已经发现在以上命令中存在安全漏洞:用户名和密码是明文写在命令中的,且命令冗长,不易操作。 如何配置能让mysqlbackup更安全呢? 将socket、user、password写到my。cnf中,mysqlbackupdefaultsfileetcmy。cnf方式吗?掩耳盗铃罢了,因为在my。cnf中同样是明文的。 这里我们使用mysqlconfigeditor来处理,既能隐藏密码,又能减少命令复杂度。 mysqlconfigeditor是什么,读者可以自行查阅官方文档,下面直接上命令: 配置: 将mysqlbackup要使用的登录连接信息通过mysqlconfigeditor加密保存起来:mysqlconfigeditorsetloginpathbackupuserimmebpasswordsocketdatamysqldatamysqld。sockEnterpassword:此处输入password后回车 查看: 看一看加密保存的信息:mysqlconfigeditorprintloginpathbackup〔backup〕userimmebpasswordsocketdatamysqldatamysqld。sock 可以看到,除了保存了user、socket外,还加密保存了密码。 改造: mysqlbackup命令就可以如下改造,直接调用此加密信息: 改造前:mysqlbackupuserimmebpasswordLaoGeDB123!socketdatamysqldatamysqld。sockbackupimagemyfullbak。mbibackupdirdatabackupshowprogresscompresswithtimestampbackuptoimage 改造后:mysqlbackuploginpathbackupbackupimagemyfullbak。mbibackupdirdatabackupshowprogresscompresswithtimestampbackuptoimage 通过改造前后对比,安全性与易用性都得到加强。7。进阶 上面讲解了mysqlbackup的常规用法,其实它还有很多高级功能,比如:备份加密磁带备份创建主从复制创建组复制指定备份对象指定还原对象 有兴趣的朋友可以参照官方文档继续深入研究。 官方文档在此:https:dev。mysql。comdocmysqlenterprisebackup8。0en 作者:老哥讲数据库 简介:数据库高级架构师Oracle11gOCM认证MySQL5。78。0OCP认证。 原创文章,转载请注明来源。