MySQL 5.7.39 で特定のデータベース内に格納されたURLをすべて置き換える
レンタルサーバーにインストールされた WordPress を
ローカル環境にもインストールする場合、
データベース内のドメインをローカル環境用のドメインに書き換える必要があります。
別環境に引っ越しする場合は Search Replace DB などブラウザで動作するプログラムを使用して書き換えますが、
今回はSQL文のみで書き換えを行ってみます。
また、テーブルやカラム単位ではなく、1つのデータベース内のドメインをまるごと書き換えます。
実行前に必ずデータベースのバックアップを取得してから実行してください。
動作環境
以下の環境で動作を確認しました。
- MySQL 5.7.39
操作手順
1. 書き換え用のUPDATE文を一括で出力する
以下のSQL文を実行してください。
SQL文内の「データベース名」「古いURL」「新しいURL」は適時書き換えをお願いいたします。
USE データベース名;
SET @old_url = '古いURL';
SET @new_url = '新しいURL';
SELECT CONCAT('UPDATE `', TABLE_NAME, '` SET `', COLUMN_NAME, '` = REPLACE(`', COLUMN_NAME, '`, \'', @old_url, '\', \'', @new_url, '\');') AS sql_statements
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND DATA_TYPE IN ('CHAR', 'VARCHAR', 'TEXT', 'TINYTEXT', 'MEDIUMTEXT', 'LONGTEXT');
2. UPDATE文を実行する
実行後は以下のような形式のSQL文が大量に出力されますので、それら全てを実行してください。
「カラム名」「古いURL」「新しいURL」はデータベースの内容に応じて自動的に書き換わります。
UPDATE `wp_admin_columns` SET `list_id` = REPLACE(`カラム名`, '古いURL', '新しいURL');
これで作業は終了です。
データベースを開いて書き換わっているか確認してください。
参考にさせていただいたページ
参考サイトなし