MYSQL 表对表快速迁移-直接拷贝表空间文件.ibd进行迁移

数据无价,操作前,建议先备份

前提条件

  1. 表结构一致

    • 源数据库和目标数据库中的表结构必须完全相同。这包括表的列定义、索引、约束等。
  2. 表使用 InnoDB 存储引擎

    • 这种迁移方法仅适用于使用 InnoDB 存储引擎的表,因为 .ibd 文件是 InnoDB 表的表空间文件。
  3. 数据库版本兼容

    • 源数据库和目标数据库的 MySQL 或 MariaDB 版本应该兼容。理想情况下,两个数据库的版本应该相同或非常接近,以避免潜在的兼容性问题。
  4. 表未被使用

    • 在执行 FLUSH TABLES ... FOR EXPORTDISCARD TABLESPACE 操作时,确保表未被其他事务或会话使用。
  5. 文件系统权限

    • 确保你有足够的文件系统权限来复制和修改 .ibd.cfg 文件。通常,这需要 root 权限或数据库服务用户(如 mysql 用户)的权限。
  6. 数据库服务用户权限

    • 确保数据库服务用户(如 mysql 用户)对目标数据库目录具有读写权限。
  7. 关闭外键检查

    • 如果表中有外键约束,可能需要在导入表空间之前临时禁用外键检查。

注意事项

  1. 备份数据

    • 在进行任何操作之前,务必备份源数据库和目标数据库的数据,以防止数据丢失。
  2. 一致性检查

    • 在导入表空间后,检查表的数据一致性和完整性,确保数据没有损坏。
  3. 表定义文件

    • 确保在导出表空间时生成了表定义文件(.cfg 文件),并在导入时一并复制到目标数据库。
  4. 数据库日志

    • 在操作过程中,检查数据库日志文件以获取更多信息和错误提示。
  5. 禁用外键检查(如果有外键):

    • 在导入表空间之前,可以临时禁用外键检查,以避免外键约束问题。
    SET foreign_key_checks = 0;
    ALTER TABLE table_name IMPORT TABLESPACE;
    SET foreign_key_checks = 1;

迁移步骤

  1. 在源数据库中

    -- 在源数据库中执行 FLUSH TABLES table_name FOR EXPORT 命令。这将确保表的所有更改都已写入磁盘,并生成一个表定义文件(.cfg 文件)
    FLUSH TABLES table_name FOR EXPORT;
  2. 复制文件

    -- 复制表的表空间文件(.ibd 文件)和表定义文件(.cfg 文件)到目标数据库服务器
    -- 如果没有账号密码的情况下,可以借助nginx+wget进行传输文件scp /path/to/mysql/data/database_name/table_name.ibd user@target_server:/path/to/target/mysql/data/database_name/
    scp /path/to/mysql/data/database_name/table_name.cfg user@target_server:/path/to/target/mysql/data/database_name/
  3. 在目标数据库中

    -- 在目标数据库中创建一个与源表结构相同的表。直接使用源数据库表结构导出后,再目标数据库创建表
    CREATE TABLE table_name (...);
    -- 执行 ALTER TABLE table_name DISCARD TABLESPACE 命令。这将删除目标表的现有表空间文件。
    ALTER TABLE table_name DISCARD TABLESPACE;
  4. 复制文件到目标数据库目录

    -- 将源数据库中的表空间文件(.ibd 文件)和表定义文件(.cfg 文件)复制到目标数据库的表空间目录中
    cp /path/to/source/table_name.ibd /path/to/target/mysql/data/database_name/
    cp /path/to/source/table_name.cfg /path/to/target/mysql/data/database_name/-- 根据目标数据库文件的权限进行对应的权限修改
    chown -R polkitd:input /path/to/target/mysql/data/database_name/table_name.ibd
    chown mysql:mysql /path/to/target/mysql/data/database_name/table_name.ibd
    chown mysql:mysql /path/to/target/mysql/data/database_name/table_name.cfg
  5. 在目标数据库中导入表空间

    -- 执行 ALTER TABLE table_name IMPORT TABLESPACE 命令。这将导入表空间文件到目标表中。
    ALTER TABLE table_name IMPORT TABLESPACE;
  6. 检查

    • 结束后,检查源数据库表和目标表数据是否一致 可使用查询语句count(*)或者其他比对方式
    • 删除源数据库和目标数据库的cfg文件

后记

  • docker 部署的mysql 可以使用 docker inspect 容器id 查询容器信息,找到docker的位置

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

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

相关文章

Redux (八) 路由React-router、嵌套路由、路由传参、路由懒加载

文章目录 一、React-Router的基本使用1. 安装及基本使用(路由映射配置)2. 路由跳转Link与NavLink3. Navigate导航4. 处理路径不存在的情况 二、嵌套路由三、手动跳转 (类似编程式路由导航)1. 函数式组件2. 类组件实现手动跳转 四、路由传参1. 路径设置占位符(params)2. search传…

Java面试指南:Java基础介绍

这是《Java面试指南》系列的第1篇,本篇主要是介绍Java的一些基础内容: 1、Java语言的起源 2、Java EE、Java SE、Java ME介绍 3、Java语言的特点 4、Java和C的区别和联系? 5、面向对象和面向过程的比较 6、Java面向对象的三大特性&#xff1a…

