mysql和oracle数据库的备份和迁移

news2024/9/22 15:25:10

   本文主要讲述了mysql数据库的备份和迁移;oracle的肯定是备份和数据迁移,同时介绍了linux的定时任务。

一、mysql

Docker容器下mysql备份方法

1、数据库备份

# 进入容器

docker exec -it 《containerId容器id》 /bin/bash

# mysqldump命令备份并生成数据库文件db_name.db

 mysqldump -u root -p 《db_name数据库名称》 > /home/db_name.db

# 将容器内文件复制到/home/inspuriot/目录下,便于下载迁移

docker ps

 docker cp 162c4c8de496:/home/db_name.db /home/inspuriot/

2、数据库迁移

#  数据库导入

mysql -u root -p 《db_name数据库名称》 < /data/sql/db_.db

二、Oracle

1、创建工作目录

工作目录为数据库导入和导出存放的地址。

首先在服务器下创建目录;

mkdir /data/sqlbak/bakdata

然后在数据库中创建目录:

数据库导出操作目录:BAKDIR

create directory bakdir as '/data/sqlbak/bakdata';

grant read,write on directory bakdir to jtg;

grant read,write on directory bakdir to system;

2、数据库定期备份脚本

#! /bin/bash

#  备份和恢复脚本

# 注意:脚本首先会在执行目录生成sql文件,配置定时任务注意首先切换目录



#db用户名

dbuser=jtg

#db密码

dbpasswd="name\password"

#ip地址

dbip=127.0.0.1

#备份的数据库

db_list="JTG"



#备份目录

bakdir=/data/sqlbak/bakdata

#备份操作的日志文件

bakfile=/data/sqlbak/exp_log.log

#备份数据的目录

bakdatadir=/data/sqlbak/bakdata

#备份数据的目录-持久化备份

persist_path=/data/sqlbak/persistdata



#备份保存时间,单位: 天

dateoutday=10



actDumpDir=/u01/app/oracle/admin/ksmt/dpdump



#备份单个数据库

bak_single()

{

        cd ${bakdatadir}

        #db name

        sdb=$1



        #日期字符串

        datestr=$2



        if [ ! ${datestr} ]; then

           datestr=$(date "+%Y_%m_%d_%H_%M_%S")

        fi



        echo "bak_single ${sdb}_${datestr}_bak.dmp.gz BEGIN..." >> ${bakfile}







        #!/bin/bash

        # 设置Oracle环境变量

        # export ORACLE_HOME=/home/oracle

        export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1

        export ORACLE_SID=ksmt

        export PATH=$ORACLE_HOME/bin:$PATH

        #指定directory名字

        export DIRECTORE_NAME='BAKDIR'



        # 指定备份文件名

        backup_file="${sdb}_${datestr}_bak.dmp"





        echo "${datestr}===================================数据库备份开始================================" >> ${bakfile}

        # 执行数据库备份

        expdp ${dbuser}/${dbpasswd}@《数据库ip地址:端口》/ksmt dumpfile=$backup_file DIRECTORY=${DIRECTORE_NAME} schemas=${dbuser}





        # 记录数据库备份日志

        cat ${bakdatadir}/export.log >> ${bakfile}





        # 检查备份是否成功

        if [ $? -eq 0 ]; then

            echo "数据库备份文件生成: "+${bakdatadir}/${backup_file} >> ${bakfile}

            echo "数据库备份成功!" >> ${bakfile}

        else

            echo "数据库备份失败!" >> ${bakfile}

        fi



        gzip ${bakdatadir}/${backup_file}

        #记录日志

        echo "bak_single ${sdb}_${datestr}_bak.dmp.gz  COMPLETE..." >> ${bakfile}



}



#备份所有数据库

bak_all()

