InnoDB--------独立表空间平滑迁移
1. 背景
* InnoDB的表空间可以是共享的或独立的。如果是共享表空间,则所有的表空间都放在一个文件里:ibdata1,ibdata2..ibdataN,这种情况下,目前应该还没办法实现表空间的迁移,除非完全迁移。
* 不管是共享还是独立表空间,InnoDB每个数据表的元数据(metadata)总是保存在 ibdata1 这个共享表空间里,因此该文件必不可少,它还可以用来保存各种数据字典等信息。
* 独立表空间中数据文件单独存放在.ibd文件中。
* MySQL 5.6版本开始支持独立表空间导入与导出。
2. 环境 [ 2台DB实例, MySQL 5.6表迁移至MySQL5.7 ]
* 源实例 MySQL
mysql> show variables like 'innodb%version'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | innodb_version | 5.6.36 | +----------------+--------+ 1 row in set (0.01 sec) mysql> show variables like 'datadir'; +---------------+--------------------+ | Variable_name | Value | +---------------+--------------------+ | datadir | /data/mysql_data6/ | +---------------+--------------------+ 1 row in set (0.00 sec)
* 目的实例 MySQL
mysql> show variables like 'innodb%version'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | innodb_version | 5.7.18 | +----------------+--------+ 1 row in set (0.00 sec) mysql> show variables like 'datadir'; +---------------+--------------------+ | Variable_name | Value | +---------------+--------------------+ | datadir | /data/mysql_data7/ | +---------------+--------------------+ 1 row in set (0.01 sec)
* 源实例 MySQL 迁移的数据库与表信息
mysql> select database(); +------------+ | database() | +------------+ | mytest | +------------+ 1 row in set (0.00 sec) mysql> show create table users; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | users | CREATE TABLE `users` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `sex` enum('M','F') NOT NULL DEFAULT 'M', `age` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec) mysql> select * from users; +----+-------+-----+-----+ | id | name | sex | age | +----+-------+-----+-----+ | 1 | tom | M | 25 | | 2 | jak | F | 38 | | 3 | sea | M | 43 | | 4 | lisea | M | 36 | +----+-------+-----+-----+ 4 rows in set (0.00 sec)
3. 平滑迁移实战 [ 迁移mytest数据库下users表 ]
* 目的MySQL实例创建相同的数据库与表 [ MySQL 5.7中创建表需要指定row_format=compact ]
mysql> create database mytest character set utf8mb4; Query OK, 1 row affected (0.03 sec) mysql> use mytest; Database changed mysql> CREATE TABLE `users` ( -> `id` bigint(20) NOT NULL AUTO_INCREMENT, -> `name` varchar(255) NOT NULL, -> `sex` enum('M','F') NOT NULL DEFAULT 'M', -> `age` int(11) NOT NULL DEFAULT '0', -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 row_format=compact; Query OK, 0 rows affected (0.59 sec) mysql> system ls -l /data/mysql_data7/mytest/ total 64 -rw-r----- 1 mysql mysql 67 Jul 18 05:21 db.opt -rw-r----- 1 mysql mysql 8648 Jul 18 05:21 users.frm -rw-r----- 1 mysql mysql 49152 Jul 18 05:21 users.ibd
* 目的MySQL实例丢弃表空间
mysql> alter table users discard tablespace; Query OK, 0 rows affected (0.01 sec) mysql> system ls -l /data/mysql_data7/mytest/ total 16 -rw-r----- 1 mysql mysql 67 Jul 18 05:21 db.opt -rw-r----- 1 mysql mysql 8648 Jul 18 05:21 users.frm
* 源MySQL实例刷新表至磁盘并加lock,并且当前表quiesce状态,只读,且创建.cfg metadata文件
mysql> flush tables users for export; Query OK, 0 rows affected (0.00 sec)
* 从源MySQL实例服务止拷贝表文件users.ibd, users.cfg文件至目的MySQL实例中
[root@MySQL ~]# cp -v /data/mysql_data6/mytest/users.{cfg,ibd} /data/mysql_data7/mytest/ `/data/mysql_data6/mytest/users.cfg' -> `/data/mysql_data7/mytest/users.cfg' `/data/mysql_data6/mytest/users.ibd' -> `/data/mysql_data7/mytest/users.ibd'
* 修改目的MySQL实例数据文件下拷贝文件的所有者与所有组
[root@MySQL ~]# chown -v mysql.mysql /data/mysql_data7/mytest/users.{cfg,ibd} changed ownership of `/data/mysql_data7/mytest/users.cfg' to mysql:mysql changed ownership of `/data/mysql_data7/mytest/users.ibd' to mysql:mysql
* 源MySQL实例释放lock
mysql> unlock tables; Query OK, 0 rows affected (0.00 sec)
* 目的MySQL实例加载表空间
mysql> alter table users import tablespace; Query OK, 0 rows affected (0.04 sec)
* 查看目的MySQL实例表数据 [ MySQL5.6数据成功迁移过来 ]
mysql> select * from users; +----+-------+-----+-----+ | id | name | sex | age | +----+-------+-----+-----+ | 1 | tom | M | 25 | | 2 | jak | F | 38 | | 3 | sea | M | 43 | | 4 | lisea | M | 36 | +----+-------+-----+-----+ 4 rows in set (0.00 sec)
4. 注意问题
* MySQL 5.6数据迁移到MySQL5.7时,如果创建目的表时不指定row_format,import表数据时会报错,原因在于MySQL 5.6中是Antelope,在MySQL 5.7中是Barracuda,主要是在表压缩和行的动态格式上有所改变。
5. 总结
以需求驱动技术,技术本身没有优略之分,只有业务之分。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL数据库“十宗罪”(十大经典错误案例)
各位技术老铁们,福利来了!今天给大家说说《数据库中十大经典错误案例》 老张我在刚开始学习数据库的时候,没少走弯路。经常会遇到各种稀奇古怪的 error 信息,遇到报错会很慌张,急需一个解决问题的办法。跟无头苍蝇一样,会不加思索地把错误粘到百度上,希望赶紧查找一下有没有好的处理问题的方法。我想这个应该是刚从事数据库的小白,都会遇到窘境。 今天就给大家列举 MySQL 数据库中,最经典的十大错误案例,并附有处理问题的解决思路和方法,希望能给刚入行,或数据库爱好者一些帮助,今后再遇到任何报错,我们都可以很淡定地去处理。 学习任何一门技术的同时,其实就是自我修炼的过程。沉下心,尝试去拥抱数据的世界! Top 1: Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原 mysql>showvariableslike'%max_connection%'; |Variable_name|Value| max_connections|151| mysql>setglobalmax_connections=1;QueryOK,0rowsaff...
- 下一篇
清算/报表/日终跑批程序之性能优化案例(一)
前言 不知不觉,技术人生系列·我和数据中心的故事来到了第五期。小y又和大家见面了! 前几期主要发了一些TroubleShooting的案例分享,其实小y最擅长的是性能优化,所以从这期开始,小y会陆续的分享更多的数据库性能优化案例。 进入正题,如果您的日终跑批/清算/报表等程序时快时慢,或者从某一天以后就一直变慢,作为运维DBA或开发的您,会怎么下手?还有,除了解决问题外,你要如何解答领导最关心的一个问题,“为什么现在有问题,但是以前没有问题呢”! 小y今天要和大家分享的就是这样一个性能问题的分析和解决过程。 你们的点赞和转发就是小y继续坚持分享的动力。 另外,前阵子有部分朋友问,小y所在的团队是否可以提供对外的第三方Oracle服务,答案是YES! 有兴趣的朋友可以加一下小y的个人微信,微信号是 shadow-huang-bj,希望可以交到更多的朋友,并帮助到更多有需要的人。 Part 1 问题来了 小y,有空么?一会一起看一个报表的性能问题。 有个SQL语句一周前开始,性能急剧恶化,执行时间从10分钟以内变成了10个小时以上。 刚在客户现场做完Oracle的培训,问题来的正是时候,刚...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 2048小游戏-低调大师作品