leetcode30:串联所有单词的字串

给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["ab","cd","ef"], 那么 "abcdef…

1. 解读DLT698.45-2017通信规约--预连接响应

国家电网有限公司企业标准,面向对象的用电信息数据交换协议DLT698.45-2017 为提高用电信息采集系统的业务适应性、采集效率、安全性和数据溯源性,规范用电信息数据交换协议的通信架构、数据链路层、应用层、接口类与对象标识,制定本标准。 …

Linux系统:(Linux系统概述与安装)

硬件计算机硬件是指计算机系统中所有物理部件的总称。包括计算机主机、显示器、键盘、鼠标、内存、硬盘、处理器、主板等等。这些硬件部件是计算机系统运行的基础 不管是电脑系统(个人电脑、服务器等)、还是移动端操作系统(手机、平板等)。它的功能就是做为用户和硬件之间的桥梁…

前端求职简历-待补充

当然可以,针对大厂的前端岗位,一个吸引人的简历应该突出你的技术能力、项目经验、教育背景以及任何能体现你学习能力和团队协作能力的证明。以下是一个简历大纲示例,你可以根据自己的实际情况进行调整: 个人信息 姓名联系方式&a…

图文深入介绍oracle资源管理(续)

1. 引言: 本文将承接上篇继续深入介绍oracle资源管理。本文重点介绍如何使用oracle资源管理器管理好DB。 2. 资源管理器: 可以使用图形界面 OEM$或命令行调用 DBMS RESOURCE MANAGER 程序包的过程进行数据库资源管理。 调用资源管理器的先决条件&…

瑞数后缀加密怎么处理

前言: 瑞数我们经常补环境通过,但是遇到瑞数后缀不知道怎么处理 就拿瑞数4来讲 解决方法: (1)传明文加密参数 一般情况,我们传明文加密参数也能访问 (2)再补环境基础调用open …

基于stm32的4G模块点灯实验

led模块功能封装 #include "led.h" #include "sys.h"//初始化GPIO函数 void led_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟__HAL_RCC_GPIOB_CLK_ENABLE();//调用GPIO初始化函数gpio_initstruct.Pin GPIO_PIN_8 | GPIO_PIN_9;gpio_inits…

排序算法 —— 直接插入排序

目录 1.直接插入排序的思想 2.直接插入排序的实现 实现分析 实现代码 3.直接插入排序的分析 时间复杂度分析 空间复杂度分析 稳定性 1.直接插入排序的思想 直接插入排序的思想就是把待排序的元素按其关键码值的大小依次插入到一个已经排好序的有序序列中&#xff0c…

pycharm调试带参数命令行的程序

点击 run configuration 点击加号,选择python name填写程序名字,script填写程序路径,下一行填写传入的参数 点击apply,再点ok,即可debug 参考: pycharm 调试模式下命令行参数的传递_pycharm debug传参 ya…

项目实战:构建 effet.js 人脸识别交互系统的实战之路

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀构建 effet.js 📒1. 什么是effet.js📜2. 为什么需要使用effet.js📝3. effet.js的功能📚4. 使用…

【项目案例】-音乐播放器-Android前端实现-Java后端实现

精品专题: 01.C语言从不挂科到高绩点 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. SpringBoot详细教程 https://blog.csdn.ne…

HTML之表单设计

1、HTML表单 HTML表单是用于收集用户输入的信息,并将用户输入的内容信息传到后台服务器中。 表单是通过form标签实现。 特别注意:如果一些内容提交后,没有将内容提交给后台服务器,那么需要添加一个name属性,语法&am…

NC 单据模板自定义项 设置参照(自定义参照)

NC 单据模板自定义项 设置参照(自定义参照) 如图下图,NC 单据模板自定义项 设置参照: 1、选择需要设置参照的自定义字段,选择高级属性页签,在类型设置中,数据类型选择参照信息,即bd…

【热门主题】000004 案例 Vue.js组件开发

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

JavaWeb合集11-Maven高级

十一、Maven高级 1、分模块设计与开发 为什么?将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。 实现步骤&…

RabbitMQ下载与配置

安装Erlang Erlang 下载地址如下: https://erlang.org/download/otp_versions_tree.html 安装 RabbitMQ RabbitMQ 下载地址如下: https://www.rabbitmq.com/install-windows.html 查看服务,服务已经正常启动 打开Command Prompt 输入rabb…

bash之基本运算符

一.算术运算符 vim test.sh #!/bin/basha10 b20valexpr $a $b echo "a b : $val"valexpr $a - $b echo "a - b : $val"valexpr $a \* $b echo "a * b : $val"valexpr $b / $a echo "b / a : $val"valexpr $b % $a echo "b % a …

TH-OCR:强大的光学字符识别工具与车牌识别应用

在当今数字化的时代,高效准确地识别文本和图像中的字符变得至关重要。TH-OCR(清华 OCR)作为一款优秀的光学字符识别软件,以其卓越的性能和广泛的应用场景,受到了众多用户的青睐。其中,车牌识别功能更是在交…