{

        #日期字符串

        all_datestr=$(date "+%Y_%m_%d_%H_%M_%S")

        #

        date_dir=$(date "+%Y%m%d")



        date_month_dir=$(date "+%Y%m")

        #

        echo "bak_all begin ${all_datestr} ====================" >> ${bakfile}



        bak_single JTG ${all_datestr}

        #等待所有数据库备份完成

        wait



        #压缩

        tar czvf dbbak_${all_datestr}.tar *_${all_datestr}_bak.dmp.gz

        #删除

        rm *_${all_datestr}_bak.dmp.gz

        #是否存在当天日期命名的目录

        if [ ! -d ${bakdatadir}/${date_dir} ]; then

                mkdir -p ${bakdatadir}/${date_dir}

        fi

        #移动到当天日期命名的目录中

        mv dbbak_${all_datestr}.tar ${bakdatadir}/${date_dir}



        #是否存在当月日期命名的目录(持久化存储-1月1次)

        if [ ! -d ${persist_path}/${date_month_dir} ]; then

                mkdir -p ${persist_path}/${date_month_dir}

                #复制备份数据文件到持久化目录中

                echo "bak_all 保存到持久化目录:${persist_path}/${date_month_dir} ====================" >> ${bakfile}

                cp ${bakdatadir}/${date_dir}/dbbak_${all_datestr}.tar ${persist_path}/${date_month_dir}

        fi



        echo "bak_all finish dbbak_${all_datestr}.tar ====================" >> ${bakfile}

}





#检查过期备份

check_date_out()

{

        #当前目录

        curpath=`pwd`

        #当前日期

        curdate=$(date "+%Y%m%d")

        #最早的保存日期

        lastdate=`date -d "${curdate} - ${dateoutday} day" +%Y%m%d`

        #进入备份目录

        cd ${bakdatadir}



        # echo "备份目录${bakdatadir}"

        #目录列表

        pathlst=`ls *`

        #检查目录是否过期,删除已过期的目录

        # for tmpdate in ${pathlst[*]}; do

        for tmpdate in `ls`; do



                echo "遍历目录${bakdatadir}"

                if [ ${tmpdate} -le ${lastdate} ]; then



                        rm -rf ${tmpdate}

                        echo "check_date_out, curdate:${curdate} delete ${tmpdate} " >> ${bakfile}

                fi

        done



        #回到当前目录

        cd ${curpath}

}



recoverTables(){



        export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1

        export ORACLE_SID=《数据库实例名》

        export PATH=$ORACLE_HOME/bin:$PATH

        #指定directory名字

        export DIRECTORE_NAME='BAKDIR'



        # 文件路径

        dmpFilePath=$1

        # 表名

        tableName=$2



        dmpTarFileName=$(basename ${dmpFilePath})

        echo "dmpTarFileName=${dmpTarFileName}"



        dmpFileName=${dmpTarFileName%%.*}

        echo "dmpFileName=${dmpFileName}"



        cp -v ${dmpFilePath} ${bakdir}

        cd ${bakdir}

        tar -zxvf ${dmpTarFileName}



        dmpName=${dmpFileName: 6}

        echo "dmpName=${dmpName}"





        dmpDbFileName=JTG_${dmpName}_bak.dmp

        echo "dmpDbFileName=${dmpDbFileName}"



        gunzip ${dmpDbFileName}.gz



        echo "=====================数据库恢复开始==(表:$tableName)======================="





        impdp ${dbuser}/${dbpasswd}@《ip地址:端口》/ksmt dumpfile=$dmpDbFileName DIRECTORY=${DIRECTORE_NAME} tables=$2 table_exists_action=truncate



}









case "$1" in

   s)

        bak_single $2 $3

        ;;

   a)

        bak_all

        ;;

  chk)

        check_date_out

        ;;

  rec)

        recoverTables $2 $3

        ;;

   *)

    echo "Please use correct command..."

        ;;

esac

3、服务器定时任务 执行数据库备份脚本

# 文件执行权限

chmod +x oraclebackup.sh

su - oracle

crontab -e

# 每隔一天0点52分备份数据库

0 52 0 1/2 * ? /data/oraclebackup.sh a

# 每隔一天1点52分备份数据库

