cloud9_note

cloud9に限らないメモ

View on GitHub

MySQL

起動/終了/生存確認

起動

  1. mysqld –user=mysql &
  2. mysqld_safe
  3. mysql.server

終了

mysqladmin -u root -p shutdown &

生存確認

mysqladmin -u root ping

参考

ログイン

  1. mysql -u ${ユーザ名}
  2. mysql -u ${ユーザ名} -p
    • ログイン時にパスワードを聞かれる
  3. mysql -u ${ユーザ名} -p${パスワード}
    • pオプションの後ろにスペースを入れてはいけない
  4. mysql -h ${接続先ホスト} -u ${ユーザ名}

ページャーの設定

実行結果をlessに渡したい時などに使う。
オプションは任意。

${ログインコマンド} --pager="less -S -n -i -F -X"

参考

.mylogin.cnfを使用する

ファイル作成

  1. 下記実行。
     mysql_config_editor set --host=${ホスト名} --login-path=${グループ名} --user=${MySQLユーザ} --password
    
  2. パスワードを聞かれるので、パスワード入力
  3. ~/.mylogin.cnfファイルが作成される。

ログイン

mysql --login-path=${グループ名}

ファイル参照

mysql_config_editor print --all

参考

ファイルから実行する

下記のいずれか

  1. shell> mysql ${DB名} < ${ファイル名}
    • -Nオプションでカラム名非表示にできる。
    • tsvフォーマットで出力される。
    • コンソールで出力したときと同じ見た目のファイルが欲しい(テキストとして貼り付ける等)時は、-tオプションを追加する。
  2. mysql> source [ファイル名]
  3. mysql> ./[ファイル名]

データベース作成

CREATE DATABASE <DB>

ユーザ一覧表示

mysqlユーザでuserテーブルを参照する。

use mysql
select user, host from user;

ユーザ作成

CREATE USER 'comment_user'@'localhost' IDENTIFIED BY 'userpassword';

参考

MySQLユーザ作成について:Qiita

権限の付与

GRANT ${付与する権限} ON ${対象のDB}.${対象のテーブル} TO ${対象ユーザ}@${クライアントホスト};

comment_user@localhostに、comment_managerデータベースの全テーブルに対する権限として、SELECT, INSERT, UPDATE, DELETEを付与する。

GRANT SELECT, INSERT, UPDATE, DELETE ON comment_manager.* TO comment_user@localhost;

参考

[MySQL]権限の確認と付与:Qiita

付与されている権限の確認

show grants for '${ユーザ名}'@'${ホスト名}'

権限のはく奪

REVOKE 権限
    ON データベース名.テーブル名
  FROM 'ユーザ'@'ホスト'

CSVインポート

設定修正

MySQLにrootユーザでログイン。

set persist local_infile=1;

CSV作成

1,"hoge"

登録用SQL

load data local
  infile "${csvファイルのパス}"
into table
  ${DB}.${登録対象テーブル名}
fields
  terminated by ','
  optionally enclosed by '"';

SQL実行

mysql --local-infile=1 -h ${DBサービスホスト} -u ${DBログインユーザ} -p${DBログインパスワード} ${DB} < ${登録用SQLパス}

参考

【MySQL】csvファイルをDBにインポートする方法:Qiita

別解

ファイル名に制限がある。

mysqlimport --local -u ${DBログインユーザ} -p${DBログインパスワード} ${DB} < ${テーブル名}.csv

# これでもOK。
mysqlimport --local -u ${DBログインユーザ} -p${DBログインパスワード} ${DB}.${テーブル名}.csv

参考

[MySQL] テーブルにファイルをインポートする – mysqlimport編:ねこの足跡R

実行計画取得

EXPLAIN ${対象SQL}

実行コマンド例

mysql -t -h ${ホスト名} -u ${ログインユーザ} -p${ログインパスワード} ${対象DB} < ${評価対象SQL} > ${評価結果}

※-tオプションはフォーマット指定。tsv形式で出力したい場合は不要。

実行結果例

+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------+
| id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------+
|  1 | SIMPLE      | T_COMMENT | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 556978 |   100.00 | NULL  |
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------+
1 row in set, 1 warning (0.01 sec)

実行結果の読み方

select_type

説明
PRIMARY 一番外側
DERIVED 派生テーブル(サブクエリ)

type

説明
const 最大1件。最初に読む。
ref 前テーブルの行ごとに検索。一致するインデックスを持つ行をtableから読まれる。行が少ない場合はこれが最適。
eq_ref 前テーブルの行ごとに検索。一致す値を持つ行tableから読まれる。refが使えない場合は最適。
ALL テーブルスキャン。不適切。
index インデックス版のALL。ALLほどではないが不適切。まし、という程度。

possible_keys

行の検索に使用できるキー。Explainの順と無関係に出力されるので、実際には使用できないこともある。

key

実際に使用されたキー。

ref

keyを何と比較したか。

rows

比較対象の行。

filterd

フィルタ処理される推定割合。
rowsの行がどこまで減るか。

Extra : 実行戦略

※type = index で、Using where と Using indexが両方出るのは、whereの処理でindexを見ている。

参考

実際に読んでみた

メモ:読み方が妥当かは未確認。 ※後で修正

  1. keyを確認する。
    • MySQL が実際に使用することを決定したキー (インデックス) を示します。
  2. type = ALLの列に着目する。(ALLはよくない。)
  3. possible_keysを確認する。MySQL がこのテーブル内の行の検索に使用するために選択できるインデックスを示します。

テーブル定義取得

SHOW CREATE TABLE ${テーブル名}

参考