表迁移
在做报表的时候,通常需要把额外几张服务器中的表导入到一个数据库中,这时候就需要表迁移!
- 利用mysqldump方式导入表
- 使用INNODB表空间的方式迁移表
- 使用select ...into file的方式迁移表
mysqldump方式导入表
这种方式适合用于表数据不是太大时候,这是一种逻辑导入与导出,导出的文件时sql语句,然后把导出的sql语句在另一台服务器上执行即可!
1:先备份要导出的那个表
#备份出需要迁移的表 mysqldump -utest -p123456 --single-transaction fi_repayplan fi_tdaymoney > ` +%F`.sql [root@test3 ~]# ll -h 2018-12-04.sql #这个文件总共103M -rw-r--r-- 1 root root 103M Dec 4 15:58 2018-12-04.sq
2:把备份文件考到另一台服务器上恢复
[root@test2 ~]# mysql -utest -p123456 mytest < 2018-12-04.sql
如果这里没有报错就可以恢复了,可以进入数据库中,查看一行表的行数,对比确认一下!
使用INNODB表空间的方式迁移表
这种方式的迁移数据,属于物理迁移,适合数据量比较大的表!
第一种:锁表迁移
首先创建一个表,插入一些数据!
() () InnoDB CHARSET insert_data( s UNSIGNED c () REPEAT("a", s tb1 s s ); #表空间大小 [root@test3 mydb]# ll -h tb1.* -rw-rw---- 1 mysql mysql 760 Dec 5 08:00 tb1.frm -rw-rw---- 1 mysql mysql 884M Dec 5 08:01 tb1.ibd [root@test3 mydb]#
我们把test3上的tb1表迁移到test2上面!
首先在test3上做如下操作:
MariaDB flush tb1 rows affected ( sec) #这条语句会强制进行fsync操作,会把当前的表加上一个read lock!这时候表不能写入数据,只能读数据,在对应目录下面生成.cfg文件! #需要注意当前的会话不能关闭,否则.cfg文件会自动消失!.cfg文件存储的是表的一些元信息 [root@test3 mydb]# ll tb1.* -rw-rw---- 1 mysql mysql 417 Dec 5 08:05 tb1.cfg -rw-rw---- 1 mysql mysql 760 Dec 5 08:00 tb1.frm -rw-rw---- 1 mysql mysql 926941184 Dec 5 08:01 tb1.ibd [root@test3 mydb]# strings tb1.cfg #.cfg文件的内容 test3 mydb/tb1 content DB_ROW_ID DB_TRX_ID DB_ROLL_PTR GEN_CLUST_INDEX DB_ROW_ID DB_TRX_ID DB_ROLL_PTR content
在test2上操作:
第一步:把test3上tb1的建表语句在test2上面执行,【建表语句一定不要错,否则会报1808 schema 不匹配错误】 MariaDB [mytest]> CREATE TABLE `tb1` ( `id` int(10) DEFAULT NULL, `content` varchar(100) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.02 sec) 第二步:删除新建表tb1的表空间 MariaDB [mytest]> alter table tb1 discard tablespace; Query OK, 0 rows affected (0.02 sec) 这条语句会删除表的ibd文件,慎重执行 第三:拷贝表数据文件 把test3上的tb1.ibd文化和tb1.cfg文件拷贝到test2的对应表文件目录下面[root@test3 mydb]# scp tb1.cfg tb1.ibd 10.0.102.204:/data/mariadb/mytest tb1.cfg 100% 417 698.3KB/s 00:00 tb1.ibd 100% 884MB 50.6MB/s 00:17 #第四步,修改文件属主和属组[root@test2 mytest]# chown -R mysql:mysql tb1.*#第五步:导入表空间文件 MariaDB [mytest]> alter table tb1 import tablespace; Query OK, 0 rows affected (10.49 sec)
最后解除test3上对表tb1加的读锁!
MariaDB [mydb]> unlock tables; Query OK, 0 rows affected (0.00 sec)
第二种:不锁表迁移
上面的方法我们对tb1加上了读锁,在线上环境中,对一整张表加上读锁的代价是有点大的,因此我们取巧,使用不锁表迁移!
我们知道innobackupex可以在线备份,因此我们可以先把要迁移的表,备份出来,然后再导入表结构文件和元数据文件!
首先备份要迁移的表:
[root@test3 ~]# innobackupex --user=test --password=123456 --include="mydb.tb1" --no-timestamp tb1.sql#执行apply-log 操作[root@test3 ~]# innobackupex --apply-log --export tb1.sql/ 这一步要执行,刷新重做日志[root@test3 ~]# cd tb1.sql/mydb/[root@test3 mydb]# ll #这里的文件多了两个, total 905244-rw-r--r-- 1 root root 428 Dec 5 08:25 tb1.cfg-rw-r----- 1 root root 16384 Dec 5 08:25 tb1.exp-rw-r----- 1 root root 760 Dec 5 08:25 tb1.frm-rw-r----- 1 root root 926941184 Dec 5 08:25 tb1.ibd
在test2上执行tb1的建表语句,然后discard掉表空间文件:过程和上面的是一样的,我们直接执行拷贝文件这一步!
roottb1.sql# scp tb1.cfg tb1.ibd .:datamariadbmytest
tb1 import tablespace; Query OK, 0 rows affected (10.57 sec) #这个时间是10.57秒
这两种方法的本质是一样的,只不过不锁表迁移,只是把要迁移的数据备份了出来,然后对备份的数据进行操作而已!
第三种:使用select ...into file的方式
这种方式属于逻辑迁移的方式,本质和第一种mydump是一样的,只是这样操作会相对于mydump会快点!
把数据导入到文件中:
MariaDB [mydb]> system mkdir /data/tb1; MariaDB [mydb]> system chown -R mysql:mysql /data/tb1; #文件的属主与属组需要改为mysql,否则没有写入权限 MariaDB [mydb]> select * from tb1 into outfile "/data/tb1/tb.txt"; Query OK, 6100000 rows affected (8.83 sec)
导入建表语句:
# mysqldump utest p123456 d mydb tb1 mysql utest p123456 h10.. mytest -d: 只导出表结构不导表数据 #当数据量少的时候,我们可以直接使用这条命令完成表的迁移
然后拷贝上面导出的表文件,并且导入!
[root@test3 mydb]# scp /data/tb1/tb.txt 10.0.102.204:/data tb.txt 100% 573MB 40.8MB/s 00:14 [root@test3 mydb]# #在test2上面导入表数据文件 MariaDB [mytest]> load data infile "/data/tb.txt" into table tb1; Query OK, 6100000 rows affected (1 min 2.29 sec) #这里的时候是62秒,物理迁移导入时10秒钟,时间相差6倍 Records: 6100000 Deleted: 0 Skipped: 0 Warnings: 0MariaDB [mytest]>

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于百度飞桨paddlepaddle的疫情可视化实战 |【大学生博客大赛】
百度paddlepaddle安装及疫情可视化实战 1. paddle安装可以参考官方文档 地址链接: https://www.paddlepaddle.org.cn/install/quick选择合适自己的方式进行安装 2. 疫情数据可视化 思路:通过爬虫得到数据并且通过pyecharts进行可视化 爬取丁香园公开的统计数据 上网的全过程: 普通用户打开浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 渲染到页面上。 爬虫程序模拟浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 提取有用的数据 --> 保存到本地/数据库。 爬虫的过程: 1.发送请求(requests模块) 2.获取响应数据(服务器返回) 3.解析并提取数据(re正则) 4.保存数据 我们用到了:request模块: requests是python实现的简单易用的HTTP库,官网地址:http://cn.python-requests.org/zh_CN/latest/ re模块: re模块是python用于匹配字符串的模块,该模块中提供的很多功...
- 下一篇
鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析HarmonyOS源码 | v50.03
百万汉字注解 >> 精读鸿蒙源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee | github | csdn | coding > 百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中< oschina | 51cto | csdn | harmony > 编译鸿蒙 因sourecinsight多年的使用习惯,不舍得丢弃, 所以选择在windows + docker 编译鸿蒙. 本篇记录编译鸿蒙的过程,以备后续不用再去一大堆无效的误导式软文中搜寻芝麻大点有用的信息,那样真挺费时费心力. 编译环境 先安装 Docker Desktop 下载windows版本一直下一步. 在windows下拉取openharmony-docker官方镜像,Docker方式获取编译环境 强烈推荐这么做. docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.3 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,CentOS7官方镜像安装Oracle11G