PHP4 + MySQL4でWebサイトを構築していて、現在、本番環境で運用しているサイトがあります。


運用していると、よくDBの構造を変えたくなる(こんな機能を取り入れたいと思い、フィールドを追加したくなる)のですが、うまく本番環境にDB構造の変化を効率良く適用する方法を教えて下さい。

あと、運用中のDBにいきなりphpMyAdmin等でフィールドを追加するのには、どんな問題がありますでしょうか?

現状以下のようなことをしていて、非常に面倒かつ、サーバを停止しなくてはいけません。良い方法があれば教えて下さい。

開発環境
- 開発環境で、DBのフィールドを追加
- PHPで機能を追加

本番環境
- 一旦、本番Webサーバを停止
- 本番DBをバックアップ
- 新しいDBスキームを追加
- DBのリストア
- 新しいPHPコードに更新
- 問題ないか確認
- Webサーバを起動

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2007/05/09 13:50:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答0件)

回答はまだありません

  • id:kurukuru-neko
    >どんな問題

    新しいカラムの値が存在しない
    状態になる。

    カラムの順序を入れ替えないので
    あれば通常大きな問題は発生しない。

    1. 開発環境で、DBのフィールドを追加
    alter で追加
    (PHPは修正しない)

    2. 追加した状況で機能テスト

    3. 問題がなければ、PHPの該当テーブルを
      へinsert処理する機能部分を修正
      既存のテーブルへ初期値を設定する。

    4. 追加した状況で機能テスト

    5. PHPの本格修正

    6. 追加した状況で機能テスト

    -------------------------------------
    本番
    0. 必要ならメンテー画面に遷移させる
    ようにWEBサーバ設定変更WEBサーバ再起動
    1. データベースバックアップ
    2. 修正対象テーブルを全てlockする。
    3. alterでカラム追加
    4. テーブルの追加カラムの初期値を設定
    5. PHPを入れ替え
    6. ロックを解除
    7. 必要ならWEBサーバー再起動して通常運用

    スクリプト等を事前に用意していれば
    0.~7.の作業は非常に短時間で行える。

    ※:必要なら索引の再作成なども必要

  • id:b-wind
    フィールドを追加するだけならいきなりやっても問題は無いかな。
    ただし、レコード数が多い時はそれなりに負荷の高い処理である事は覚悟する事。
  • id:kurukuru-neko

    データ量や大規模に修正をするなら
    別テーブルやDBに現在のデータを以降
    する方法の方がよいかもしれません。

    煩雑に修正があるようであれば
    select *等は、事故の元なので
    使わない。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません