時々発生する「インストールしたてのMySQLに開発環境を構築する」という作業のために手順メモ。レベルの低い記事で恐縮だが、自分用メモということでご容赦願いたい。

前提条件

  • 開発用サーバ(CentOS5 on XEN)
  • MySQL 5.0
  • localhostからの接続しか受け付けない
  • 他のMySQLにスキーマは登録済み

作業

rootパスワードの設定

今回はlocalhostからの接続しか受け付けないので省略。一応コマンドだけメモ。mysqlコンソールは…

$ mysql -u root [-p [{PASSWORD}]]
シェルから
$ mysqladmin -u root password {PASSWORD}
mysqlコンソールから
mysql> SET PASSWORD FOR root@localhost = PASSWORD('{PASSWORD}') ;
データベースの作成
mysql> CREATE DATABASE {database}
ユーザの作成
mysql> GRANT ALL ON {database}.* TO {user_name} IDENTIFIED BY '{PASSWORD}' ;
mysql> GRANT CREATE,SELECT,INSERT,UPDATE,DELETE ON {database}.* TO {user_name} IDENTIFIED BY '{PASSWORD}' ;

GRANTは権限の付与。内容はこの辺に。ON以降は権限を与える範囲。この場合は「{database}のすべてのテーブル」という意味。*.*とかも可。

2010-02-06 追記:

「GRANT ALL」はいろいろと面倒を巻き起こすっぽいので、必要ない限りは「CREATE,SELECT,INSERT,UPDATE,DELETE」とデータ系の権限を指定しよう。失敗体験より追記。

テーブルスキーマの取得

ここではよそのmysql(開発用)からスキーマをもろっといただいてくる。

$ mysqldump -u {USERNAME} -p {PASSWORD} -h {HOST} -d {DATABASE} > dump.sql

-h => –host_name, -d => –no-data の省略形。-u, -pはmysqlのオプションと同じ。その他詳細はmysqldumpのドキュメントにて。

–add-drop-table オプションは 「DROP TABLE IF EXISTS …」をつけてくれる…らしいが、試した環境では指定しなくてもついていた。

テーブルスキーマの投入

さっきdumpしたのは普通のSQLなので、そのままmysqlに渡してやればいいい。

$ mysql -u {USERNAME} -p {PASSWORD} {DATABASE} < dump.sql

まとめ

この程度の内容もすでに暗記してられないという大変残念な記憶力なので、自分用メモ。たった今行った作業なので問題ないと思うが、間違いなどあったらご指摘いただけると幸いである。

追加メモ

shellと組み合わせると便利っぽいものを見つけたのでいくつか。

2010-02-05 追記
テーブル名だけを抽出する
$ mysql -s -u {USERNAME} -p {PASSWORD} {DATABASE} -e 'SHOW TABLES;'
  • -e : コマンドラインから直接SQLを実行する。
  • -s : サイレントモード。ヘッダ行の出力を抑制する。
2010-02-08 追記
ダンプしたDDLからAUTO_INCREMENT値の指定を取り除く
$ mysqldump -u {USERNAME} -p {PASSWORD} -h {HOST} -d {DATABASE}  | sed -e 's/AUTO_INCREMENT=[0-9]\+//' > dump.sql

すでにデータが入っているテーブルをmysqldumpすると、現在のauto_increment値を復元しようとしてしまう。mysqldumpのオプションでは抑止できないっぽいので、ちょっと力業だが指定している部分をsedで取り除いてからファイル出力している。