mysql

  • ローカルのDBへ接続
mysql -uUSER -pPASS MYDB
  • 任意のホストのDBへ接続
mysql -uUSER -pPASS -hHOST MYDB
  • ログファイルに書き出す
mysql -uUSER -pPASS --tee=update.log
  • SQLを実行
mysql -uUSER -pPASS MYDB -e'select * from mytable'
  • SSLで接続
mysql -uUSER -pPASS --ssl-ca=/etc/crt/mysql-ca.crt

プロンプト内での操作

  • DBの切替
use MYDB
  • インスタンス変数の確認
show global variables like '%timeout';
select @@global.max_allowed_packet;
  • インスタンス変数の変更
set global wait_timeout=100;
  • セッションの確認
show processlist;
  • 実行処理全てを含むセッションの確認
show full processlist;
  • マスターにてスレーブサーバの確認
show slave hosts;
  • マスターにてポジションの確認
show master status;
  • スレーブにてレプリケーション状態の確認
show slave status \G
  • create table文の確認
show create table mytable;
  • エンジンの一覧
show plugins;

DDL

  • パスワードの変更
set password for root@localhost=PASSWORD('PASSWORD');
  • 権限の付与
grant all on testdb.* to writer@localhost identified by 'XXXXXXXX';
grant all on testdb.* to writer@'192.168.0.%' identified by 'XXXXXXXX';
grant select on testdb.* to reader@localhost identified by 'YYYYYYYY';
grant select on testdb.* to reader@'192.168.0.%' identified by 'YYYYYYYY';
  • SELECT INTO … OUTFILEやLOAD DATA INFILEの権限付与
    ※GLOBAL PRIVILEGESなのでDB単位での権限付与は不可。
grant file on *.* to writer;
  • binlogの削除
purge binary logs to 'mysql-bin.000006';
  • レプリを1つ進める
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
  • 複数の索引を削除
ALTER TABLE test_data DROP INDEX ind1, DROP INDEX ind2, DROP INDEX ind3;

DML

*日付加算

SELECT ADDDATE(NOW(),-30);
  • 時間の差分を取得
SELECT TIMEDIFF(end_date,start_date) FROM test_data WHERE TIMEDIFF(end_date,start_date)>'00:05:00';
  • UNIXTIMEへの変換
SELECT UNIX_TIMESTAMP('2010-07-07 16:00:00');
  • UNIXTIMEからの変換
SELECT FROM_UNIXTIME(start) FROM test_data;
  • 日付フォーマット
SELECT DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s');
  • データディクショナリの確認
use information_schema;
SELECT * FROM mytable WHERE table_schema='MYDB';
  • 変数の使用
set @target_id=10000;
SELECT * FROM test WHERE id=@target_id;
  • 行番号の付与
set @i=0;
SELECT @i:=@i+1 row,id FROM test_data limit 100;
  • idを1から振り直す
set @i=0;
UPDATE test_data SET id=@i:=@i+1;
  • ファイルへtsv出力
SELECT * FROM test_data INTO OUTFILE '/tmp/test.tsv';
  • tsvファイルからデータロード
LOAD DATA INFILE '/tmp/test.tsv' INTO TABLE test_data;