• MySQL大表直接复制文件的copy方式


    看腻了就来听听视频演示吧:https://www.bilibili.com/video/BV1Bp4y1F7kd/

    • MyISAM引擎可单独将 *.MYD和 *.MYI 拷贝到远程服务器上
    • InnoDB引擎受限于版本(MySQL5.5)无法直接拷贝.ibd文件,因为在ibdata1文件保存有表的字典信息,在ibd文件保存有事务ID和日志序列号,只能用dump方式。

    操作步骤:

    • 获取备份表DDL,统计数据集(用于恢复后校样)
    • 锁表,导出表对应的数据字典文件
    • 备份表对应的数据文件和数据字典文件
    • 解锁,恢复表的相关业务操作
    • 在恢复环境上创建该表DDL(测试演练在同一环境故先删表再重建该表)
    • 关闭该表的数据空间,即会删除该表的ibd数据文件
    • 将备份数据文件和数据字典文件copy到对应数据目录下
    • 应用表空间恢复数据并进行恢复后检查
    • 验证恢复的数据集

    直接上案例模拟演示:

    # MySQL 6+ 可以直接拷贝的前提条件是独立表空间,即innodb_file_per_table=1
    mysql> show variables like 'innodb_file_per_table';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON    |
    +-----------------------+-------+
    
    # 查看测试表DDL
    mysql> show create table t12\G
    *************************** 1. row ***************************
           Table: t12
    Create Table: CREATE TABLE `t12` (
      `pid` bigint(20) unsigned NOT NULL DEFAULT '0',
      `pname` varchar(20) DEFAULT NULL,
      `project` varchar(20) DEFAULT NULL,
      `tvalue` decimal(5,2) DEFAULT NULL,
      `unit` varchar(8) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    # 查看测试表数据
    mysql> select * from t12;
    +-----+--------+---------+--------+------+
    | pid | pname  | project | tvalue | unit |
    +-----+--------+---------+--------+------+
    |   1 | 王五   | 身高    | 172.34 | cm   |
    |   2 | 王五   | 体重    |  69.52 | kg   |
    |   3 | 王五   | 年龄    |  22.00 | 岁   |
    |   4 | 赵六   | 身高    | 170.52 | cm   |
    |   5 | 赵六   | 体重    |  80.52 | kg   |
    |   6 | 赵六   | 年龄    |  26.00 | 岁   |
    +-----+--------+---------+--------+------+
    6 rows in set (0.00 sec)
    
    # 表加全局读锁,即把.cfg数据字典文件导出到磁盘上
    mysql> flush tables t12 for export;
    Query OK, 0 rows affected (0.00 sec)
    
    # 拷贝数据目录对应库名下的 t12.ibd 和 t12.cfg文件,然后修改属性
    [root@db01 mdb]# mkdir /tmp/mysql_back
    [root@db01 mdb]# ll t12.*
    -rw-r----- 1 mysql mysql   585 Sep  2 16:16 t12.cfg
    -rw-r----- 1 mysql mysql  8690 Sep  2 16:11 t12.frm
    -rw-r----- 1 mysql mysql 98304 Sep  2 16:11 t12.ibd
    [root@db01 mdb]# cp t12.ibd /tmp/mysql_back
    [root@db01 mdb]# cp t12.cfg /tmp/mysql_back
    [root@db01 mdb]# chown -R mysql.mysql /tmp/mysql_back/t12.*
    [root@db01 mdb]# ll /tmp/mysql_back/t12.*
    -rw-r----- 1 mysql mysql   585 Sep  2 16:18 /tmp/mysql_back/t12.cfg
    -rw-r----- 1 mysql mysql 98304 Sep  2 16:18 /tmp/mysql_back/t12.ibd
    
    # 解锁,模拟删表
    mysql> unlock tables;
    Query OK, 0 rows affected (0.00 sec)
    mysql> drop table t12;
    Query OK, 0 rows affected (0.00 sec)
    # 创建原表结构
    mysql> CREATE TABLE `t12` (
        ->   `pid` bigint(20) unsigned NOT NULL DEFAULT '0',
        ->   `pname` varchar(20) DEFAULT NULL,
        ->   `project` varchar(20) DEFAULT NULL,
        ->   `tvalue` decimal(5,2) DEFAULT NULL,
        ->   `unit` varchar(8) DEFAULT NULL
        -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.01 sec)
    
    # 关闭表的数据空间并会删除其数据文件t12.ibd
    mysql> alter table t12 discard tablespace;
    Query OK, 0 rows affected (0.01 sec)
    
    # 再把备份的t12.ibd 和 t12.cfg文件拷贝过来
    [root@db01 mdb]# mv /tmp/mysql_back/t12.cfg .
    [root@db01 mdb]# mv /tmp/mysql_back/t12.ibd .
    [root@db01 mdb]# ll t12.*
    -rw-r----- 1 mysql mysql   585 Sep  2 16:18 t12.cfg
    -rw-r----- 1 mysql mysql  8690 Sep  2 16:26 t12.frm
    -rw-r----- 1 mysql mysql 98304 Sep  2 16:18 t12.ibd
    
    # 应用表空间恢复数据并进行恢复后检查
    mysql> alter table t12 import tablespace;
    Query OK, 0 rows affected (0.01 sec)
    mysql> check table t12;
    +---------+-------+----------+----------+
    | Table   | Op    | Msg_type | Msg_text |
    +---------+-------+----------+----------+
    | mdb.t12 | check | status   | OK       |
    +---------+-------+----------+----------+
    1 row in set (0.00 sec)
    
    # 验证数据是否恢复回来
    mysql> select * from t12;
    +-----+--------+---------+--------+------+
    | pid | pname  | project | tvalue | unit |
    +-----+--------+---------+--------+------+
    |   1 | 王五   | 身高    | 172.34 | cm   |
    |   2 | 王五   | 体重    |  69.52 | kg   |
    |   3 | 王五   | 年龄    |  22.00 | 岁   |
    |   4 | 赵六   | 身高    | 170.52 | cm   |
    |   5 | 赵六   | 体重    |  80.52 | kg   |
    |   6 | 赵六   | 年龄    |  26.00 | 岁   |
    +-----+--------+---------+--------+------+
    6 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102

    MySQL的binlog系列和奇技操作:

    先来聊聊MySQL的binlog文件解析
    接着说说mysqlbinlog解析工具如何做数据恢复
    再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的闪回功能
    接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能
    借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能
    再来介绍另一个binlog文件解析的第三方工具my2sql
    顺带来聊聊MySQL误删ibdata数据文件的恢复
    MySQL大表直接复制文件的copy方式

  • 相关阅读:
    Springboot路政管理信息系统v93sc计算机毕业设计-课程设计-期末作业-毕设程序代做
    Git学习使用笔记--(一)
    从日志读取关键数据,按照相关日期进行数据分析
    Perl-->文件的操作
    MIT6.S081 2021 file system
    「git 系列」git 如何存储代码的?
    记录一次数据库变更失败
    SPark学习笔记:12 Spark Streaming 的简单应用WordCount
    ubuntu18.04 下海康工业相机hikrobot_camera的使用及问题的解决
    C#基础|属性Property之读写特性和经典总结
  • 原文地址:https://blog.csdn.net/suoyue_py/article/details/133604863