.net千万级数据导出_记一次解决docker下oracle数据库故障事例

一、问题背景:

某个项目的线上环境oracle数据库挂了,同事急匆匆来找我救火。我简单咨询了一些基本情况:线上环境,docker部署,已正常运行半年。由于宿主机的根目录硬盘空间不够,运维的同事想把oracle数据文件迁移至别的硬盘上。但不知什么原因,容器丢失,运维的同事想重建新的oracle容器。

二、分析问题:

第一步就是看操作历史,以便于全面了解同事都做了哪些操作。通过history命令,分析历史操作,得到以下信息:

1.oracle容器实例是于今年4月份创建,容器名为oracle11g,影射端口为1521,未指定挂载卷;

2.oracle11g容器未被删除,但现在通过docker ps -a却找不到;

3.同事将容器目录下的oradata文件夹mv到了另一块硬盘上;

4.宿主机的根目录空间只剩下3个G;

5.同事尝试创建新的oracle容器,并指定挂载mv出来的数据文件;

仅有数据文件是很难把数据库服务跑起来的,故找回容器oracle11g是解决问题的关键。由于同事已经记录了oracle11g容器的ID,于是找到了容器的所在目录:/mnt/docker-data/containers/,发现容器文件还在。

接着分析历史操作,又发现同事改了docker容器目录containers下oracle11g的hostconfig.json文件,于是推断此项操作是导致容器丢失的关键。

于是,将hostconfig.json文件恢复,重新启动docker服务:

# systemctl restart docker

重启成功之后,通过docker ps -a已经可以找到oracle11g这个容器了。

尝试启动oracle11g:

# docker start oracle11g;

启动成功!于是进入容器,检查数据库状态:

# docker exec -it oracle11g bash   //进入容器
$ source /home/oracle/.bash_profile   //引用环境变量
$ sqlplus / as sysdba   //进入数据库实例
> shutdown immediate //关闭数据库
> startup   //启动数据库

启动数据库时,报错,提示数据文件需要恢复。此问题是由于同事已将容器中的数据文件/oradata通过mv操作转移到了其它硬盘。

至此,问题已很清楚。以下问题需要得到解决:

1.docker的Root_dir是在宿主机的根目录下,目前可用空间仅3G,需要把docker的数据目录改为有更多硬盘空间的目录:/NET_FS;

2.需要根据现有的oracle11g容器创建新的镜像,以通过挂载的方式引用mv出来的数据文件(也可以把数据文件拷备至容器原有的数据文件所在的位置,但是否可行待验证);

三、解决过程:

先解决第2个问题,根据现有容器创建新的镜像:

# docker export oracle11g /NET_FS/oracle11g_image.tar //导出容器,漫长的等待。

容器导出成功后,由于docker所在的文件系统已无多余空间可用,故再调整docker的Root_dir目录:

# systemctl stop docker //停止docker服务;
# cp -R /mnt/docker-data /NET_FS/lib/docker/      //拷备现有的docker数据文件至新的文件系统

整个docker数据文件约100G,经过漫长的等等之后,拷备完成。接下来修改Root_dir参数:

# vim /etc/docker/daemon.json  //添加以下内容
{"data-root": "/NET_FS/lib/docker/docker-data"}

启动docker服务:

# systemctl start docker  //启动服务
# docker info |grep Root   //检验数据文件目录修改是否生效
# docker ps  //查看容器运行状态
# df -h   //也可以通过此命令看到docker的目录已经生效

docker服务正常,其它的容器也正常运行。接下来,将刚才导出的容器,导入为新的镜像:

# cat /NET_FS/oracle11g_image.tar |docker import - oracle11g:v3 //导入容器为镜像 
# docker images  //查看镜像,新的镜像已成功添加。

根据镜像创建新的容器,并挂载指定的oracle数据文件:

# docker run -d --name oracle11g_new -p 1521:1521 -v /NET_FS/oradata /oradata oracle11g:v3 /bin/bash 

容器创建成功,接下来进入容器,启动数据库:

# docker exec -it oracle11g_new bash    //进入容器
$ source /home/oracle/.bash_profile   //引用环境变量
$ sqlplus / as sysdba   //进入数据库实例
> shutdown immediate //关闭数据库
> startup   //启动数据库

数据库顺利启动!经过业务验证,系统已经恢复,至此故障得到解决。

