忘れがちな自分用に、よく使う MySQL の Tips をまとめてみました。
データベース接続情報は以下とします。
データベース名 : wp_test ユーザ名 : wp_user パスワード : pass
基本系
MySQLの対話モードでなくて、コマンドからSQLを実行する
mysql -u wp_user -ppass -t -e "select * from wp_test.wp_postmeta;" -e, --execute: ステートメントを実行 -t, --table: テーブルフォーマットで出力
デバッグのときなど、たまにテーブルの更新状況をwatchする場合に
watch -n 1 -d "mysql -u wp_user -ppass -t -e \"select * from wp_test.wp_postmeta;\"" -n, --interval: 指定秒間隔でwatch -d, --differences: 更新部分をハイライト表示
ダンプ・リストア系
データベースのダンプ
# 全部 (-xオプションで全テーブルがロックされるので注意!) mysqldump -u wp_test -ppass -x --all-databases > all.dump # 任意のデータベースのみ mysqldump -u wp_user -ppass wp_test > wp_test.dump # 任意のテーブルのみ mysqldump -u wp_user -ppass wp_test wp_postmeta > wp_test_wp_postmeta.dump
リストア
# 全部 mysql -u wp_user -ppass < all.dump # 任意のデータベースのみ mysql -u wp_user -ppass wp_test < all.dump
エビデンス取得シェルとかも必要になったりしますよね。
get_evidence.sh
#!/bin/bash TOP_DIR=`dirname $0` EVI_DIR=$TOP_DIR/evidence/`date "+%Y%m%d%H%M%S"` DB_USER=wp_user DB_PASS=pass mkdir -p $EVI_DIR 2> /dev/null #rm $EVI_DIR/* 2> /dev/null mysql -u $DB_USER -p$DB_PASS -t -e "select * from wp_test.wp_postmeta order by meta_id;" 2>&1 | tee $EVI_DIR/db_wp_test_wp_postmeta.dump echo "=== complete ! ==="
ダンプ・リストアでいつも参考にしているサイトはこちら。
たまにしか使わないSQL文たち
次に、便利だけどたまにしか使わないSQL文たち。
データベース一覧を表示
mysql> show databases;
データベースに接続 (さすがにこれはよく使うか。。)
mysql> connect wp_test;
テーブル一覧を表示
mysql> show tables; # データベースに接続していなければ mysql> show tables from wp_test;
テーブルのカラム情報を表示
mysql> show columns from wp_postmeta; # show columns from と同じ(ショートカット) mysql> desc wp_postmeta; # create文を表示させるには mysql> show create table wp_postmeta;
異常系テストとかでたまに使う alter table文。
# テーブル名を変更 mysql> alter table wp_postmeta rename to wp_postmeta_orig; # カラムを追加 mysql> alter table wp_postmeta add column test_column varchar(256) not null after meta_key;
「if exists」の位置をよく忘れる。もう歳なのかな??
mysql> drop table if exists wp_postmeta;