mysqldump切割导出及导入

近期有些20G的静态表需要迁移数据库

为了保障性能,没有使用MyISAM , 考虑到单个库有20G,直接使用mysqldump 代价会比较大,后来改良dump的过程【分块导出,减少数据库压力】实现数据迁移。 后记:mydumper 也能并发处理类似场景,甚至支持 binlog 的同步,保持数据一致

注意:1、数据表必须有主键

     2、需要自行判断执行结果

     3、需要自行将dump文件传输至目标服务器

 

简单代码如下:

导出-此方式是通过ID将数据分步生成多个SQL文件

 for tablename in tableName   ; 
    do for i in {0..100} ; do echo $i  ; #切割份数
        n=61310   ; # 每份行数
        let a=$n*$i ; let b=$n*$i+$n ; echo $a $b  ;
       mysqldump   --no-set-names --skip-disable-keys --skip-add-locks  --skip-create-options  --skip-add-drop-table --where=" id >=$a and id <$b  "  sourceSchema  ${tablename}  | gzip >   /tmp/${tablename}_20180308_$i.sql.gz;  
    done; 
done

 

导入-可以根据数据库情况,并发导入, -f 可以避免表存在的错误

 for tablename in `find  /tmp -type f -name "tableName*0308*.sql.gz" ` ; do echo ${tablename};  gunzip < ${tablename} | mysql  -f  test  ;  done 

 

posted @ 2018-03-08 18:25  伟成  阅读(955)  评论(0编辑  收藏  举报