質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

468閲覧

データベースの書き換え

tr_09

総合スコア44

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/09/15 15:46

現在稼働しているシステムのDBを、運用に支障なくDBを書き換えることは可能なのでしょうか?

知識がなく、最初は一旦データ全部消してインポートしなおしちゃえば良いって思ってたのですが、ハイリスクであることに気づき、他の方法を探しているのですが分かりません…

SQL dumpをうまく使うのでしょうか…?

知識が無く申し訳ないのですが、何か方法はありますでしょうか?
力をお貸しいただけますでしょうか

LaravelとMySQLを使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2020/09/15 17:53

書き換えの詳細は?特定のデータを変更する、全て消して作り直しなど、そして書き換え対象のデータの種別は?データ系のテーブルが、マスター系のテーブルか
tr_09

2020/09/15 23:12

特定のテーブルの変更になります。 テーブルの中身を総入れ替えといった感じです。 データ系のテーブルになります。 検索機能があって、駅データを総入れ替えするイメージです。 コメントありがとうございます。
tr_09

2020/09/16 01:26

すみません。総入れ替えにしようと考えていたのですが、特定のデータのみ書き換えることにしました。 その際updateをすれば良いのかと思ったのですが、膨大な量のため、どこにどう記述したら良いのか検討もつかない状態です。 何か方法はありませんでしょうか。
guest

回答2

0

特定のデータのみ書き換えることにしました。

その際updateをすれば良いのかと思ったのですが、膨大な量のため、どこにどう記述したら良いのか検討もつかない状態です。

その特定のデータがデータ系であり、ユーザーの操作(WEBアクセス)によってupdate処理がかかるもの(wikiの記事・teratailの質問やコメント欄etc)の場合ならそのままトランザクション貼ってupdate、管理者(サイト作成者)によって更新されるだけのものならそのままUpdateで構いません。
とはいえシステムの詳細は知らないので、トランザクションの必要性についてはシステムと相談してください。トランザクションが何か分からなかったら調べてください。

そのデータがマスター系(teratailで言うタグ一覧etc)だったり、同時に書き換えないと不整合の起こるデータ(teratailのQテーブル&コメントテーブルみたいな)の場合、つまり必須データの不足やupdateのミスや不整合など、様々な理由でシステムエラーが発生すると考えられる場合、ユーザーからはシステムにアクセス出来ないように切り替えた上でupdateしましょう。
システムにアクセスさせない方法として、laravelの機能を使うよりもwebサーバーの機能(apacheならIP制御でのrewrite)を使う事を勧めます。

膨大な量のため、

量は関係ありません。

投稿2020/09/16 03:37

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tr_09

2020/09/16 03:40

丁寧なご回答ありがとうございます。 システムエラーが発生しそうなリスクもあるため、切り替えを行ってからのupdateがローリスクかなと思いました。
hentaiman

2020/09/16 04:00

> システムエラーが発生しそうな そこまで気にしているんなら趣味のシステムではないんですよね?そんな曖昧でやっちゃダメだと思いますよ。 「しそう」ではなく「するかしないか」を明確にしてからやりましょう。分からなければ分かるまで調査してからやりましょう。
tr_09

2020/09/16 04:02

ご指摘ありがとうございます。 もっと念入りに調査してから取り組みたいと思います。
guest

0

ベストアンサー

現在稼働しているシステムのDBを、運用に支障なくDBを書き換えることは可能なのでしょうか?

よっぽどの事がない限りオススメできません。
理由としては、データの入れ替え作業の最中にシステムが動いてしまうと値が変わってしますからです。
データを入れ替える場合「メンテナンス中」としてシステムを必ず停止してから行ってください。

最初は一旦データ全部消してインポートしなおしちゃえば良いって

一部書き換えではなく総入れ替えですか?

  1. システムを「メンテナンス中」にし停止します。
  2. 入れ替えデータのCSVを用意します。
  3. 下記URLの手順で現在のデータのCSVを作成します。(エクスポート)

MySQLのSELECT文でcsvを出力する
これがデータのバックアップとなります。
4. テーブル上のデータを全削除します。
データ量が多い場合などの場合時間がかかる事もあります
5. 入れ替えデータのCSVでインポートを行う。
【MySQL】CSVファイルをデータベースにインポートする
6. システムの「メンテナンス中」を解除します。

基本はこんな感じです。

時間をかけたくない場合は、仮のテーブル名で作成し
元のテーブル自体を削除後、テーブル名を変更する方法などもあります。
13.1.32 RENAME TABLE 構文

投稿2020/09/15 16:46

編集2020/09/15 16:49
kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tr_09

2020/09/15 16:52

やはり1〜6の手順で、一度メンテ中にして止めるしかないですよね…リスキーなことはしないにつきますね。丁寧なご回答ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問