MySQL5.7 インストールと初期設定
以前受けたOracleのMySQL講座資料から抜粋。
http://downloads.mysql.com/presentations/20151207_01_MySQL_Install_Beginners.pdf
設定
- MySQLサーバーの設定はシステム変数で行う
- 設定しなかったシステム変数にはデフォルト値が設定される
- 設定方法
- オプションファイル(/etc/my.cnf)で設定
- デフォルトでは複数の場所のファイルを読み込み、後勝ちとなる
- ファイルを読み込む順序は msqld –verbose –help で確認できる (eg Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf)
- 一時的な設定(SET [GLOBAL|SESSION] <variable>=<value>)
- オプションファイル(/etc/my.cnf)で設定
- 確認方法
- SHOW [GLOBAL|SESSION] VARIABLES LIKE ‘%<システム変数名>%’;
- SELECT @@global.<システム変数名>, @@session.<システム変数名>;
管理者ユーザーパスワード
- root ユーザーの初期パスワードにはランダム文字列が設定され、ログイン後パスワードを変更するまでは何もできない。
- DB初期化処理後、エラーログもしくはコンソールからパスワードを確認する。
- エラーログの場所(/etc/my.cnf 確認 eg- log-error=/var/log/mysqld.log)
- 該当行を検索 (cat /var/log/mysqld.log | grep ‘password is generated’)
- パスワードの変更 (SET PASSWORD FOR ‘ユーザー名’@’ホスト名’=’変更後のパスワード’;)
- パスワード検証プラグイン
- インストール方法によりデフォルトで有効になっている(yum,rpm など)
- デフォルトのポリシー(8文字以上、英語大文字/小文字/数字/特殊文字 を1文字以含む)
- 有効化:mysql> INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;
- 無効化:mysql> UNINSTALL PLUGIN validate_password;
- 確認:mysql> SHOW VARIABLES LIKE ‘validate_password%’;
- インストール方法によりデフォルトで有効になっている(yum,rpm など)
注意すべきシステム変数
http://downloads.mysql.com/presentations/20151030_05_MySQL-Parameter-comparison.pdf
パラメータ | デフォルト | 推奨 | 説明 |
default_password_lifetime | 360 | 0 | パスワード有効期限。期限が切れるとログインできなくなる。 |
log_timestamps | UTC | SYSTEM | UTCでは日本時間が把握しにくい。 |
sql_mode | ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZE RO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION | N/A | 設定 によって、同じSQLがエラーになる/ならない、などの違いが出る。書籍やネット等で知ったSQLを実行してエラーになった場合など原因となっている可能性の確認 |
innodb_strict_mode | ON | N/A | 書籍やネット等で知ったSQLを実行してエラーになった場合など原因となっている可能性の確認 |
secure_file_priv | 環境依存 | NULL もしくは 任意のディレクトリ | 値が設定されていないと、OS上のmysql実行ユーザーが権限を 持つ全てのディレクトリ/ファイルに対して操作が出来てしまう。NULLを設定した場合は、OS上のファイルの読書きを全て 禁止できる。 |
ステータス変数
- MySQLサーバーの動作を監視するために、ステータス変数を確認する。
- SHOW [GLOBAL|SESSION] STAUTS ‘%<ステータス変数名>%’;
- 特定のクエリについて調査
- FLUSH STATUS; <クエリ実行>; SHOW STATUS;
- 定期的に確認(15秒間隔で差分のみ表示)
- mysqladmin –u –p … ex –i 15 –r | grep –v ‘0’
各種ログ
- エラーログ
- 起動/停止、サーバーサイドエラー関連
- バイナリログ
- 更新系の処理内容のみ記録
- バイナリ形式mysqlbinlogコマンドでテキスト化可能
- デフォルト非出力(log_bin, server_id を設定し出力)
- 一般クエリログ
- クライアント接続、実行されたすべてのSQL
- デフォルト非出力(general_logを設定し出力)
- サーバー稼働中に出力/非出力切り替え可
- テーブルへも出力可能
- スロークエリログ
- 実行時間が指定した時間以上のクエリを出力
- デフォルト非出力(log_slow_queries を設定し出力)
- long_query_time:秒単位で指定,log_queries_not_using_index:インデックス未使用クエリ全出力
起動停止
- 起動
- mysqld –defaults-file=<my.cnfへのパス> &
- 停止
- mysqladmin –u root –p shutdown
接続
- mysql –u <ユーザー名> –p
- リモートホストを指定
- mysql –u <ユーザー名> –h <ホスト名> –P <ポート番号> –p
データベース(スキーマ)
- 作成
- CREATE DATABASE <データベース名>;
- 確認
- SHOW DATABASES;
データ型
- JSONデータ型
- JSONを格納できるネイティブJSONデータ型
- JSONを扱う関数も多数(JSON_VALID,JSON_SEARCH,JSON_REPLACEなど)
- http://downloads.mysql.com/presentations/20151030_04_MySQL-57-JSON.pdf
講座の講師をやられていた方の著作