MySQL-线上数据迁移实战记录
1. 迁移背景和限制条件
随着功能的迭代或者数据表中数据量的增加,将现有数据进行迁移已是工作中经常遇到的事情。通常我们在平时迁移数据数据的时候,只需要用mysqldump、mysqlimport指令就能完成迁移功能,但在实际工作中,开发者往往没有这么大的权限(例如写权限)来操作线上数据,只能想办法根据已有的权限(通常是从库的读权限)生成插入数据的SQL文件,再将文件交给DBA进行执行,从而完成迁移工作。
2. 数据迁移记录
在只有读权限的情况下,可以通过mysqldump命令导出数据库中的数据:
mysqldump -h127.0.0. -uadmin -proot database table > /home/work/data.sql;
但是mysql下需要lock tables权限才能使用mysqldump,可以使用以下方式解决:
mysqldump -h127.0.0. -uadmin -proot database table --skip-lock-tables > /home/work/data.sql
mysqldump -h127.0.0. -uadmin -proot database table --where="id<100" --skip-lock-tables > /home/work/data.sql
如果要对字段进行筛选,从而达到迁移部分字段的目的,可以用以下方式:
mysql -h127.0.0. -uadmin -proot database -e "SELECT id, name FROM table INTO OUTFILE '/home/work/data.sql'"
but,往往对于线上数据库我们是没有写权限的,所以上面那条语句往往不能执行,我们可以先将数据生成到本地:
mysql -h127.0.0. -uadmin -proot -Ne "USE database; SELECT id, name FROM table;" > /home/work/data.txt
然后在本地创建相同的库和对应字段的表,并将导出的数据文件导入到本地的数据库中:
load data infile '/home/work/data.txt' into table table_name
如果报以下错:ERROR 13 (HY000): Can't get stat of '/home/work/data.txt' (Errcode: 13),则:
load data local infile '/home/work/data.txt' into table table_name
最后,再用mysqldump生成可执行的SQL文件(因为是本地,所以可以用root账户,不需要加 skip-lock-tables 参数):
mysqldump -h127.0.0. -uroot -proot database table > /home/work/data.sql
加上 no-create-info 则不会生成创建表的语句,加上 default-character-set 可以指定字符集:
mysqldump -h127.0.0. -uroot -proot --no-create-info --default-character-set=utf8 database table > /home/work/data.sql
接着我们就可以拿着生成好的SQL文件交给DBA执行迁移工作
Tips:在创建数据库的时候,如果不指定字符集,则默认是latin1,此时用mysqldump进行导出时,需要指定字符集为latin1才不会乱码,可以使用命令:show variables like 'character_set_%'; 来查看数据库的编码方式(关注 character_set_database 的值)
MySQL-线上数据迁移实战记录的更多相关文章
- 一次 MySQL 线上死锁分析实战
关键词:MySQL Index Merge 前言 MySQL 的锁机制相信大家在学习 MySQL 的时候都有简单的了解过,那既然有锁就必定绕不开死锁这个问题.其实 MySQL 在大部分场景下是不会存在 ...
- 数据迁移实战:基于Kettle的Mysql到DB2的数据迁移
From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数 ...
- django 连接MYSQL时,数据迁移时报:django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE9\\x97\\xAE\\xE9\\xA2\\x98' for column 'name' at row 5")
django 连接MYSQL时,数据迁移时报:django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE9\\x ...
- 分布式计算(二)使用Sqoop实现MySQL与HDFS数据迁移
近期接触了一个需求,业务背景是需要将关系型数据库的数据传输至HDFS进行计算,计算完成后再将计算结果传输回关系型数据库.听到这个背景,脑海中就蹦出了Sqoop迁移工具,可以非常完美的支持上述场景. 当 ...
- Mongodb到mysql数据库的数据迁移(Java,Windows)
运行环境为windows 测试过260万的数据表,迁移大概要10分钟左右,当然肯定和网络,字段大小什么的有关系. 遇到的坑和注意点都用紫色标记了(对,就是我大乃团的高冷紫--Nogizaka 46) ...
- mysql搭建及数据迁移教程
1.如果jumbo不存在,先安装jumbo 参考 http://hetu.baidu.com/api/tool/show?toolId=174: bash -c "$( curl htt ...
- Docker + node(koa) + nginx + mysql 线上环境部署
在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置 ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...
- kafka线上滚动升级方案记录
kafka升级方案 为什么进行kafka升级 一.修改unclean.leader.election.enabled默认值Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现u ...
随机推荐
- @Data注解使用后get set报错解决方法
Maven项目中已经导入相关的lombok.jar包但是使用后仍提示无set/get方法 .在idea中安装如下插件,安装后重启idea可用不报错. 转载于:https://www.cnblogs.c ...
- textstudio添加中文支持
修改编译器为XeLaTeX,方法如下: Options -> Configure -> Build -> Default Compiler -> XeLaTeX 并在文本开头处 ...
- [JZOJ6244]【NOI2019模拟2019.7.1】Trominoes 【计数】
Description n,m<=10000 Solution 考虑暴力轮廓线DP,按顺序放骨牌 显然轮廓线长度为N+M 轮廓线也是单调的 1表示向上,0表示向右 N个1,M个0 只能放四种骨牌 ...
- Linux 环境安装运行Sqlmap
1.官网下载 .tar.gz 文件 官网地址:http://sqlmap.org/ 2.登录访问linux环境,将压缩包放入/usr/local 路径. 3.在该路径下通过 tar -xzvf f ...
- 不错的图表库:ChartDirector
官网:http://www.advsofteng.com 1)for c++ 2)for .NET 3)for Java 4)for ASP/COM/VB 5)for PHP 6)for Python ...
- Scrapy学习(一)、Scrapy框架和数据流
Scrapy是用python写的爬虫框架,架构图如下: 它可以分为如下七个部分: 1.Scrapy Engine:引擎,负责控制数据流在系统的所有组件中流动,并在相应动作发生时触发时间. 2.Sche ...
- R_Studio(学生成绩)绘制频率分布直方图、分布饼图、折线比较图
对“Gary.csv”中的成绩数据进行分布分析 (1)按0-59,60-69,70-79,80-89,90-100分组绘制高级语言程序设计成绩的频率分布直方图. (2)按0-59,60-69,70-7 ...
- vue router 报错:NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated"}
https://blog.csdn.net/weixin_43202608/article/details/98884620
- CentOS 6.5上的Tomcat启动报错问题
最近在搭建虚拟机环境,装的是CentOSQL 6.5版本,然后装的OpenJDK1.7,在Apache下载了一个纯净的Tomcat放到虚拟机上启动报错了: 这里有两个错误: 1.第一个错误,APR的问 ...
- laravel中事件的监听和订阅
一.前言 更新员工部门主管的时候,需要重新更新一下缓存,这个会比较耗时.所以计划放到队列中来执行.后来想了想,其实用一下事件监听也能实现.人家都说好,然是我也没感觉到有什么好的. 二.正文 1. 在p ...