使用场景:
使用pg_dump或者mysqldump 对某个库进行导出,如果需要通过移动硬盘拷贝或者网络方式进行传输,如果导出文件太大,可能会导致传输到一半出现失速或者突然中断的情况,增加了迁移的时间
解决办法:
可以通过把导出文件分割成小文件的方式来解决,以下以PostgreSQL pg_dump迁移为例
1. pg_dump对库进行导出
pg_dump -U postgres -C -F p -b -v -f /mnt/pgbak/testdb.sql testdb
2. 对生产的文件进行分割
split -b 50g testdb.sql split_testdb_
注: 对testdb.sql文件进行分割,以split_testdb_为前缀,生成的文件会在后面加 aa/ab/ac/...
split_testdb_aa
split_testdb_ab
split_testdb_ac
split_testdb_ad
split_testdb_ae
......
-b <size> 制定按多少字节进行拆分,也可以指定K、M、G、T 等单位
-l <line> 指定多少行拆分成一个文件
3. 数据拷贝
4. 文件合并
cat split_testdb_* > testdb.sql
5. 正常执行数据导入即可
nohup psql -U postgres -d testdb -f /data/backup/testdb.sql &
注:该方法同样可以用于mysql的mysqldump迁移