Start typing to search across invoices, services, domains, tickets, and more...
データセンターの変更、構成のアップグレード、他社からの乗り換えの際に最も心配なのは、データの消失と長時間のダウンタイムです。このガイドでは、実践で実績のある移行手順を紹介します。rsyncによるファイルの差分同期、mysqldumpによるデータベース移行、そして事前にDNSのTTLを下げておくことでスムーズに切り替える方法です。ほとんどのウェブサイトでは、これによりダウンタイムをわずか数分に抑えられます。
--single-transactionオプションを使うと、テーブルをロックせずに一貫性のあるスナップショットをエクスポートできます。rsyncがインストールされていることrsyncのインストール:
# Debian / Ubuntu
apt install -y rsync
# RHEL / Rocky / AlmaLinux
dnf install -y rsync
| 項目 | 内容 |
|---|---|
| フルバックアップ | 移行前に移行元サーバーのフルバックアップまたはスナップショットを取得する |
| ディスク容量 | df -h と du -sh で移行先ディスクの容量が十分か確認する |
| ソフトウェアのバージョン | PHP、MySQL、Nginxのバージョンを比較し、新しいバージョンとの非互換を避ける |
| 設定ファイル | バーチャルホストの設定、cronジョブ(crontab -l)、SSL証明書の場所を記録する |
| ハードコードされたIP | アプリケーションや設定に旧サーバーのIPが直接書き込まれていないか確認する |
| メールと外部サービス | MXレコード、APIの許可リスト、決済のコールバックURLなどが旧IPに依存していないか確認する |
| DNS TTL | 少なくとも24時間前にTTLを下げておく |
ドメインのDNS管理画面にログインし、サイトのAレコードのTTLをデフォルト値(一般的に3600秒以上)から300秒、場合によっては60秒に変更します。実際の切り替えまでに少なくとも元のTTL 1周期分待ち、各地のリゾルバーのDNSキャッシュが期限切れになるようにします。現在のTTLは次のコマンドで確認できます。
dig example.com A +noall +answer
出力のドメイン名の後ろにある数値が、残りのTTL(秒)です。
移行先サーバーで鍵を生成し、移行元サーバーに登録します(新しいマシン側から作業できるよう「プル」方式を採用します)。
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id -p 22 root@SOURCE_SERVER_IP
コマンド中の
SOURCE_SERVER_IPは、移行元サーバーのIPアドレスに置き換えてください。
移行先サーバーで実行します(ウェブサイトのディレクトリを同期する例)。
rsync -avzP -e "ssh -p 22" root@SOURCE_SERVER_IP:/var/www/ /var/www/
オプションの意味:-a はアーカイブモードで、パーミッション、所有者、タイムスタンプを保持します。-v は詳細表示、-z は転送時の圧縮、-P は進捗表示と中断した転送の再開を可能にします。移行元パスの末尾の / は「ディレクトリの中身を同期する」という意味で、付け忘れるとディレクトリが1階層余分にネストされるので注意してください。
本番実行の前に -n(--dry-run)を付けると、転送されるファイルをプレビューできます。キャッシュやログのディレクトリを除外するには --exclude を使います。
rsync -avzPn --exclude 'cache/' --exclude '*.log' -e "ssh -p 22" root@SOURCE_SERVER_IP:/var/www/ /var/www/
最初のフル同期は、ウェブサイトを稼働させたままでも業務に影響を与えずに実行できます。
移行元サーバーでデータベースをエクスポートします。InnoDBテーブルの場合、--single-transaction を使うとテーブルをロックせずに一貫性のあるスナップショットを取得できます。
mysqldump -u root -p --single-transaction --routines --triggers --events --default-character-set=utf8mb4 dbname | gzip > /root/dbname.sql.gz
移行先サーバーに転送します。
rsync -avP -e "ssh -p 22" root@SOURCE_SERVER_IP:/root/dbname.sql.gz /root/
移行先サーバーでデータベースとユーザーを作成し、インポートします。
mysql -u root -p -e "CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p -e "CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON dbname.* TO 'dbuser'@'localhost'; FLUSH PRIVILEGES;"
gunzip < /root/dbname.sql.gz | mysql -u root -p dbname
STRONG_PASSWORDはご自身で決めた強力なパスワードに置き換えてください。
インポート後、テーブル数が一致しているかを抜き取りで確認します。
mysql -u root -p -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='dbname';"
DNSは変更せず、ローカルPCのhostsファイルで一時的にドメインを新しいIPに向けます(Windowsは C:\Windows\System32\drivers\etc\hosts、macOS/Linuxは /etc/hosts)。
203.0.113.20 example.com www.example.com
トップページ、ログイン、アップロード、決済のコールバックなど、重要な機能を一つずつ確認します。問題がなければ、hostsのエントリを削除します。
--delete を付けます(移行先にある余分なファイルが削除されるため、慎重に使ってください)。必要に応じてロールバックできるよう、移行元サーバーは解約前に少なくとも3〜7日間残しておくことをおすすめします。
同じコマンドをもう一度実行するだけです。rsyncは転送済みのファイルをスキップし、-P オプションにより大きなファイルの転送も途中から再開できます。
--quick を付けてメモリ使用量を減らし、パイプで圧縮しながらエクスポートと転送を同時に行います。数十GB以上のデータベースの場合は、物理バックアップツール(Percona XtraBackupやmariabackupなど)や、プライマリ/レプリカのレプリケーションによる移行を検討してください。
通常は、エクスポート時とインポート時の文字セットの不一致が原因です。エクスポート時に --default-character-set=utf8mb4 を指定し、移行先のデータベースもutf8mb4を使用していることを確認してください。
一部のISPのDNSキャッシュがまだ期限切れになっていないためで、通常は元のTTLの期間内に自然に解消されます。旧サーバーを数日間残しておくべき理由もここにあります。
スムーズな移行のポイントは、「TTLを早めに下げる、フル同期の後に差分同期を行う、テストしてから切り替える」ことです。ウェブサイトやビジネスをIMIDCに移行する予定の方には、無料の移行サポートサービスをご用意しています。香港、日本、シンガポール、米国などでクラウドサーバーまたは専用サーバーを契約した後、移行元の環境と移行の要件を記載したチケットを送信していただければ、技術スタッフが具体的なプランと作業時間帯をご相談します。移行中に疑問点があれば、24時間365日対応のチケットシステムでいつでもサポートを受けられます。