thumbnail 一問一答の一歩

DB中のURLをMySQL文で一括変換する方法

このサイトのローカル環境から本番環境にアップロードする際にデータベース内のURLに変える必要が出てきたのでSQL文の勉強も兼ねてSQL文から更新を行ったので実行してみる。なお、以下の環境を前提とする

  • ・wordpressを使用したwebサイト
  • ・ローカルのデータベースはXAMPPに付随するPHPMyAdminを使用
  • ・本番環境のサーバーはXServerを使用

SQL文の勉強の方に見ている方も、実際使うとなるとこんな風に使うんだなと思って続きを見ていただけると幸いです。

ローカル環境のデータをエクスポートする

XAMPPのコントロールパネルを開いた後にMySQLと書いている脇のAdminのボタンを押す。
MySQLの行の左から2番目のボタンにAdminと書いてある
PHPMyAdminが画面が出てくるのでログインした後に出てくるタスクバーのエクスポートを押す。エクスポートを押したらテンプレート名をテーブル名と同じにして入力し、右下の実行ボタンを押す。
エクスポート画面
エクスポート画面

なお、mySQLではなくObjectBrowserを使用した場合でも、エクスポートをすればよいのだが、画面やファイル形式が異なっているので、補足としてリンクを貼り付けておく。

公開用サーバーにデータをインポートする

Xserver側のPHPMyAdminを開き、タスクバーのエクスポートの脇にあるインポートを押す先ほどエクスポートしたファイルをインポートファイルに設定し、左下にある「インポート」のボタンをおしてえ取り込む。
インポート入力画面

ローカル環境のURLが入っているデータをどこであるかを確認する

列の値を検索する関数の基本形は以下の通りである


SELECT (表示したい列) FROM '表の名前' WHERE 検索条件。

また、ここでは前方一致検索であるので、検索条件は以下のようになる。


(検索する文字列) LIKE  '(URL)%'

次に、SQL文の入力欄についての説明に移る、PHPMyAdminのメニューバーにある「SQL」のボタンをクリックする。
クリックすると、テキストを入力できる部分が出てくるはずなので、そこにSQL文を記載すればよい。

なお、調べてみた結果、以下の表名、列名にURLが含まれているデータが検索された。なお、データベース名のwp_の部分はサイト作成者が設定したデータベース名となる(例wp2_と設定したらwp_optionではなくwp2_optionになる等)

表名がwp_option、列名がoption_value
SELECT * FROM `wp_option` WHERE `option_value`LIKE 'http://workbooks%'
表名がwp_posts、列名をpost_contents
SELECT * FROM `wp_posts` WHERE `post_content`LIKE 'http://workbooks%'
表名がwp_post、列名をguid
SELECT * FROM `wp_posts` WHERE `guid`LIKE 'http://workbooks%'

該当箇所にSQL文を記載を終えたら、右下の方にある「実行」のボタンを押す。

なお、実行が成功して、データが存在していると、以下のようになる。

検索条件に沿ったデータが表示される

ローカル環境のURLを本番用のURLに置換する

テーブルのデータの更新の基本形は以下の通りである。


UPDATE [テーブル名] SET [列名]=値 WHERE 対象行の条件

そのためこれを指定の場所に入力すればよい。入力する場所はSELECT文の場合と同じであり、PHPMyAdminの上のメニューバーから「SQL」のボタンをおすことテキストエディタが出てくるはずである。
UPDATE入力画面
テキストエディタに以下のSQL文を入力する。


UPDATE テーブル名 SET  列名=REPLACE(列名, 'ローカルURL', '更新後URL');

入力を終えたら、右下の「実行」のボタンを押す。

成功すると、ローカル環境のURLのデータがサーバーのURLに変更されているはずである。

問題ページに戻る