mysqldump の結果をそのまま圧縮したり転送したりするコマンド例
ちょっと遅めの夏休みをもらって八丈島に行ってきました nakamura です!いい所すぎて危うくそのまま移住するところでした。
データベースの移行をする際みなさんどんな流れで作業しているでしょうか。コマンドラインでダンプを取って、サイズが大きかったら gzip で圧縮して、WinSCP でそれをローカルに落としてきて、それをまた別のサーバにアップロードして・・・・なんて事してたりしませんか?
シェルのパイプやリダイレクトをうまく使ってあげれば、この辺りはコマンド一発でいけちゃったりするのです。今日はそんなコマンド例のご紹介です。
コマンド例
実際によく使うコマンドの例を箇条書きで。
とりあえずダンプの結果をそのまま圧縮する。
mysqldump -udb_user db_name -pdb_pass | gzip > db_name.dump.sql.gz
特定の文字列を置換した上で圧縮する。
MT のデータを移行する際、ホスト名を書き換えるのによく使います。
mysqldump -udb_user db_name -pdb_pass | sed 's/example.com/example2.com/g' | gzip > db_name.dump.sql.gz
圧縮しつつ、そのまま別のサーバに転送する。
特に容量が大きい時は、これがないとムリ。
mysqldump -udb_user db_name -pdb_pass | gzip | ssh example.com 'cat > ~/db_name.dump.sql.gz'
圧縮しつつ、そのまま別のサーバに転送して、さらにそのままリストアする。
結構荒業というか、移行先の DB にデータが存在する場合、消えてはいけないものが消えてしまう可能性もあるので、使う時は慎重に!
mysqldump -udb_user db_name -pdb_pass | gzip | ssh example.com 'zcat | mysql -udb_user db_name -pdb_pass'
終わりに
結局のところパイプやリダイレクトでつないでいるだけなので、組み合わせ次第でまだまだ色んな事ができるはずです。データ量が多すぎて DB の移行に時間が掛かってしょうがない!というストレスが多少は軽くなるので、ぜひ一度試してみてください。