QA@IT

mysqlに登録してある情報を変更したいが、どこのテーブルに格納されているかわからない

2713 PV

現在私は海外から購入したサイトを日本語化しています。
データベースに格納されている定型文を日本語化したいのですが、その定型文がどこのテーブル、カラムに格納されているのかがわからず、直すことができません。
例えばログアウトが完了したときにポップアップで表示されるyou are now logged out of the site. などです。
検索方法を調べても、どのテーブルに格納されているかがわからないと検索できないselectなどしか見つかりませんでした。(そのテーブルに格納されている情報一覧表示方法しか見つけられなかった)
格納されている情報がどのテーブルに格納されているのか調べる方法をご存知の方、ご教授下さいませ。
どうぞ宜しくお願いいたします。

回答

下記マニュアルを見て思ったのですが、mysqldump(--tabオプション付き)でテキストダンプデータを吐き出してから、その出力ディレトリ内で「grep メッセージ *.txt」するという方法はどうでしょうか。

これで格納されている情報(メッセージ)からテーブル名がわかるので、次に「テーブル名.sql」ファイルを見ればカラム名もわかるように思います。

マニュアル
7.4.3 mysqldump による区切りテキストフォーマットでのデータのダンプ
https://dev.mysql.com/doc/refman/5.6/ja/mysqldump-delimited-text.html

追記 (2015/12/31)

実際はどんな感じになるのか、こちらでSakilaを使って試してみました。

Sakila Sample Database
https://dev.mysql.com/doc/sakila/en/

mysqldump実行

$ mysqldump -u ユーザ名 -p --tab=/var/tmp/dump sakila

出力ディレクトリの内容

$ ls /var/tmp/dump
actor.sql       customer_list.sql  language.txt
actor.txt       film.sql           nicer_but_slower_film_list.sql
actor_info.sql  film.txt           payment.sql
address.sql     film_actor.sql     payment.txt
address.txt     film_actor.txt     rental.sql
category.sql    film_category.sql  rental.txt
category.txt    film_category.txt  sales_by_film_category.sql
city.sql        film_list.sql      sales_by_store.sql
city.txt        film_text.sql      staff.sql
country.sql     film_text.txt      staff.txt
country.txt     inventory.sql      staff_list.sql
customer.sql    inventory.txt      store.sql
customer.txt    language.sql       store.txt

拡張子.sql.txtが対になっていて、例えばactor.sqlがテーブルactorのスキーマで、actor.txtが同テーブルのデータです。このディレクトリで*.txtに対してgrepすれば、メッセージが入っているテーブル名がわかるはずです。次にその.txtファイルを見ればよいですが、中身はこんな感じになっています。

.txtファイルの内容

$ head -3 actor.txt
1       PENELOPE        GUINESS 2006-02-14 19:34:33
2       NICK    WAHLBERG        2006-02-14 19:34:33
3       ED      CHASE   2006-02-14 19:34:33

これでメッセージが入っているのが何番目のフィールドかわかるはずなので、次に.sqlファイルを見てスキーマと照らし合わせればテーブルのカラム名もわかると思います。

編集 履歴 (2)
  • サンプルを使って実際に試してみた結果を追記しておきました。 -
  • どうもありがとうございました。
    無事検索でテーブルを見つけられました。
    しかしテーブルの中身、long_textの部分をそれぞれどう指定すれば変更できるのかがわかりせん。
    今回の質問とは違う質問ですので、スレを立て直します。
    もしご存知でしたら、ご教授してくだされば幸いです。
    どうぞ宜しくお願いいたします。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。