比较精简的说一下,先说前提,用的是linux下的redhat, 公司用的是mysqldump然后用zip压缩,mysqldump套了线程池,zip没有,表的大小一般10几个G的数量级,部分表备份(有要备份的表名单)。
改进方案:mydumper + pigz。Mysqldump 没有多线程的参数,只能外面套一层,测试的数据中相同线程数mydumper可以直接提升约35%的性能。公司不用多线程做压缩是巨坑,zip非常慢,压缩的时间占了总备份的2/3,而pigz将压缩时间直接缩短到了原来的1/6。两个工具结合总共将时间减了约一半。
坑点:仅代表个人踩过的坑。linux环境下没有外网,所以mydumper是外网拉进来的,第一遍cmake的时候会报错,这时候根据readme装依赖,然后删除文件夹再解压一次跑cmake(stackoverflow上可搜到)。还有一个是pigz不支持文件夹压缩,但是可以结合tar使用。百度搜索第一来自知乎的答案和GPT给的解决方案是相同的:『tar -cvf dir1 | pigz > output.tar.gz』。其实这个解决方案终端上可用,但在java的processbuilder上将无法进行多线程,正确的写法是『 tar --use-compress-program=pigz -cf fileName folderPath』。(注,gpt给出的是"bash" , "-c" , "tar -cvf dir1 | pigz > output.tar.gz")