0 52 1 1/2 * ? /data/oraclebackup.sh chk

service crond restart 

4、数据表恢复

# 示例:手动恢复表FACTORY_CHECK_TASK_COPY0113

sh oraclebackup.sh rec /data/sqlbak/bakdata/20240117/dbbak_2024_01_17_09_56_33.tar FACTORY_CHECK_TASK_COPY0113

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

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

相关文章

02MFC画笔/画刷/画椭圆/圆/(延时)文字

文章目录 画实心矩形自定义画布设计及使用连续画线及自定义定义变量扇形画椭圆/圆输出颜色文本定时器与定时事件 画实心矩形 自定义画布设计及使用 连续画线及自定义定义变量 扇形 画椭圆/圆 输出颜色文本 定时器与定时事件

近期matlab学习笔记,学习是一个记录,反复的过程

近期matlab学习笔记&#xff0c;学习是一个记录&#xff0c;反复的过程 matlab的mlx文件在运行的时候&#xff0c;不需要在文件夹路径下&#xff0c;也能运行&#xff0c;但是需要调用子函数时&#xff0c;就需要在文件所在路径下运行 那就先运行子函数&#xff0c;把路径换过来…

【STM32CubeMX安装教程】

【STM32CubeMX安装教程】 1. 前言2. 下载软件3. 安装配置4. 测试5. 小结 1. 前言 STM32CubeMX是一款图形化工具&#xff0c;可以非常轻松地配置STM32微控制器和微处理器&#xff0c;以及为Arm Cortex-M内核生成相应的初始化C代码&#xff0c;或为Arm Cortex-A内核生成部分Linu…

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App 定制化

Mybatis-plus 集成 PostgreSQL 数据库自增序列问题记录

