加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 搜索优化 > 正文

MySQL传输表空间总结

发布时间:2022-03-30 11:09:23 所属栏目:搜索优化 来源:互联网
导读:在MySQL中如果要迁移一个表导另外一个服务器/环境中,常规的做法就是使用备份工具备份,比如mysqldump,然后拷贝备份到目标服务器或者环境导入。如果某一个表数据量很大,导出dump文件很大的情况下,使用导出导入工具其实会花费不少的时间. 怎么样提高效率
         在MySQL中如果要迁移一个表导另外一个服务器/环境中,常规的做法就是使用备份工具备份,比如mysqldump,然后拷贝备份到目标服务器或者环境导入。如果某一个表数据量很大,导出dump文件很大的情况下,使用导出导入工具其实会花费不少的时间.
 
         怎么样提高效率呢,可以有一种想法就是直接拷贝数据文件到目标环境,当然在早期版本中这么做是不可取的,因为会有很多关联数据在ibdata中,InnoDB的数据存在对应的数据字典信息,是存放在共享表空间中,无法直接剥离出来,而在5.6/5.7中,就推出了一个很不错的特性,就是迁移表空间,可以把这个配置信息剥离出来,简单来说就是把数据文件直接拷贝到目标环境,在目标端挂载即可。
 
       这样一个操作的一个基本前提是使用了独立表空间,开启innodb_file_per_table.
 
>show variables like '%per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
 
跨版本传输表空间-源端操作
我们做一个有代表意义的测试,比如把某一个表从MySQL 5.6环境迁移到MySQL 5.7环境中。
 
-rw-rw---- 1 mysql mysql      8602 Feb 13 23:10 users.frm
-rw-rw---- 1 mysql mysql  11534336 Mar 12 22:55 users.ibd数据情况:
 
> select count(*) from users;
+----------+
| count(*) |
+----------+
|    20001 |
+----------+
1 row in set (0.01 sec)我们开始迁移数据,首先要生成一个cfg文件,导出配置信息。
 
>flush tables users for export;
Query OK, 0 rows affected (0.00 sec)
  
跨版本传输表空间-目标端操作
目标端的操作非常关键,目标端是MySQL 5.7的环境。
 
首先需要在目标端创建相应的空表。然后使用如下的语句把数据文件截断。
 
> alter table users discard tablespace;
Query OK, 0 rows affected (0.02 sec)手工拷贝数据文件.ibd和配置文件.cfg,拷贝到指定的目录下即可。
cp /tmp/users.cfg /home/mysql/test
cp /tmp/users.ibd /home/mysql/test这个时候尤其需要注意文件的权限,拷贝完成,我们就可以通过import tablespace来进行数据文件挂载。
 
CREATE TABLE `users` (
  `userid` int(11) unsigned NOT NULL,
  `username` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`userid`),
  KEY `username` (`username`),
  KEY `idx_users` (`userid`,`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 row_format=compact;然后继续尝试Import tablespace操作。
 
> alter table users discard tablespace;
Query OK, 0 rows affected (0.00 sec)可见整个过程是非常快的,执行完成之后,我们检查一下表的情况。
MySQL传输表空间总结

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!