最近幾臺微信買家相關數據庫數據量增長迅猛,空間緊張,因而考慮遷移到壓縮率超高的TokuDB,一個比較流行的遷移方法是用mysqldump導出同時修改InnoDB字符串到TokuDB:
mysqldump ...... | sed -e 's/^) ENGINE=MyISAM/) ENGINE=InnoDB/' > dump.sql
但這樣導出的單一文件恢復時太慢,雖然有各種第三方方法能使mysqldump導出多個文件,但復雜了些;而mydumper因為并行特性是一個更理想的遷移工具,但0.6之前因為鎖時間太長導致實際不可用,而0.6后大大降低了鎖時間,因而這次我嘗試使用MyDumper來遷移InnoDB到TokuDB,我的思路是:
因為MyDumper導出的文件是schema和data分開的,因而可以先導入schema,修改成TokuDB引擎后再將數據導入
以下是步驟:
1.導出文件
mydumper ...... -o /data/dump
2.將schema和data文件分離
mkdir /data/dump_schema
mv /data/dump/*schema* /data/dump_schema
mv /data/dump /data/dump_data
cp /data/dump/metadata /data/dump_schema
3.導入schema
myloader ...... -d /data/dump_schema
4.轉換InnoDB到TokuDB
pt-find ...... --engine InnoDB --exec "ALTER TABLE %D.%N ENGINE=TokuDB"
5.導入data
myloader ...... -d /data/dump_data