HomebrewでMySQL8をインストールした時の問題点

HomebrewでMySQL8をインストールした時の問題点

  • 2019-02-13  最終更新日:2019-02-13

さて、今回はお手軽にMySQL8をインストールしたときの問題点などをご紹介します。MacOS用パッケージマネージャーHomebrewを使ってインストール、そしてphpからアクセスしたときの問題点などをご紹介します。

Vagrantで環境を整えておりましたが面倒になったので簡単にhomebrewからインストールできるということを最近知りました。というよりHomebrewあまり使っていないという。。最近v2.0になりましたのでついでにMySQLを入れてあらかじめ入っているPHPでテストしてみようと思った次第です、

いろいろとうまくいかないことが多々ありましてやめようかと思ったけどなんとか出来たので残しておきます。


インストール

MySQL8

homebrewがインストール済みということで話を進めます。インストールといってもターミナルで以下を実行するだけです。

$ xcode-select —install
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

そしてMySQLは以下を実行すればインストールされます。現在はMySQL8がインストールされます。

$ brew install mysql
$ mysql --version
# mysql  Ver 8.0.13 for osx10.14 on x86_64 (Homebrew)

MySQL5.6や5.7を入れたい場合は以下を実行すれば良いです。 brew search mysqlで入れたいバージョンを探します。mysql@5.5,mysql@5.6,mysql@5.7と入っていますね。 brew install mysql@5.7として5.7を入れることが出来ます。

$ brew search mysql
==> Formulae
automysqlbackup               mysql++                       mysql-cluster                 mysql-connector-c++           mysql-search-replace          mysql@5.5                     mysql@5.7
mysql ✔                       mysql-client                  mysql-connector-c             mysql-sandbox                 mysql-utilities               mysql@5.6                     mysqltuner

==> Casks
mysql-connector-python             mysql-shell                        mysql-utilities                    mysqlworkbench                     navicat-for-mysql                  sqlpro-for-mysql

$ brew install mysql@5.7

今回はMySQL8で進めます。

初期設定

MySQLを入れたらとりあえずこのコマンド(mysql_secure_installation)で初期設定を行います。 初期設定というかセキュリティ設定です。日本語訳と一緒に載せておきます。

設定内容は以下の通りですが内容全部YESにします。

  • root パスワードの設定
  • root ユーザーのログインを localhost に制限(リモートホストからアクセス禁止)
  • anonymous ユーザーの削除
  • test データベースの削除
$ mysql_secure_installation

Securing the MySQL server deployment.
# MySQLサーバー配備の保護

Connecting to MySQL using a blank password.
# 空白のパスワードを使用してMySQLに接続します。

VALIDATE PASSWORD COMPONENT 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 component?
# 有効なパスワードコンポーネントを使用してパスワードをテストし、セキュリティを向上させることができます。 これはパスワードの強度をチェックし、ユーザーが十分に安全なパスワードだけを設定できるようにします。 パスワードコンポーネントをセットアップしますか?

Press y|Y for Yes, any other key for No: y 【← パスワードコンポーネントをインストールするか。yesのyを入力してエンターキー】

There are three levels of password validation policy:
# パスワード検証ポリシーには3つのレベルがあります。

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

# 低い長さ >= 8
# 中間長さ >= 8、数字、大文字と小文字の混在、および特殊文字
# 強力長さ >= 8、数字、大/小文字混合、特殊文字および辞書ファイル

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 【← パスワードポリシーはLOWに設定。必要に応じて強度の強いMEDIUM,STRONGを設定】

Please set the password for root here.
New password: 【← パスワードを入力してエンターキー】
Re-enter new password: 【← パスワードを再入力してエンターキー】

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y 【← パスワード登録を進めるためにyを入力してエンターキー】
# パスワードの推定強度:50
# 提供されたパスワードを続行しますか?(はいの場合は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.
# デフォルトでは、MySQLインストールは匿名ユーザーを持っているため、誰でも自分のためにユーザーアカウントを作成しなくてもMySQLにログインできます。 これはテストを目的としており、インストールを少し滑らかにするためのものです。 実稼働環境に移行する前にそれらを削除する必要があります。

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y 【←無名ユーザを削除するか。yを押してエンターキー 】
Success.

Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.
# 通常、rootは 'localhost'からの接続のみを許可されるべきです。 これにより、誰かがネットワークからのrootパスワードを推測できなくなります。

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y 【←root のログインをローカルからに制限するか? 】

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.
# デフォルトでは、MySQLには誰でもアクセスできる 'test'という名前のデータベースが付属しています。 これもテスト専用であり、本番環境に移行する前に削除する必要があります。

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y 【← test データベースを削除するか】
Dropping test database...
Success.
# テストデータベースを削除しています...
# 成功。

