网站首页 > 资源文章 正文
场景:当我们想要备份恢复表的时候,一般使用导出为sql的方式,当时如果遇到数据量大的表,导出sql时很慢,导入的时候就更慢了;这里使用innobackup工具进行演示导出导入,速度快,基本相当于cp复制的速度,上限取决于磁盘的读写速度了就;
一、单个表的备份恢复
本操作示例模拟从A数据库备份code.user表,导入到B数据库;
1、备份指定表
——备份code库中的user表
在A数据库进行表备份
innobackupex --defaults-file=/etc/my.cnf --databases="code.user" --user=root --password=123456 ./code_user_back
--databases=""内参数可以以空格为单位分开,从而备份多个;
2、恢复操作
——回滚事务
对备份生产的文件夹进行事务的回滚,防止未提交事务导致数据缺失;
innobackupex --apply-log --export code_user_back/
此时查看文件夹内,user表有 .cfg、.exp、.frm、.ibd
[root@node2 mysql]# ls code_user_back/code/
user.cfg user.exp user.frm user.ibd
备份的每个表都会有这四个文件;
——创建对应的库和表
(在B数据库中创建对应的库和表)
示例:
mysql> create database code; #创建code库;
mysql> user code;
mysql> CREATE TABLE `user` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `username` varchar(50) NOT NULL,
-> `password` varchar(50) NOT NULL,
-> `name` varchar(20) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
创建的表一定要和原库中的表一致;可以在原库mysql命令行中查看创建表时的命令;
use code;
show create code.user;
——清空表空间
由于使用的是单独表空间储存,所以清空单个表空间不会影响整个mysql库的数据
mysql> use code;
mysql> alter table user discard tablespace; #清空user表空间
清空表空间后,在数据库物理目录下,code的user表就没有了user.ibd和user.cfg两个文件;
——复制表数据
将回滚事务后,code内表的 .frm、.ibd 两个文件复制到B数据库物理目录对应库下;
[root@node2 mysql]# cp code_user_back/code/user.ibd /usr/loca/mysql/data/code/
[root@node2 mysql]# cp code_user_back/code/user.cfg /usr/loca/mysql/data/code/
chown -R mysql:mysql /usr/local/mysql/data/
——导入表空间
mysql> use code;
mysql> alter table user import tablespace;
相当于user表重新读取了 user.ibd和user.cfg;
此时完成恢复;
3、说明
备份、恢复单独的表无需重启或初始化mysql。
如果这对的表比较多,需要频繁的清空每个表的表空间——复制表文件——导入表空间;
二、批量表的备份和恢复
上面介绍了单个表的备份恢复,那如果想备份多个表,且表也分散mysql实例的其他库中,该如何备份呢;有两种方式指定过个表;
1、通过命令行指定过个表
按照【四】中的 --databases 来指定多个表,以空格隔开,示例:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --databases="newcode.user newcode.mnoinfo" /data/dbBack/new_innobackup_datas/xpt_test --no-timestamp
在 --databases 参数中,newcode 是库名称,后面的user是表名称,多个以空格隔开;
执行后进行备份;
2、通过指定文件
如果备份很过个表,命令行会很长,不便于编辑。
可以读取指定文件,文件内填写要备份的表,即可一次性备份很多个表:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --tables-file=/data/dbBack/new_innobackup_datas/tables.txt /data/dbBack/new_innobackup_datas/back_tables --no-timestamp
参数说明:
--tables-file:指定一个文件,文件内包含要备份的表;
文件格式为 database.table ,每行一个表,示例:
[root@localhost new_innobackup_datas]# cat tables.txt
newcode.user
newcode.mnoinfo
newcode.project
hpdb.testedinfonew_roche
hpdb.sys_menu
我们先写好要备份的 库.表 名称,每行一个,不要有空格;
然后在执行时指定该txt文件,就会按照txt文件中的库表名来备份了;
3、批量表的恢复
在单表备份恢复中,已经讲述了备份恢复的原理。
如果恢复单表,手动恢复还是没有多少工作量的,但是设计了批量表的恢复,手动执行显然也是不行的,但是innobackup工具也没有给出批量表恢复的工具。
于是,针对批量表恢复的场景,我编写了python脚本工具,可以应对批量表的恢复场景。
关注我,下期发送批量表恢复的教程和工具,感谢大家支持!
猜你喜欢
- 2024-11-19 要懂redis,首先得看懂sds(全网最细节的sds讲解)
- 2024-11-19 迷之 crontab 异常:不运行、不报错、无日志?原来是这些原因
- 2024-11-19 「Shiro 系列 07」Shiro 中密码加盐
- 2024-11-19 K8S:分享一次“乌龙问题”(人为导致的无法正常删除命名空间)
- 2024-11-19 DBCC CHECKD 手工修复和优化数据库 各种参数的用法说明
- 2024-11-19 开发利器丨如何使用ELK设计微服务中的日志收集方案?
- 2024-11-19 人民艺Show|共赏经典话剧:北京人民艺术剧院《雷雨》
- 2024-11-19 聊聊springboot项目如何实现自定义actuator端点
- 2024-11-19 Doris Rollup物化视图及应用实践
- 2024-11-19 JavaDemo案例演示RocketMQ DLedger宕机故障下的高可用
你 发表评论:
欢迎- 最近发表
-
- Linux系统Shell脚本编程之whiptail图形化工具编写系统管理程序
- Linux常用命令讲解及Shell脚本开发实战入门二
- Linux命令手册:从青铜到王者,这30个命令让你成为终端高手
- Shell脚本编程入门:轻松掌握自动化利器
- 阿里巴巴《Linux命令行与shell脚本编程大全》高清版 PDF 开放下载
- Lazygit:让Git操作变得直观高效的终端魔法
- 2GB内存电脑跑Win10太卡 程序员求助 网友怀念起XP系统
- 觉得Linux很难?不妨试试2025年这些Linux桌面版!
- Linux运维工程师必知的服务器备份工具:Rsnapshot
- 推荐给系统管理员的10款Linux GUI工具
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)