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)

MySQL的binlog系列和奇技操作:

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一. 概述 5 二. 卸载MySQL数据库 6 2.1 备份数据库 6 2.2 卸载MySQL数据库 6 2.2.1 检查MySQL服务并关闭服务进程 6 2.2.2 查找MySQL的安装目录并彻底删除 6 2.2.3 删除MySQL配置文件 7 2.2.4 删除MySQL用户以及用户组 7 三. 安装MySQL数据库 9 3.1 安装MySQL数据库 9 3.1.1 下载MySQL安装包 9 3.1.2 上传并解压MySQL安装包 9 3.1.3 添加系统MySQL组和MySQL用户 10 3.1.4 安装MySQL数据库 10 3.1.5 启动MySQL服务和添加开机启动MySQL服务 11 3.1.6 修改MySQL的root用户密码 13 3.1.7 把MySQL客户端放到默认路径。 13 3.2 配置MySQL数据库远程访问权限 13 3.2.1 进入 mysql 14 3.2.2 使用mysql数据库 14 3.2.3 查看用户表 14 3.2.4 创建远程登录用户并授权 15 3.2.5 强制刷新权限 15 3.3 恢复备份的数据库 15 四. MySQL数据库数据迁移 16 4.1 迁移前准备 16 4.1.1 停止MySQL数据库服务 16 4.1.2 创建数据库迁移目录 16 4.2 数据迁移 17 4.2.1 复制数据库数据到迁移目录 17 4.2.2 修改配置并启动服务 17 五. Mysql 数据目录存放位置更改 19 六. MySQL主从配置 20 6.1 基本条件 20 6.2 安装MySQL数据库 20 6.3 主机配置 20 6.3.1 修改my.cnf配置文件 20 6.3.2 初始化bin-log日志 21 6.4 从机配置 21 6.4.1 修改my.cnf配置文件 21 6.4.2 添加同步主机配置 22 七. MySQL互为主从配置 24 7.1 基本条件 24 7.2 安装MySQL数据库 24 7.3 主机A配置 24 7.3.1 修改my.cnf配置文件 24 7.3.2 给主机B赋予mysql权限 25 7.3.3 初始化bin-log日志 26 7.4 主机B配置 27 7.4.1 修改my.cnf配置文件 27 7.4.2 给主机A赋予mysql权限 28 7.4.3 初始化bin-log日志 29 7.5 同步配置 30 7.5.1 主机A设置同步 30 7.5.2 主机B设置同步 31 八. my.cnf配置样例 34 8.1 my.cnf推荐配置 34 8.2 my.cnf主从推荐配置 35 8.2.1 主机my.cnf推荐配置 35 8.2.2 从机my.cnf推荐配置 35 8.3 my.cnf互为主从推荐配置 36 8.3.1 主机A my.cnf推荐配置 36 8.3.2 主机B my.cnf推荐配置 37 8.3.3 鄙人的my.cnf简单配置 38 九. Mysql根据ibd文件恢复数据 40 9.1 创建新数据表,和源数据表一致 40 9.2 删除新数据表的表空间 40 9.3 将待恢复的<table_name>.ibd文件copy到目标数据库文件夹下,并修改文件权限 40 9.4 导入表空间 41 十. 根据frm文件恢复表结构 42 10.1 新建同名的表 42 10.1.1 建立新的表结构 42 10.1.2 修改新建的数据表结构为17个字段 43

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值