四、总结与反思:

通过此次故障修复,有以下几点反思:

1.生产环境的一切操作要谨慎,随时准备好回退方案。如本例中,在转移数据库数据文件时,用的是mv,非cp;

2.除非知道自己在做什么,否则最好考虑清楚再下手。本例中容器的hostconfig.json文件被修改后,导致找不到容器,同事以为容器“丢失”;

3.线上环境没有预先规划好资源。本例中docker是直接安装至根目录下的,但根目录只有50G的空间,对于生产环境来说,这个空间肯定是不够用的。

4.宿主机没有使用LVM逻辑卷管理,导致后期扩容困难。

5.运维操作不规范,如没有制定妥善的扩容方案,运维人员操作也存在操作风险。

五、写在最后:

在故障处理期间,相关同事已经做好了数据丢失的心理准备,这种压力是特别大的。但幸好问题得到解决,数据也没有丢失。通过此次事件,我也汲取教训,认真反思和总结,以求工作中避免发生不可挽回的事故。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1644E. Expand the Path

E. Expand the Path 一道灯下黑的题目。 我们很显然知道,要让每个列的上限最小,下限最大(同理计算行也可以)。 所以图形应该是一个中心对称图形 所以空白部分是一个矩形(除了一开始的地方),但是…

Swift 将日期转化为字符串,显示上午还是下午

let dateF DateFormatter() // aaa 用于显示上午还是下午,mm和MM 分别表示12小时制和24小时制 dateF.dateFormat "yyyy-MM-dd aaa hh:mm:ss" dateF.amSymbol "上午" dateF.pmSymbol "下午" let str dateF.string(from: Date()) …

车间生产能耗管控方案_如何给生产车间降温 环保空调的这些方案一定能帮到你...

生产车间闷热如何降温?高温闷热带来的影响是非常大,在厂房车间闷热的环境会影响作业人员的情绪,增加燥热感,使工作效率下降,生产力降低,产品质量变差,蕞严重的结果导致客户流失,所以…

1612D. X-Magic Pair

D. X-Magic Pair 一道数学题&#xff0c;我们让a>b&#xff0c;那么如果x在a到a%b之间就可以通过a-n*b得到 然后辗转相余#include <bits/stdc.h> using namespace std; #define int long long const int mod 998244353; const int N 2e5 9; map<int, int> m…

【BZOJ2791】[Poi2012]Rendezvous 倍增

【BZOJ2791】[Poi2012]Rendezvous Description 给定一个n个顶点的有向图&#xff0c;每个顶点有且仅有一条出边。对于顶点i&#xff0c;记它的出边为(i, a[i])。再给出q组询问&#xff0c;每组询问由两个顶点a、b组成&#xff0c;要求输出满足下面条件的x、y&#xff1a;1. 从顶…

app开发人脸登录和指纹登录_易讯云通讯推出“一键登录”,为App登录提供新方案...

移动互联网时代&#xff0c;用户的耐心越来越少&#xff0c;注意力也越来越弱&#xff0c;追求便捷与高效。登录的方式从自定义的账号密码登录&#xff0c;到邮箱登录&#xff0c;到第三方登录与手机验证码登录两种登录方式进行竞争&#xff0c;到现在的个人指纹&#xff0c;人…

1641B. Repetitions Decoding

B. Repetitions Decoding 一个写起来繁琐一点的构造&#xff0c;主要是要记录到哪了。#include<bits/stdc.h> using namespace std; const int N1e6; int t,n,a[N],p[N],v,l,r,A[N],B[N],c,q[N],s; void T(int x,int y) {A[c]x,B[c]y;//A存储地方&#xff0c;B存储数值f…

可以直接考甲级吗_成人高考可以考本科吗?成人高考可以考研究生吗?

成人高考可以考本科吗?成人高考可以考研究生吗?当你选择利用成人高考的方式来提升学历的时候&#xff0c;那么我们需要了解关于成人高考的知识越多越好。成人高考可以考本科吗?成人高考可以考研究生吗?相信这是很多考生都想要了解的问题。成人高考可以考本科吗?成人高考可…

python变量和字符串

这段时间忘记更博了&#xff0c;学的太投入就一口气把python都学完&#xff0c;做了几个上手的小项目&#xff0c;自娱自乐&#xff0c;把笔记都写在百度云笔记中&#xff0c;现在就开始把所有笔记都粘贴复制分享给大家把 变量变量就是编程最基本的存储单位比如a12&#xff0c;…

1634C. OKEA

C. OKEA 一道简单的数学问题&#xff0c;一行只能有奇数或者偶数&#xff0c;进行判断就行了#include<bits/stdc.h> using namespace std; const int N1e6; int main() {int t,n,k;cin>>t;while (t--&&cin>>n>>k){int cnt (n*k1)/2;//奇数的…

php面试编程题_PHP程序员面试题(经典汇总,mysql为主)

以下是本节php面试题的全部内容。1.表单中 get与post提交方法的区别?答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.2.session与cookie的区别?答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(sess…

js中 style.width与 offsetWidth的区别

作为一个初学者&#xff0c;经常会遇到在获取某一元素的宽度&#xff08;高度、top值...&#xff09;时&#xff0c;到底是用 style.width还是offsetWidth的疑惑。 1. 当样式写在行内的时候&#xff0c;如 <div id"box" style"width:100px">时&#…

1634D. Finding Zero

D. Finding Zero 构造&#xff0c;我们设a&#xff0c;b&#xff0c;c里面有最大值和最小值在这里插入代码片&#xff0c;然后再从中找到二者 #include<bits/stdc.h> using namespace std; const int N 2e67; int ask(int a,int b,int x) {cout<<"? "…

Python中曲率与弯曲的转换_黎曼几何学习笔记(3)——共形数量曲率与高斯曲率...

参考文献&#xff1a;(GTM171)Peter《Riemannian Geometry》&#xff0c;Richard Mikula《Notes on the Yamabe Flow》&#xff0c;夏青《曲面上的预定高斯曲率问题》.我声明以下内容我亲自验算过&#xff0c;在文章后面我会给出我的部分验算手稿.设是维紧致可定向黎曼流形&…

Nginx服务基础

Nginx的英文官方网站是http://nginx.org&#xff0c;在这里可以查看Nginx的各个软件版本信息。Nginx软件有三种版本&#xff1a;稳定版、开发版和历史稳定版。开发版更新较快&#xff0c;包含最新的功能和bug的修复&#xff0c;但同时也可能会遇到新的bug&#xff0c;开发版的更…

1622C. Set or Decrease

C. Set or Decrease 一道思维题#include <bits/stdc.h> using namespace std; #define int long long const int N 2e57; int a[N]; signed main() {int t;cin>>t;while (t--){int n,k,sum 0;cin>>n>>k;for (int i0;i<n;i){cin>>a[i];suma…

Linux下搭建iSCSI共享存储详细步骤(服务器模拟IPSAN存储)

一、简介 iSCSI&#xff08;internet SCSI&#xff09;技术由IBM公司研究开发&#xff0c;是一个供硬件设备使用的、可以在IP协议的上层运行的SCSI指令集&#xff0c;这种指令集合可以实现在IP网络上运行SCSI协议&#xff0c;使其能够在诸如高速千兆以太网上进行路由选择。iSCS…

yum如何安装特定版本的gcc_linux下如何升级python

Python 的概念小编使用的centos7下的python版本为2.7,而python要全面转向python3,故升级pyhton迫在眉睫&#xff0c;今天来介绍一下如何升级centos下的python首先要确定需要升级的python3的版本&#xff0c;比如小编想升级到3.7.0&#xff0c;在linux下输入命令&#xff1a;这条…

java报错空指针异常_夯实基础:认识一下这10 个深恶痛绝的 Java 异常

异常是 Java 程序中经常遇到的问题&#xff0c;我想每一个 Java 程序员都讨厌异常&#xff0c;一 个异常就是一个 BUG&#xff0c;就要花很多时间来定位异常问题。什么是异常及异常的分类请看这篇文章&#xff1a;异常小结&#xff1a;上一张图搞清楚Java的异常机制。今天来列一…

页面分页

需求&#xff1a;当数据很多&#xff0c;一个页面难以展现时&#xff0c;便需要分页来实现。 说在前面&#xff1a; 1.每一页展示的数据可以从数据库中抽取出来&#xff0c;数据查询方法中有limit这个方法&#xff0c;limit x,y —–>x表示从第几条数据开始查询&#xff0c;…