1.创建序列并绑定id CREATE SEQUENCE biz_factory_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;"id" int4 NOT NULL DEFAULT nextval(sys_user_seq::regclass), 2.实体设置KeySequence和TableId注解 注意IdType.INPUT 和 KeySequence(value …

docker inspect 如何提取容器的ip和端口 网络信息?

目录 通过原生Linux命令过滤找到IP 通过jq工具找到IP 使用docker -f 的过滤&#xff08;模板&#xff09; 查找端口映射信息 查看容器内部细节 docker inspect 容器ID或容器名 通过原生Linux命令过滤找到IP 通过jq工具找到IP jq 是一个轻量级且灵活的命令行工具&#xf…

通过FallbackFactory接口实现降级逻辑

触发限流或熔断后的请求不一定要直接报错&#xff0c;也可以返回一些默认数据或者友好提示&#xff0c;用户体验会更好。 给FeignClient编写失败后的降级逻辑有两种方式&#xff1a; 方式一&#xff1a;FallbackClass&#xff0c;无法对远程调用的异常做处理方式二&#xff1a…

GenAl如何改变 DevOps 中的软件测试?

TestComplete 是一款自动化UI测试工具&#xff0c;这款工具目前在全球范围内被广泛应用于进行桌面、移动和Web应用的自动化测试。 TestComplete 集成了一种精心设计的自动化引擎&#xff0c;可以自动记录和回放用户的操作&#xff0c;方便用户进行UI&#xff08;用户界面&…

读人工智能全传11人工智能会出什么错

1. 人工智能会出什么错 1.1. 一些报道是公正合理的&#xff0c;不过坦白地说&#xff0c;大部分报道都愚蠢得无可救药 1.2. 一些报道颇有知识性和引导性&#xff0c;而大部分则是杞人忧天式的恐吓 1.3. 滑稽的报道迎合了大众对人工智能的“终结者式恐惧” 1.3.1. 我们创造出…

python库(13):Tablib库简化数据处理

1 Tablib简介 数据处理是一个常见且重要的任务。无论是数据科学、机器学习&#xff0c;还是日常数据分析&#xff0c;都需要处理和管理大量的数据。然而&#xff0c;标准库中的工具有时显得不够直观和简便。这时&#xff0c;我们可以借助第三方库来简化数据处理流程。Tablib 就…

一.3.(1)结型MOSFET场效应管的结构和工作原理;

N沟道结型MOSFET的结构 看完上图&#xff0c;会发现其实本质上二极管&#xff0c;三极管&#xff0c;MOS管都是PN结&#xff0c;如果第一章一.1.&#xff08;1&#xff09;半导体基础知识_木头的最外层电子是多少个-CSDN博客 理解消化以后&#xff0c;发现底层原理都一样。 例如…

Linux进程编程(使用fork函数创建进程以及fork函数的实际引用场景)

目录 一、进程以及相关概念和指令 1.什么是进程、什么是程序、有什么区别&#xff1f; 2.如何查看系统中有哪些进程&#xff1f; 3.什么是进程标识符&#xff1f; 4.什么叫父进程&#xff0c;什么叫子进程&#xff1f; 二、进程的创建 三、fork函数的实际应用场景 总结…

[每周一更]-(第105期):SSL证书过期后引发的DNS缓存问题

问题回顾&#xff1a; ​ 上班路上收到ZeroSSL邮件通知我们清点项目的SSL证书到期了&#xff0c;到公司还是登录网址查看信息&#xff0c;一看果然是7.10也就是今天到期&#xff0c;开始看下acme.sh的定制任务为何没生效&#xff0c;一看crontab脚本&#xff0c;日志任务丢垃圾…

Java高频面试基础知识点整理13

干货分享&#xff0c;感谢您的阅读&#xff01;背景​​​​​​高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09; 最全文章见&#xff1a;Java高频面试基础知识点整理 &#xff08;一&#xff09;Java基础高频知识考点 针对人员&#xff1a; 1.全部人员都…

CSS实现table表格:隔行换色的效果

表格是网页中十分重要的组成元素。表格用来存储数据&#xff0c;包含标题、表头、行和单元格。在HTML语言中&#xff0c;表格标记使用符号<table>表示。定义表格光使用<table>是不够的&#xff0c;还需要定义表格中的行、列、标题等内容。推荐博文&#xff1a;《HT…

LeetCode热题100刷题13:64. 最小路径和、62. 不同路径、5. 最长回文子串、1143. 最长公共子序列

64. 最小路径和 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size();int n grid[0].size();vector<vector<int>> dp(m,vector<int>(n,INT_MAX));dp[0][0]grid[0][0];if(m1 && n1)return grid…

使用 Apache Pulsar 构建弹性可扩展的事件驱动应用

本视频来自 2024 Apache Pulsar 欧洲峰会&#xff0c;由 David Kjerrumgaard, 《Pulsar in Action》书作者给大家带来的《使用 Apache Pulsar 构建弹性可扩展的事件驱动应用》分享。 嘉宾&#xff5c;David Kjerrumgaard&#xff0c;Apache Pulsar Committer&#xff0c;《Pul…

登录/注册

目录 1.HTML 2.CSS 3.JS 4.资源 5.运行结果 6.下载链接 7.注意事项 1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

我的世界1.21多种服务端开服教程,原版/Forge/Fabric/Paper/Mohist...,Minecraft开服教程

Minecraft&#xff08;MC&#xff09;1.21版多种服务端开服教程&#xff0c;我的世界1.21服务器搭建教程&#xff0c;MC原版/Forge/Fabric/Paper/Mohist服务端搭建教程&#xff0c;我的世界MOD/插件服开服教程。 本教程使用 Linux系统MCSManager 面板来搭建Minecraft服务器。 …

编译打包自己的云手机(redroid)镜像

前言 香橙派上跑云手机可以看之前的文章&#xff1a; 香橙派5plus上跑云手机方案一 redroid(带硬件加速)香橙派5plus上跑云手机方案二 waydroid 还有一个cuttlefish方案没说&#xff0c;后面再研究&#xff0c;cuttlefish的优势在于可以自定义内核且selinux是开启的&#xf…