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 的值)

最新文章

  1. 0x7c95caa2指令引用的0x00000000内存 该内存不能read
  2. STL之set
  3. python入门练习题1
  4. BZOJ2212: [Poi2011]Tree Rotations
  5. 45个非常有用的 Oracle 查询语句小结
  6. vmware虚拟机迁移系统到其它磁盘(xjl456852原创)
  7. IClone地形编辑器结合T4M插件在Unity3D使用
  8. Android模拟器调试html5 app
  9. Linux下解压后缀名为".tar.xz"的文件
  10. C++示例
  11. leetcode — distinct-subsequences
  12. python list的使用
  13. kubenetes master重启以后,服务异常排查
  14. hdu 2844 coins(多重背包 二进制拆分法)
  15. 使用htpasswd实现Nginx验证访问
  16. MD5与SHA散列单项加密
  17. SVN 多分支管理
  18. postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑
  19. Unity3D Shader基础教程
  20. HTTPS网站的内幕

热门文章

  1. Mybatis-Plus的BaseMapper的用法
  2. 创建本地repo源
  3. html5 和h5的区别
  4. Thread的setDaemon(true)方法的作用
  5. CentOS6.5卸载自带的Mysql软件
  6. summernote(富文本编辑器)将附件与图片上传到自己的服务器(vue项目)
  7. C++入门经典-例4.11-名称空间的定义和使用
  8. EBS 页面影藏“关于此页”
  9. OpenCV学习笔记(11)——Canny边缘检测
  10. vue路由在keep-alive下的刷新问题