Mysql数据库管理-表空间文件迁移

1 案例分析1 

案例:  将3306实例上dbt3库下的orders迁移到3307实例下的db库
      。   在3306,flush table orders for export; #加锁阻止写操作

2 测试脚本MDL锁

09:39:  [ytt]>

select b.name,a.path from

information_schema.innodb_tables b,

information_schema.innodb_datafiles a   /* innodb_tablespaces*/

where a.space=b.space;

+----------------+----------------------+

| name           | PATH                 |

+----------------+----------------------+

| mysql/id       | .\mysql\id.ibd       |

| mysql/t        | .\mysql\t.ibd        |

| mysql/test2    | .\mysql\test2.ibd    |

| mysql/test3    | .\mysql\test3.ibd    |

| sys/sys_config | .\sys\sys_config.ibd |

| test/t2        | .\test\t2.ibd        |

| ytt/t4         | 23.ibd               |

| ytt/t3         | 23.ibd               |

| ytt/t2         | 23.ibd               |

+----------------+----------------------+

9 rows in set (0.05 sec)

09:40:  [ytt]>

会话A

09:40:  [ytt]> flush table t2 for export;

Query OK, 0 rows affected, 1 warning (0.00 sec)

会话B

09:46:  [ytt]> update t2 set id =3 ;   卡主

09:47:  [ytt]> delete from t2;  --卡主

09:47:  [ytt]> insert into t2 select * from t2; --卡主

09:48:  [ytt]> select count(1) from t2;

+----------+

| count(1) |

+----------+

|        0 |

+----------+

1 row in set (0.01 sec)

09:48:  [ytt]>

在会话A查看锁信息

09:46:  [ytt]> show processlist;

+----+-----------------+-----------------+------+---------+------+---------------------------------+--

-------------------------------+

| Id | User            | Host            | db   | Command | Time | State                           | I

nfo                            |

+----+-----------------+-----------------+------+---------+------+---------------------------------+--

-------------------------------+

|  5 | event_scheduler | localhost       | NULL | Daemon  | 1057 | Waiting on empty queue          | N

ULL                            |

|  8 | root            | localhost:49201 | ytt  | Query   |    0 | init                            | s

how processlist                |

|  9 | root            | localhost:56583 | ytt  | Query   |    8 | Waiting for table metadata lock | i

nsert into t2 select * from t2 |

+----+-----------------+-----------------+------+---------+------+---------------------------------+--

-------------------------------+

3 rows in set (0.00 sec)

09:48:  [ytt]>

可以发现 使用flush table  T2 for export 是在表级别加上了X级别的mdl锁。

3 实施步骤

3306,flush table orders for export; #加锁阻止写操作

3306,进入数据区;cp orders.* /root
3306,unlock tables; 释放锁
3307,执行order建表

show create table orders;

CREATE TABLE `orders` (  `o_orderkey` int(11) NOT NULL,  `o_custkey` int(11) DEFAULT NULL,  `o_orderstatus` char(1) DEFAULT NULL,  `o_totalprice` double DEFAULT NULL,  `o_orderDATE` date DEFAULT NULL,  `o_orderpriority` char(15) DEFAULT NULL,  `o_clerk` char(15) DEFAULT NULL,  `o_shippriority` int(11) DEFAULT NULL,  `o_comment` varchar(79) DEFAULT NULL,  PRIMARY KEY (`o_orderkey`),  KEY `i_o_custkey` (`o_custkey`),  KEY `i_key_date` (`o_orderkey`,`o_orderDATE`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

  在3307,执行alter table orders discard tablespace; 删除独立表空间文件
  在3307:拷贝ibd和cfg文件到3307
   scp root@192.168.58.51:/root/orders.ibd ./
   scp root@192.168.58.51:/root/orders.cfg ./
  更改用户
   chown mysql:mysql orders.*
  在3307alter table orders import tablespace; 导入表空间的数据

4 迁移总结

MySQL使用表空间文件来存储和管理数据。

在MySQL中,表空间是指用于存储表和索引数据的文件集合。每个MySQL数据库可以包含一个或多个表空间,每个表空间可以包含一个或多个数据文件。

数据文件的类型可以是InnoDB的独立表空间文件(.ibd),

或者MyISAM的表文件(.MYD和.MYI)。

在InnoDB存储引擎中,每个InnoDB表都有一个独立的表空间文件。这种表空间文件包含了表的数据和索引信息

而MyISAM存储引擎将表的数据和索引分别存储在两个不同的文件中,.MYD文件存储数据,.MYI文件存储索引。

需要注意的是,MySQL的表空间文件是底层数据存储的一部分,对于常规操作来说,不需要直接操作表空间文件。大多数情况下,使用SQL语句和MySQL的管理工具来进行数据库和表的操作即可。

转载于DB哥MySQL高级教程-81.表空间文件迁移   本文仅供自己学习参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值