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>)
  • 確認方法
    • 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%';

注意すべきシステム変数

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;

データ型

講座の講師をやられていた方の著作