Removing privileges on test database...
Success.
# テストデータベースの権限を削除しています...
# 成功。

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 【← 権限の変更を更新するか?】
- Success.
- All done!

これで設定できました。以下でログインします。

$ mysql.server start
$ mysql -uroot -p

ストップするときは以下です。

mysql.server stop

MySQL8からユーザー認証の方法がmysql_native_passwordからcaching_sha2_passwordに変更されていますので MySQLの認証をmysql_native_passwordに戻せばcaching_sha2_passwordに対応してないアプリでも接続できるので設定します。

mysql > ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'password123456';

因みにMySQL8の場合はパスワードの変更方法が変わっています。

mysql > ALTER USER 'root'@'localhost' identified BY 'password123456';

以下はMySQL5の時のパスワード変更方法

mysql > SET PASSWORD FOR 'root'@'localhost'=password('password123456');

以下はパスワードポリシーの変更方法です。

mysql > SHOW VARIABLES LIKE 'validate_password%'; #ポリシー確認
mysql > SET GLOBAL validate_password.length=4;
mysql > SET GLOBAL validate_password.policy=LOW;

あとはmy.cnf設定内容

$ sudo vim /etc/my.cnf

[mysqld]
character_set_server = utf8mb4
collation-server = utf8mb4_bin
default_authentication_plugin = mysql_native_password
explicit_defaults_for_timestamp = true
socket = /tmp/mysql.sock

そして今度はPHPの設定です。/tmp/mysql.sockにパスを設定します。

MySQL8

$ sudo cp -p /etc/php.ini.default /etc/php.ini
$ sudo chmod 644 /etc/php.ini
$ sudo vim /etc/php.ini

mysqli.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket= /tmp/mysql.sock

これで設定完了です。ようやくPHPからのアクセスが可能になります。PHPのビルトインサーバーを使ってアクセス出来ました。入っているPHPのバージョンは7.1.23でした。

因みにMySQLだとkeyという項目が登録できないことに気がつかず1時間ぐらい悩みました。例えば以下のテーブルを作成しようと実行したら

CREATE TABLE IF NOT EXISTS user (
	id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
	email VARCHAR(50),
	key VARCHAR(50),
	num INT,
	del_flag INT default 0,
	post_date VARCHAR(50),
	update_date VARCHAR(50)
)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(50), num INT, del_flag INT default 0, post_date VARCHAR(50), update_' at line 4

エラーが出てしまったのですが全く意味がわからない状態でしたがどうもkey項目は登録できないようでした。

参考になれば幸いです。


∞Tadashi Suyama∞

MySQL8 PHP localhost homebrew
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

サイト内検索

最近の投稿

アイキャッチ
Perlで500エラー!原因は文字コードだけでなく改行コード

あまりcgiは使いたくないのですが使わざるを得ない時があります。仕方なく設置するのですがエラーが出ちゃうんです。なんか知らないけど。 ありがちなのがパーミッションとかパスが問題になるんのですけど...

19 Feb 2022

アイキャッチ
WordPressの標準メールアドレスの変更方法

今回はワードプレス専用のアドレス変更方法をご紹介します。ワードプレスのアドレスはwordpress@~という形で送られてきますが変更可能です。 functions.phpに記載するのですがプラグ...

12 Feb 2022

アイキャッチ
LibSass(node-sass)からDartSassに移行の手順

Sassの遷移は多すぎる今日この頃 Ruby Sass→LibSass→DartSass(いまここ) Ruby SassはSassの最初の実装でしたが、2019年3月26日にサポートが終了しま...

22 Jan 2022

アイキャッチ
明けましておめでとうございます

明けましておめでとうございます。 本年も何卒よろしくお願いいたします。 年末年始は雪でしたね、そこまで積もっていませんが。 {% include adsensearticle.html...

10 Jan 2022

アイキャッチ
そろそろvuejs始める

最近はjQueryよりvueで書いた方が楽ではないかと思い学習中です。 そもそもVuejsはドキュメントが日本語対応なので試しやすいし情報も豊富なので学習しやすいです。 3大フレームワークと呼...

02 May 2021

著者

ウェブエンジニアの須山のブログです。

WEBに関することや個人的に関心のあることについて書きます。主に技術系ブログです。

タグクラウド

MySQL8 PHP localhost homebrew
フッターイメージ