akiyoko blog

akiyoko の IT技術系ブログです

よく使う MySQL の Tips

忘れがちな自分用に、よく使う 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;

おまけ

WordPressのインストール時に必要になる、データベース準備用SQLです。

mysql -u wp_user -ppass
mysql> create database wp_test character set utf8 default collate utf8_general_ci;
mysql> grant all privileges on wp_test.* to wp_user@localhost identified by 'pass';
mysql> flush privileges;



おしまい。
何か思い出したら適宜追加します。