Mac OS XにMacPorts経由でMySQL5.7をインストールしセットアップした際のメモ、HomeBrew他のOSでもMySQL5.7の設定手順などは同じなのでパス名など十分気をつければ一応参考になるかもしれないだろう

Mac OS XにMacPorts経由でMySQL5.7をインストールしセットアップした際のメモ。
インストール手順はMacPortsだが、1.と2.をyumやapt-getなどでインストールする手段に読みかえればCentOSやUbuntuでも通用すると思う。あとはパス名だけOS・パッケージごとに異なる場合があるので注意していただきたい。

  1. rootでの作業を開始

  2. # sudo su - root

  3. rootになり、MacPortsの更新

  4. # port selfupdate
    # port upgrade outdated

  5. MySQL5.7のインストール

  6. # port install mysql57

  7. .profileにPATH環境変数設定追加
  8. .bashrcか.profileなど、パスを設定している環境変数にMySQLがインストールされているディレクトリを追加しておく。
    コマンド実行時にフルパスで記述する場合や、OS起動時にmysqldを起動するなどの場合はパッケージインストール時に適切なパスが設定されていると思われるので、特段設定する必要はないだろう。

    # vi ~/.profile

    環境変数設定部分のみピックアップ。以下の通り。
    [bash]
    # MySQLバイナリの設定
    # CentOSやapt-getなどのLinux系OSなら/usr/binかも。要確認
    # FreeBSD portsなどBSD系だと/usr/local/binだろうか。要確認
    export MYSQL_BIN_PATH="/opt/local/lib/mysql57/bin"
    export PATH="/opt/local/bin:/opt/local/sbin:$MYSQL_BIN_PATH:$PATH"
    [/bash]

  9. 環境変数の反映

  10. # . ~/.profile

  11. MySQL設定ファイル(my.cnf)の記述
  12. 設定ファイルのパスもシステムによって違いがある。Linux系なら/etc/my.cnf、BSD系なら/usr/local/etc/my.cnfだろうか。

    # vi /opt/local/etc/mysql57/my.cnf

    設定ファイルは以下の通り。
    [text]
    # Use default MacPorts settings
    # >>> 以下の行を生かしておくと、macports-default.cnfに記載されているskip-networkingによってTCP接続ができない状態で起動されるため注意。
    # >>> (MacPorts独自のインストール時設定)
    #!include /opt/local/etc/mysql57/macports-default.cnf

    [client]
    port=3306
    socket=/var/run/mysql/mysql.sock

    [mysqld]
    port=3306
    socket=/var/run/mysql/mysql.sock
    datadir=/var/db/mysqld
    pid-file=/var/run/mysql/mysqld.pid
    secure-file-priv=/var/db/mysqld/files
    character-set-server=utf8
    key_buffer_size=16M
    max_allowed_packet=16M

    [mysqldump]
    quick

    [mysqld_safe]
    log-error=/var/log/mysqld.log
    [/text]

  13. pidファイル保存場所の作成
  14. これらはシステムのパッケージシステムによって事前にすべて設定してくれるものもあるので、適宜作成する必要がある。ディレクトリの位置などもこの位置でなければならないわけでは無いが、違いディレクトリパスや名前にする場合はmy.cnfの設定も合わせて同じ名前で設定すること。
    またユーザ

    # mkdir /var/run/mysql
    # chmod 775 /var/run/mysql
    # chown _mysql:_mysql /var/run/mysql

  15. データディレクトリの作成

  16. # mkdir /var/db/mysqld
    # chown -R _mysql:_mysql /var/db/mysqld
    # chmod 770 /var/db/mysqld

  17. MySQL初期化実行
  18. 起動時に/var/db/mysqldディレクトリ内が空でなければ起動しない。rootの初期パスワードをメモなりで必ず覚えておく(後で使う)。

    # mysqld --initialize --user=_mysql
    2016-09-18T01:10:37.413222Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2016-09-18T01:10:37.415091Z 0 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql57/ is case insensitive
    2016-09-18T01:10:39.012024Z 0 [Warning] InnoDB: New log files created, LSN=45790
    2016-09-18T01:10:39.236154Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
    2016-09-18T01:10:39.314635Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b667d394-7d3c-11e6-987f-d5f44681b507.
    2016-09-18T01:10:39.425260Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
    2016-09-18T01:10:39.425931Z 1 [Note] A temporary password is generated for root@localhost: rootの初期パスワード

  19. ファイルロード用ディレクトリを作成

  20. # mkdir /var/db/mysqld/files
    # chown -R _mysql:_mysql /var/db/mysqld/files
    # chmod 770 /var/db/mysqld/files

  21. ロードファイル権限などの設定
    • secure-file-priv設定なしだとmysqld_safe起動時にエラー

    • [ERROR] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /opt/local/var/db/mysql57-files

    • secure-file-priv=/var/db/mysqld/filesだけどパーミッションがroot:wheel、755などだとmysqld_safe起動時に警告。

    • [Warning] Insecure configuration for --secure-file-priv: Location is accessible to all OS users. Consider choosing a different directory.

    • my.cnfを設定する前にmysqld –initializeとか実行したり試行錯誤していると、こんなエラーでmysqld_safeが起動しない事がある。

    • [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

      その場合は/var/db/mysqld配下をすべて消して(cd /var/db/mysql && rm -rf *)、mysqld –initializeをやり直し、/var/db/mysqld/filesを作り直す。

  22. MySQL起動

  23. # mysqld_safe &

  24. ログで起動状況を確認
  25. 最後の行がAbortとかERRORだったりしたら起動できない。設定ファイルやディレクトリパーミッションがおかしいなどが主な理由だと思うので設定を確認すること。port: 0になってたらネットワーク接続ができない状態。6.の内容を確認すること。

    # cat /var/log/mysqld.log
    2016-09-18T03:09:21.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysqld
    2016-09-18T03:09:21.411563Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2016-09-18T03:09:21.413085Z 0 [Note] /opt/local/lib/mysql57/bin/mysqld (mysqld 5.7.15) starting as process 12795 ...
    2016-09-18T03:09:21.414474Z 0 [Warning] Setting lower_case_table_names=2 because file system for /var/db/mysqld/ is case insensitive
    2016-09-18T03:09:21.417107Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
    2016-09-18T03:09:21.417119Z 0 [Note] InnoDB: Uses event mutexes
    2016-09-18T03:09:21.417123Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
    2016-09-18T03:09:21.417128Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
    2016-09-18T03:09:21.417383Z 0 [Note] InnoDB: Number of pools: 1
    2016-09-18T03:09:21.417477Z 0 [Note] InnoDB: Using CPU crc32 instructions
    2016-09-18T03:09:21.418525Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
    2016-09-18T03:09:21.428345Z 0 [Note] InnoDB: Completed initialization of buffer pool
    2016-09-18T03:09:21.442972Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
    2016-09-18T03:09:21.447976Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
    2016-09-18T03:09:21.448129Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
    2016-09-18T03:09:21.578287Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
    2016-09-18T03:09:21.578989Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
    2016-09-18T03:09:21.578998Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
    2016-09-18T03:09:21.579238Z 0 [Note] InnoDB: Waiting for purge to start
    2016-09-18T03:09:21.634491Z 0 [Note] InnoDB: 5.7.15 started; log sequence number 2532293
    2016-09-18T03:09:21.634635Z 0 [Note] InnoDB: Loading buffer pool(s) from /private/var/db/mysqld/ib_buffer_pool
    2016-09-18T03:09:21.634740Z 0 [Note] Plugin 'FEDERATED' is disabled.
    2016-09-18T03:09:21.636158Z 0 [Note] InnoDB: Buffer pool(s) load completed at 160918 12:09:21
    2016-09-18T03:09:21.638696Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
    2016-09-18T03:09:21.638712Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
    2016-09-18T03:09:21.638785Z 0 [Note] IPv6 is available.
    2016-09-18T03:09:21.638795Z 0 [Note] - '::' resolves to '::';
    2016-09-18T03:09:21.638856Z 0 [Note] Server socket created on IP: '::'.
    2016-09-18T03:09:21.645699Z 0 [Note] Event Scheduler: Loaded 0 events
    2016-09-18T03:09:21.645832Z 0 [Note] /opt/local/lib/mysql57/bin/mysqld: ready for connections.
    Version: '5.7.15' socket: '/var/run/mysql/mysql.sock' port: 3306 Source distribution

  26. 初期設定処理の実施
  27. 以下のシチュエーションは入力内容次第で順序や表示内容が変わる場合があるので、あくまでもここでの進行例。

    # mysql_secure_installation

    ここで、9.のパスワード入力。入力しないと先に進めない

  28. rootの新規パスワード設定

  29. The existing password for the user account root has expired. Please set a new password.
    New password: 自分の新しいパスワード
    Re-enter new password: 自分の新しいパスワード(再入力)

  30. パスワードバリデーションプラグインを使って安全なパスワードかどうかを評価するかどうか確認
  31. 評価したいならY、ゆるい(安全でない)パスワードにしたいならN。ここではYを選択。

    VALIDATE PASSWORD PLUGIN can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD plugin?
    Press y|Y for Yes, any other key for No: Y

  32. パスワード入力
  33. この例ではhoge123で入力した。パスワードの強弱の評価ポリシーが表示されて、どれにするか番号で選択。

    LOW 8文字以上のパスワード
    MEDIUM 8文字以上で数字、アルファベットの大小文字、記号の混在
    STRONG 8文字以上で数字、アルファベットの大小文字、記号、辞書ファイルの混在

    ここでは2を選択。初期パスワードのような比較的ランダムな状態のパスワードが望まれるだろう

    There are three levels of password validation policy:
    LOW Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

  34. 最初のパスワードを使うか変更をするかの質問
  35. 変更するのでYを選択。ちなみにパスワード強度の見積もりは100と評定されている。数値が100に近いほど強度が高いと評価されている

    Using existing password for root.
    Estimated strength of the password: 100
    Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y

  36. 強いパスワードを入力
  37. STRONGで説明されているような強いパスワードを指定する。
    ちなみにランダムのパスワード生成をお求めの場合は、拙著のパスワード生成もぜひぜひご利用ください。

    New password: 強いパスワード
    Re-enter new password: 強いパスワード(再入力)

  38. 入力パスワードでの設定確認
  39. 強度は100と評価された。このパスワードで作業を続けるならYを選択。

    Estimated strength of the password: 100
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

  40. テストアカウントの削除
  41. 「デフォルトでMySQLは匿名ユーザを持っていて、ユーザアカウントを作成しなくてもMySQLにログインを許可している。テスト用のアカウントなので製品環境移行前に消すべきである」。今消すならYを選択。ここではYを選択する。

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y

  42. 削除成功
  43. 削除が成功したら以下のようにメッセージが表示されて先に進む。

    Success.

  44. rootのリモート接続可否
  45. 「通常rootはローカルホストからの接続のみ許可されるべきである。不特定のユーザに対してネットワーク経由でrootパスワードを推測可能にさせないためのものである」。リモートからのrootログインを禁止するならYを選択。ここではYを選択した。

    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y

  46. 設定成功
  47. 削除が成功したら以下のようにメッセージが表示されて先に進む。

    Success.

  48. テスト用データベースの削除
  49. 「デフォルトでMySQLは誰もがアクセス可能なtestデータベースを持っている。テストのためのもので製品環境に移行する前に削除するべきである」。testデータベースとアクセス権を削除するならYを選択。ここではYを選択した。

    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

  50. 削除成功
  51. testデータベースとアクセス権の削除に成功したら、以下のようにメッセージが表示される。

    - Dropping test database...
    Success.

    - Removing privileges on test database...
    Success.

  52. 設定の反映
  53. 「権限テーブルの再読み込みで、ここまでに行ったすべての変更を即時反映する」。再読み込みするならYを選択。ここではYを選択した。

    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

  54. すべての設定完了
  55. 再読み込みに成功し、これですべての導入設定が完了した。

    Success.
    All done!

  56. クライアントコマンドから接続テスト
  57. 20.で入力したパスワードで接続。コマンドプロンプトが出たら、CREATE DATABASE hogehoge;などとデータベースを作成し、use hogehoge;でデータベースに移行してSQLやDDLなどを操作できる。

    # mysql -hlocalhost -uroot -p'rootパスワード'
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 11
    Server version: 5.7.15 Source distribution
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    mysql>

詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE)MariaDB&MySQL全機能バイブル詳細! PHP 7+MySQL 入門ノートSQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへSQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

コメントを残す

メールアドレスが公開されることはありません。