在第二种方法中,一般会用mysqldump来导出,用mysql来导入。这两个工具都是单线程的,所以在迁移表比较多的情况下,会影响速度。你可以使用Maatkit 里面的mk-parallel-dump和mk-parallel-restore来导出导入数据。这两个工具都是多线程,并且更好用。
步骤如下:
- 锁住需要导出数据的数据库:flush tables with read lock;
- 导出数据: ./mk-parallel-dump -udeploy -p123 -h172.28.29.209 --databases cloud --tables t_test --chunk-size 100000 --threads 8 --base-dir /data/dump_data --charset binary --no-gzip 。其中的chunk-size 100000是指每次导出的记录数为10w,那么一个1000w的表,就会执行100次SQL语句,生成100个数据文件; threads 8是指用8个线程来导出数据,优先导出大表;charset binary指定用二进制来导出数据,可以避免乱码的问题。
- 在要导入的数据库上面修改允许接收的最大包大小为100M,防止导入SQL语句被这个限制住而报错:set global max_allowed_packet=104857600;
- 导入数据:./mk-parallel-restore -udeploy -p123 -h172.28.28.90 --databases cloud --fast-index --threads 8 /sandata/cloud 。其中fast-index适用于innodb plugin和XtraDB,可以提高创建索引的速度(先插入数据,再创建索引。如果先创建索引,再插入数据,那么对于几千万表来说,后面的插入速度会很慢)。
- 解锁原有数据库,max_allowed_packet改回正常值。迁移完成。
没有评论:
发表评论