WindowsでMySQL 8.0.3 rc からMySQL 8.0.13へのアップグレードでハマる。

PHPフレームワークのLaravelと、PHPCMSWordPress、なぜか連携方法についてはほとんど情報が無いという...

よく、『車輪の再発明』は宜しくないって言葉をプログラマーの世界では聞くけど、それならば何故に、Laravel ✕ WordPress みたいなコラボのノウハウが出回らないのか不思議でしょうがないですね。

完璧な連携は無理でも、Laravel側で、WordPressのデータを利用しようってことにトライしたいんだけど、その前にMySQLのアップグレードでハマってます...。

 

前回までで、PHP、Laravel は、インストール済みです。

ts0818.hatenablog.com

 

というわけで、レッツ、トライ~。 

MySQLでハマってる状態なので、お時間のある方のみご照覧ください。

 

Apache Httpdをインストール

ありがたいことに、2018年11月現在、Apacheの公式のサイトで配布されている最新版のApache Httpd と同じバージョンのものを、Chocolatey を使ってインストールできるみたい。

https://chocolatey.org/packages/apache-httpd にアクセスすると、

f:id:ts0818:20181107203455p:plain

⇧  Apache Httpd 2.4.37 がインストールできるようです。

というわけで、コマンドプロンプトを管理者権限で起動しまして(タスクバーとかにあるコマンドプロンプトのアイコン上で右クリック、表示されたコマンドプロンプトの文字の上で右クリックで、「管理者として実行(A)」)、

f:id:ts0818:20181107203650p:plain

では、Chocolateyで、Apache Httpd をインストール。 

choco install apache-httpd --version 2.4.37 --params '"/installLocation:C:\HTTPD "'    

f:id:ts0818:20181107204153p:plain

f:id:ts0818:20181107204223p:plain

「アクセスを許可する(A)」で。

f:id:ts0818:20181107204514p:plain

インストールされました。

f:id:ts0818:20181107204544p:plain

f:id:ts0818:20181107204714p:plain

 

www.adminweb.jp

⇧  上記サイト様を参考にさせていただき、起動確認。

で、できない...

f:id:ts0818:20181107205215p:plain

 ⇧  っていうか、Apache Httpd のデフォルトのポートは80番って説明だったはずだが...何故に8080番に?

Windowsのサービスとしては起動してるみたい。

f:id:ts0818:20181107210538p:plain

f:id:ts0818:20181107210810p:plain

とりあえず、設定ファイルhttpd.confを編集して、ポートを80番にしてみますか。

f:id:ts0818:20181107211625p:plain

っていうか、デフォルトの80番じゃないじゃん...

f:id:ts0818:20181107211720p:plain

変更して、文字コードは、UTF-8で保存します。

f:id:ts0818:20181107211919p:plain

文字コードセット(C):」をUTF-8で、「保存(S)」。

f:id:ts0818:20181107212009p:plain

f:id:ts0818:20181107212302p:plain

右下に、「UTF-8」って表示されてればOK。

f:id:ts0818:20181107212334p:plain

っていうか、chocolateyでインストールすると、サービス名が、「apache」になってるらしい。普通は、「apache2.4」とかになるらしい...余計なことを...。

f:id:ts0818:20181107214155p:plain

で、一回、止めてから、起動したらイケました。ブラウザで「http://localhost」にアクセスすると、『IT WORKS』って表示されればOKのようです。

f:id:ts0818:20181107215931p:plain

Ctrl + C で、止めれるみたいですかね。

f:id:ts0818:20181107220122p:plain

 サービスも止まってます。「httpd」コマンドは、サービスとしてのApache起動ってことみたいですね。

f:id:ts0818:20181107220253p:plain

WebサーバとしてのApacheが停止したので、ブラウザ上からのアクセスも切断されました。

f:id:ts0818:20181107222421p:plain

また、あとで起動します。 

 

 

MySQLのインストール

続いて、WordPressを使う場合は、データベースが必須なので、今回はMySQLをインストールで。 

MySQL 8.0 が、正式にリリースされたそうなので、MySQL 8.0 をインストールで。自分は、以前にインストールしていたので、サービスとして起動している状態です。

f:id:ts0818:20181107220850p:plain

f:id:ts0818:20181107220940p:plain

 

ts0818.hatenablog.com

⇧  この時の記事ですかね。このときは、まだ、正式じゃなかったんで、「MySQL 8.0のリリース候補版(RC/Release Candidate)となるMySQL 8.0.3 RC」をインストールしたのであった。

というわけで、今回は、アップデートしていきたいと思いますが、インストールする場合は、

www.dbonline.jp

⇧  上記サイト様が参考になるかと。

 

では、アップグレードをば。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.3.7 Windows 上の MySQL をアップグレードする

⇧  マニュアルによると、既存のMySQLのサービスを停止して、新しいMySQLのzipを既存のMySQLとは別ディレクトリに展開するらしい、ほぼ、新規インストールみたいなもんですかね...。 

 

MySQL :: MySQL Community Downloads にアクセスで。

MySQL Community Server (GPL)」の「DOWNLOAD」のリンクをクリック。

f:id:ts0818:20181107222902p:plain

ページ遷移したらば、下の方にスクロールして、今回は、「Windows(x86, 64-bit), ZIP Archive Debug Binaries & Suite」の「Download」で、と思ったら、リリース間(5.7から8.0のような)でのアップデートでない場合は、新規にインストールの場合と同じく、「MySQL Installer for Windows」でアップデートすべし、と記載されてました。

Upgrading MySQL with MySQL Installer

Performing an upgrade with MySQL Installer is the best approach when the current server installation was performed with it and the upgrade is within the current release series. MySQL Installer does not support upgrades between release series, such as from 5.7 to 8.0, and it does not provide an upgrade indicator to prompt you to upgrade. For instruction on upgrading between release series, see Upgrading MySQL Using the Windows ZIP Distribution.

MySQL :: MySQL 8.0 Reference Manual :: 2.3.8 Upgrading MySQL on Windows

⇧  自分の場合、MySQL 8.0.3 RC から、MySQL 8.0.13 にアップデートしようとしているということになるので、MySQL Installer を使う感じでしょうね。

というわけで、「MySQL Installer for Windows」のバナーをクリック。

f:id:ts0818:20181107223206p:plain

ページ遷移したらば、下の方にスクロールしまして、

f:id:ts0818:20181110120102p:plain

Windows(x86, 32-bit), MSI installer(mysql-installer-web-community-8.0.13.0.msi)」の「Download」をクリック。

weblabo.oscasierra.net

⇧  上記サイト様によりますと、インターネットを使える環境であれば、『mysql-installer-web-community』のほうで良いようです。

f:id:ts0818:20181110120303p:plain

ページ遷移したらば、下の方にスクロールしまして、

f:id:ts0818:20181110122025p:plain

「No thanks, just start my download.」のリンクをクリック。

f:id:ts0818:20181110121255p:plain

 

インストーラー(「MySQL Installer for Windows」)でインストールする場合、

既存のサービスを削除しないと、MySQL Installation Wizard は新しい MySQL サービスを適切にインストールできない場合があります。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.3.7 Windows 上の MySQL をアップグレードする

MySQL 5.6 までだと、既存のMySQL(インストールしてる場合)のサービスを停止、削除しておく必要があるようです。

www.atmarkit.co.jp⇧  上記サイト様によると、コマンドでサービスの有無とか確認できるみたい。

sc query | find/i "mysql" | sort

f:id:ts0818:20181110114608p:plain

⇧  自分の場合は、MySQL5.7、MySQL 8.0 がサービスとして起動してるようです。  

で、MySQL 8.0からは、インストーラーを使ってMySQLをアップデートする場合は、特にサービスの停止とかはしなくても良いみたい、公式の説明に書いてないし。

ただ、気になるのは、

Upgrades between milestone releases (or from a milestone release to a GA release) are not supported. Significant development changes take place in milestone releases and you may encounter compatibility issues or problems starting the server.

MySQL :: MySQL 8.0 Reference Manual :: 2.3.8 Upgrading MySQL on Windows

⇧  milestone release 間のアップグレードはサポートしてないという、milestone releaseが何を指しているか分からんですがね...。

まぁ、とりあえず、ダウンロードしたインストーラー()を実行します。

f:id:ts0818:20181110125314p:plain

f:id:ts0818:20181110125345p:plain

ダイアログが出て来るので、「OK」をクリック。

f:id:ts0818:20181110125427p:plain

「Next >」で。

f:id:ts0818:20181110125504p:plain

いや、「MySQL Server 5.7.18」をアップグレードしたいんじゃなくて、「MySQL Server 8.0.3.RC」のほうをアップグレードしたいんだが...

残念なことに、インストーラーのアップグレードでは、どのバージョンのものをアップグレードするか選べないらしい...そりゃ無いぜセニョリータってなもんですよ。

とりあえず、「Cancel」で。  

f:id:ts0818:20181110125847p:plain

致し方ないので、ZipのMySQLでアップグレードする方向にチェンジで。

まずは、https://dev.mysql.com/downloads/mysql/ で、

Windows(x86, 64-bit), ZIP Archive Debug Binaries & Suite」の「Download」で。

f:id:ts0818:20181107223206p:plain

「No thanks, just start my download.」のリンクをクリック。

f:id:ts0818:20181110121255p:plain

既存のMySQLのサービスを停止しておく必要があるそうです。自分の場合ですと、今回は、MySQL 8.0.3 RCのサービスである、mysql80 を停止すれば良いかと。

f:id:ts0818:20181110131322p:plain

⇧  はい、エラー。管理者権限としてコマンドプロンプトを起動してないとまずかったようです。

f:id:ts0818:20181110131526p:plain

f:id:ts0818:20181110131624p:plain

f:id:ts0818:20181110131738p:plain

⇧  サービスが停止したようです。

ダウンロードした Zipファイルを、アップデートしたいMySQLのフォルダに展開します。(上書きを推奨らしい)

f:id:ts0818:20181110132021p:plain

f:id:ts0818:20181110132153p:plain

f:id:ts0818:20181110132227p:plain

f:id:ts0818:20181110132307p:plain

上書きにならんかった...

f:id:ts0818:20181110133504p:plain

mysql-8.0.13-winx64」の中身を、アップグレードしたいMySQLのフォルダに移動すれば良いかと。自分の場合ですと、「C:\Program Files\mysql-8.0.3-rc-winx64」 。

f:id:ts0818:20181110133914p:plain

「続行(C)」で。

f:id:ts0818:20181110133943p:plain

f:id:ts0818:20181110134010p:plain

「すべての項目にこれを実行する(A)」にチェックを付ければ、「続行(C)」は一回で済んだっすね....

f:id:ts0818:20181110134311p:plain

f:id:ts0818:20181110134346p:plain

そしたらば、空になったフォルダは削除で。 

f:id:ts0818:20181110134623p:plain

既存のMySQLのフォルダを「名前の変更(M)」しときます。

f:id:ts0818:20181110134812p:plain

mysql-8.0.13」にしときました。

f:id:ts0818:20181110134957p:plain

そしたらば、新規にサービスをインストールする必要がありますが、オプションとして「.cnf」ファイルを利用することができるようです。

自分の場合は、前に作成していた「my.cnf」というファイルがあったので、それを編集します。ない場合は作成で。拡張子が「.cnf」であれば名前は何でも良いかと。

f:id:ts0818:20181110135805p:plain

前の情報を、

f:id:ts0818:20181110135828p:plain

新しい情報に、と思ったら、上書き禁止で開かれとる...。メモ帳(UTF-8Nで保存できない)以外なら何でも良いと思うけど、Visual Studio Codeで編集することにしました。

f:id:ts0818:20181110154741p:plain

⇧  保存したら、失敗ってなったので、「管理者権限で再実行...」 。

サクラエディタで確認すると、保存できたらしい。

f:id:ts0818:20181110154816p:plain

⇧  ちなみに、「enable-named-pipe」は、無くても問題ないかと、というか使わ無さそう...

MySQL 8.0.3 RC の時のサービスを削除しときます。

f:id:ts0818:20181110144004p:plain

サービスをインストール。

"[MySQLをインストールしたディレクトリ]\bin\mysqld.exe" --install [MySQLのサービス名] --default-file="[設定ファイルのあるディレクトリ]\[設定ファイル名].cnf"

f:id:ts0818:20181110144530p:plain

サービスが追加されました。

f:id:ts0818:20181110145013p:plain

f:id:ts0818:20181110150058p:plain

停止してるので、サービスを起動します。

f:id:ts0818:20181110150649p:plain

 ⇧  だ、駄目やん...。というか、詳しい説明...なってないやん?どうしたん?Windows

Windowsのイベントビューアーで、「管理イベント」見ると、

Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key』って...

f:id:ts0818:20181110160950p:plain

っていうか、公式のマニュアル通りやってるのに上手くいかないんですが...

Fixed in 8.0.13 and the following entry was added to the MySQL 8.0.13 changelog:

Microsoft Windows: Starting MySQL as a Windows service with the service-installation command that specified a service name other than MySQL following the --install option ignored the directives in the named service group of the my.ini or my.cnf options files and used default options instead. Only the default service names (mysqld, mysql_cluster, server, mysqld-8.0) could load different parameters from an options file.

MySQL Bugs: #90383: MySQL 8.0.4 RC don't read my.ini section with service name on Windows

⇧   インストールしたの、8.0.13 なんすけど...

f:id:ts0818:20181110194103p:plain

f:id:ts0818:20181110193953p:plain

ことごとく弾き返されるが...

ちなみに、「mysql-8.0.13-winx64.zip」のほうもダウンロードして上書きしてみたけど、変わらず。

f:id:ts0818:20181110200552p:plain

というか、普通に

f:id:ts0818:20181110201909p:plain

設定ファイルを修正する必要がありそうですね。というか、既存のDataフォルダとか使えんとか、知らんがな。

f:id:ts0818:20181110202936p:plain

駄目でした。

結論として、公式のマニュアルが間違ってますな。上書き推奨とか真っ赤な大嘘でした。だって、Data用のディレクトリとか空っぽじゃないとErrorになるらしいし、そうすると既存のデータがある以上、空ってことはありえないしね。

マジでいい加減にしたまえという哀しい気持ちになって、時間を無駄にしてしまったではないか... Oracleさんは毎回やってくれますな。

 

最終的に、こんな感じに。datadir として空っぽのディレクトリを適当な場所に作成しておきます。tmpdir はコメントアウトしてます。

f:id:ts0818:20181110215856p:plain

で、初期パスワードが、

『A temporary password is generated for root@localhost: q9ApdeFt.HOt』 ってな感じに表示されているので、

f:id:ts0818:20181110215829p:plain

ログインしてみますか。ん?

f:id:ts0818:20181110220754p:plain

んん?入れんやんけ~!

f:id:ts0818:20181110220843p:plain

って、MySQL起動しとらんかった... 初期化はあくまでMySQLに必要なファイルとかを準備するだけっぽい感じでで、起動はしてくれんということですかね?起動で。

f:id:ts0818:20181110221319p:plain

 「アクセスを許可する(A)」で。

f:id:ts0818:20181110221349p:plain

起動してる状態なので、もう1つコマンドプロンプトを起動で、

f:id:ts0818:20181110221607p:plain

 ログインできました。

f:id:ts0818:20181110221819p:plain

 パスワードを変更して、

f:id:ts0818:20181110223127p:plain

もう一回ログインし直してみます。

f:id:ts0818:20181110223308p:plain

⇧  変更したパスワードでログインできました。 

MySQLを停止。

f:id:ts0818:20181110223640p:plain

もう1つのコマンドプロンプトで起動していたMySQLが停止しています。

f:id:ts0818:20181110223708p:plain

 

残すは、Winodwsのサービスとして、MySQLのサービスを登録、起動できればOKと。管理者権限でコマンドプロンプトを起動し直して...はい、エラー。

f:id:ts0818:20181111111539p:plain

my.cnfのdatadirで指定したディレクトリにできてるログファイルを確認してみたところ 

...
2018-11-11T02:10:49.902068Z 0 [System] [MY-010116] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe (mysqld 8.0.13) starting as process 25716
2018-11-11T02:10:49.917908Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2018-11-11T02:10:49.918373Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2018-11-11T02:10:49.918819Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2018-11-11T02:10:49.919391Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-11-11T02:10:49.919786Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-11-11T02:10:49.921113Z 0 [System] [MY-010910] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.

「The innodb_system data file 'ibdata1' must be writable」って言われてもね...

15.6.3.1 The System Tablespace

The InnoDB system tablespace is the storage area for the doublewrite buffer and the change buffer. The system tablespace also contains table and index data for user-created tables created in the system tablespace. In previous releases, the system tablespace contained the InnoDB data dictionary. In MySQL 8.0, InnoDB stores metadata in the MySQL data dictionary. See Chapter 14, MySQL Data Dictionary.

The system tablespace can have one or more data files. By default, one system tablespace data file, named ibdata1, is created in the data directory. The size and number of system tablespace data files is controlled by the innodb_data_file_path startup option. For related information, see System Tablespace Data File Configuration.

MySQL :: MySQL 8.0 Reference Manual :: 15.6.3.1 The System Tablespace

⇧  公式の説明によると、MySQLの設定ファイル(拡張子「.ini」、または「.cnf」)のdaradirに指定したディレクトリに「ibdata1」っていう『自動拡張データファイル』ってのができるらしい、で、このファイルにアクセス(書き込み)できないのでDBの構成に必要な情報ファイルが作れずにDB起動に失敗ってことらしい、サービスでの。

d.hatena.ne.jp

⇧  上記サイト様によりますと、datadir のディレクトリの所有権を変更してあげれば良いらしい。

f:id:ts0818:20181111115235p:plain

⇧  「ibdata1」 のあるディレクトリは、自分の場合ですと「C:\Users\Toshinobu\Desktop\mysqlData」なので、ディレクトリの「プロパティ」から、「セキュリティ」タブで、「詳細設定」。

f:id:ts0818:20181111120729p:plain

「変更(C)」をクリック。

f:id:ts0818:20181111120821p:plain

「詳細設定(A)...」をクリック。

f:id:ts0818:20181111121153p:plain

「検索(N)」で、表示された結果から「NETWORK SERVICE」を選択し「OK」。

f:id:ts0818:20181111121324p:plain

「OK」。

f:id:ts0818:20181111121437p:plain

一応、「サブコンテナーとオブジェクトの所有権を置き換える」にチェックを入れ、「OK」で。(このへんよく分からんです...)

f:id:ts0818:20181111121748p:plain

で、変わらず...。参考にさせていただいたサイトでも解決できてなかったっぽい(涙)。

サービスが動いてる方のMySQL 5.7のほうのdatadirの設定は、

f:id:ts0818:20181111132624p:plain

ってなってたので、「アクセス許可エントリ」に「NETWORK SERVICE」追加してみた。所有者も、「Administrators」に。

f:id:ts0818:20181111133020p:plain

駄目でした...

f:id:ts0818:20181111132940p:plain

blog.workinghardinit.work

⇧  上記サイト様によりますと、アップグレードすべし、と。

f:id:ts0818:20181111135220p:plain

⇧  既にアップデート済みってなってるような...

まぁ、エラー変わらず。駄目でしたけど。

2018-11-11T04:34:34.894498Z 0 [System] [MY-010910] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.
2018-11-11T04:56:01.299252Z 0 [System] [MY-010116] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe (mysqld 8.0.13) starting as process 16220
2018-11-11T04:56:01.360031Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2018-11-11T04:56:01.360510Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2018-11-11T04:56:01.362070Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2018-11-11T04:56:01.363705Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-11-11T04:56:01.364661Z 0 [ERROR] [MY-010119] [Server] Aborting

f:id:ts0818:20181111135729p:plain

 

時間の関係上、1週間後。

ログのエラーが変わったけど...

2018-11-14T11:07:05.003066Z 0 [System] [MY-010116] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe (mysqld 8.0.13) starting as process 3424
2018-11-14T11:07:06.168379Z 0 [System] [MY-010229] [Server] Starting crash recovery...
2018-11-14T11:07:06.178444Z 0 [System] [MY-010232] [Server] Crash recovery finished.
2018-11-14T11:07:07.378033Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2018-11-14T11:07:07.436282Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-file=C:\Program Files\mysql-8.0.13\my.cnf'.
2018-11-14T11:07:07.437125Z 0 [Warning] [MY-010952] [Server] The privilege system failed to initialize correctly. If you have upgraded your server, make sure you're executing mysql_upgrade to correct the issue.
2018-11-14T11:07:07.439576Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-11-14T11:07:08.967621Z 0 [System] [MY-010910] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.

...と思ったら、MySQLを起動してなかった。起動で。

f:id:ts0818:20181114212304p:plain

起動したら同じく書き込みできないエラー。

で、起動するのは間違いらしいので、起動前に起こっていた「[Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.」を解決すれば良いらしい。

で、何かオプションで、「--skip-ssl」っての使わないと、MySQLのサービスは、CA(Certificate Authority)証明書を使って接続を試みるらしく、

This section describes options that specify whether to use encrypted connections, the names of certificate and key files, and other parameters related to encrypted-connection support. These options can be given on the command line or in an option file. For examples of suggested use and how to check whether a connection is encrypted, see Section 6.4.1, “Configuring MySQL to Use Encrypted Connections”.

MySQL :: MySQL 8.0 Reference Manual :: 6.4.2 Command Options for Encrypted Connections

 

MySQL のログに CA 関連と NO_ZERO_DATE 関連の Warning が出ていたので対応した : 犬ターネット

⇧  上記サイト様によりますと、my.cnf または、 my.ini に、証明書設定を追加する必要があるらしい。

 

For some distribution types, such as RPM packages, mysql_ssl_rsa_setup invocation occurs during data directory initialization. In this case, the MySQL distribution need not have been compiled using OpenSSL as long as the openssl command is available.

MySQL :: Security in MySQL :: 6.3.1 Creating SSL and RSA Certificates and Keys using MySQL

⇧  それらの情報は、MySQLを初期化(initialize)した時に、datadir にできるらしい。

f:id:ts0818:20181123120756p:plain

というわけで、設定。 

[client]
ssl-ca=[datadirのパス]\\ca.pem
ssl-cert=[datadirのパス]\\client-cert.pem
ssl-key=[datadirのパス]\\client-key.pem

# options for mysql8.0.13 service
[mysqld]
ssl-ca=[datadirのパス]\\ca-key.pem
ssl-cert=[datadirのパス]\\server-cert.pem
ssl-key=[datadirのパス]\\server-key.pem
basedir = "C:\\Program Files\\mysql-8.0.13"
datadir = "C:\\Users\\Toshinobu\\Desktop\\mysqlData"
#tmpdir = "C:\\Program Files\\mysql-8.0.13\\temp"

# 文字コードを UTF-8 に指定
character_set_server = UTF8MB4

port = 3309
enable-named-pipe
socket = mypipe80

f:id:ts0818:20181123120538p:plain

で、再度試すもエラー。 

[Warning] [MY-010069] [Server] Failed to set up SSL because of the following SSL library error: SSL_CTX_set_default_verify_paths failed

support.oracle.com

Configure the SSL certification files to a different directory other than the data directory

Failed To Enable SSL with Error SSL_CTX_set_default_verify_paths on Windows

⇧  datadir に、証明書設定に関するファイルを置いてるとマズイらしい...ってMySQLが勝手にdatadirに作ってくれちゃうわけなんで...もはや、これ、バグじゃないの?

お金払ったら詳しい対処方法を教えてくれるらしい...んで、Bug reportしたらば、

 [23 Nov 10:27] Miguel Solorzano

We're sorry, but the bug system is not the appropriate forum for asking help on using MySQL products. Your problem is not the result of a bug.

Support on using our products is available both free in our forums at http://forums.mysql.com/ and for a reasonable fee direct from our skilled support engineers at http://www.mysql.com/support/

Thank you for your interest in MySQL.

https://support.oracle.com/knowledge/Oracle%20Database%20Products/2384231_1.html

⇧  結局、お金払ったら、対処方法公開って流れらしいし、その情報以外の対処方法が知りたかったんですがね...。そして、あくまでbugではないと。

勝手にdatadirに作成されるものを別ディレクトリに移さないと駄目ってプログラム的に破綻してる気が...。 

Oracle Database の時もそうだけど、Oracleってかなり適当?こんな適当でも、利用されるデータベースのシェアは、

news.mynavi.jp

⇧  相変わらず、No.1、No.2 となってるけど、徐々に利用率が減少傾向にあるらしい。ユーザーの気持ちが離れるのも分かる気がしますな。

とは言え、解決していかねばならんわけですが、とりあえず、datadir から別のディレクトリに移すという情報しかない...

移しますか...

f:id:ts0818:20181124112156p:plain

で、my.cnf のパスも変更で。

f:id:ts0818:20181124112646p:plain

で、駄目でしたけど...

f:id:ts0818:20181124112933p:plain

というか、MySQLのエラーログにも、Windowsのイベントビューアの『管理イベント』にも何も表示されなくなったんだが...状態が悪化してますが ...と思ったら、エラーログが、新しく『"C:¥Users¥Toshinobu¥Desktop¥mysqlSSL¥Toshinobu-PC.err"』に作成されていたという...MySQLよく分からんです...

2018-11-24T02:36:14.923998Z 0 [System] [MY-010910] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.
2018-11-24T02:40:27.900005Z 0 [System] [MY-010116] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe (mysqld 8.0.13) starting as process 252
2018-11-24T02:40:27.913195Z 1 [ERROR] [MY-011011] [Server] Failed to find valid data directory.
2018-11-24T02:40:27.913755Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-11-24T02:40:27.914148Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-11-24T02:40:27.915334Z 0 [System] [MY-010910] [Server] C:\Program Files\mysql-8.0.13\bin\mysqld.exe: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.

datadir が見つからんと...すみません、my.cnf のdatadirも誤って変更してしまってました...元に戻します。

f:id:ts0818:20181124115617p:plain

で、どっちにしろ駄目でした...

f:id:ts0818:20181124120004p:plain

 

長々と付き合っていただいた皆々様、申し訳ございません、コマンドのタイピングミスでした... 

オプションのタイポでした...

誤:--default-file

"C:\Program Files\mysql-8.0.13\bin\mysqld.exe" --install mysqld8.0.13 --default-file="C:\Program Files\mysql-8.0.13\my.cnf"   

正:--defaults-file

"C:\Program Files\mysql-8.0.13\bin\mysqld.exe" --install mysqld8.0.13 --defaults-file="C:\Program Files\mysql-8.0.13\my.cnf"   

サービス自体は作成されてたんだけども、指定したmy.cnfでサービスが作成されていなかったためエラーになっていたという...

f:id:ts0818:20181124121859p:plain

3週間ぐらいハマってしまった... まぁ、こんな阿呆なミスをやらかすのはウッカリ八兵衛とわたしぐらいなものか...いや、ウッカリ八兵衛でもやらんかも...

なので、datadir に、証明書設定に関するファイルを配置したままで大丈夫です。(後日、datadirに配置したまま、サービスを作り直して、普通にサービス起動できました。Oracleの嘘つき~!

というか、MySQLSSL接続の説明に、

The server performs certificate and key file autodiscovery. If --ssl is enabled (possibly along with --ssl-cipher) and other --ssl-xxx options are not given to configure encrypted connections explicitly, the server attempts to enable support for encrypted connections automatically at startup:

  • If the server discovers valid certificate and key files named ca.pemserver-cert.pem, and server-key.pem in the data directory, it enables support for encrypted connections by clients. (The files need not have been generated automatically; what matters is that they have the indicated names and are valid.)

  • If the server does not find valid certificate and key files in the data directory, it continues executing but without support for encrypted connections.

MySQL :: MySQL 8.0 Reference Manual :: 6.4.1 Configuring MySQL to Use Encrypted Connections

って書いてあるから、datadir から移動したら駄目でしょ~に。適当すぎますぜ、Oracleさんよ~。 

 

気を取り直して、MySQLのサービスがインストールできたということで、次の工程へ。

 

WordPressをダウンロード

で、データベースの準備ができたので、WordPressをインストールしていこうというわけなんだけども、Laravel との連携を意識する場合は、Laravelのプロジェクトと同じ階層にインストールするのが良いらしい。

soudan.hatenablog.jp

⇧  上記サイト様を参考にさせていただきました。

 

自分は、いま、Laravelをこんな感じでインストールしてました。

f:id:ts0818:20181124125243p:plain

なので、WordPressを、『C:¥Users¥Toshinobu¥Desktop¥php_project』に配置していこうと思います。

WordPressは、WP-CLIっていうコマンドラインツールを使ってインストールするのが良いらしい?、一応、 

WP-CLI is the official command line tool for interacting with and managing your WordPress sites.

https://make.wordpress.org/cli/handbook/installing/

⇧ 公式サイトである、wordpress.org に説明が。

 Windowsの場合は、

  • Composerを使ってインストール
  • wp-cli.pharをダウンロードして適当なディレクトリに配置

のどちらかで導入するのが推奨されてるらしい。どちらの場合も「wp.bat」が配置されているディレクトリまでのパスを環境変数に追加すれば、「wp」というコマンドで実行できるようになるらしい。

とりあえず、Composerで、WP-CLIをインストールで。自分の場合、PHP、Composerのパスを環境変数を通してないので、実行したコマンドが公式のもと異なってますが、公式のコマンドを載っけときます。

composer create-project wp-cli/wp-cli --prefer-source

f:id:ts0818:20181124135253p:plain

で、エラーになると...

f:id:ts0818:20181124141404p:plain

何だかな~...どこもかしこも公式の説明が足りんのでは?

github.com

⇧  上記サイト様によりますと、Windows特有の問題らしい...

wordpress.orgの公式の説明通りでできないってことになりますかね、もういい加減にしてくれって感じです。

This fix also helps to improve the first impression of Mautic in 2 situations.

  1. Windows Developers installing Mautic for the first time
  2. Running composer install / update using the Release zip. (folders missing)

In both these situations, at the end of the process there is an error because the current line only works in a nix environment!

cp ./build/hooks/pre-commit ./.git/hooks/pre-commit

Fix for php-cs-fixer pre-commit issue when running Windows by MarkLL · Pull Request #3157 · mautic/mautic · GitHub

何でも、「nix環境」でしか動作しないスクリプトの存在が、Windows環境でエラーになる原因なんだとか...公式の説明にそんな記載が一切ないんですが...

で、1の解決方法は説明してくれてるんですが、2のほう、何の説明もない...そもそも「Mautic」とか知らんし、使う予定無いから。

 

申し訳ない、プロジェクト内にインストールする場合は、プロジェクト内のcomopser.jsonに、設定とスクリプトを記述してって感じで、Windows環境ではできないらしい。(擬似的なUnix環境を構築すればいけますが、つまり、bashとかのシェルが使えれば。)

なので、一旦、プロジェクト内に作成されてしまった「C:¥Users¥Toshinobu¥Desktop¥php_project¥wp-cli」は削除で。プロジェクト外でWP-CLIをインストールしていく感じになるようです。今回は、デスクトップにインストールで。

f:id:ts0818:20181124162857p:plain

f:id:ts0818:20181124162740p:plain

⇧  というか、どっちにしろエラーやんけ~!WindowsほんとうにUnix系と相性悪すぎでしょ!

っていうか、WindowsでComposerってまったく使えないんですが...パッケージ管理まったく機能してないけど...PHPがディスられる要素が増えてしまったではないですか...

というわけで、一旦、作成されたディレクトリの中身を全削除で。

f:id:ts0818:20181124170434p:plain

で、curl コマンドで、「wp-cli.phar」を「C:¥Users¥Toshinobu¥Desktop¥wp-cli」にインストールします。

cd [wp-cli.pharを配置したいディレクトリ]
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

f:id:ts0818:20181124170933p:plain 

f:id:ts0818:20181124171046p:plain

で、バッチファイルを作成。

f:id:ts0818:20181124194343p:plain

バッチファイルを適当なテキストエディターで編集。

f:id:ts0818:20181124194538p:plain

@ECHO OFF
"[使用したいphp.exeが配置されてるディレクトリまでのパス]\php.exe" ^
"[使用したいwp-cli.pharが配置されてるディレクトリまでのパス]\wp-cli.phar" %*

f:id:ts0818:20181124195417p:plain

一時的にパスを環境変数に追加します。(永続的に追加の場合は、setx で。) 

set Path="%Path%;[wp-cli.pharのは位置されたディレクトリまでのパス]"

f:id:ts0818:20181124205808p:plain

⇧  はい、パスが通りました。

というわけで、WordPressをインストールしてみます。

wp core download --locale=ja --path="[インストールしたい場所]\[適当なディレクトリ名]"

f:id:ts0818:20181124220848p:plain

これで、配置ができましたが、インストールはまだされていません。指定したディレクトリが作成され、

f:id:ts0818:20181124221201p:plain

その中に、WordPressで必要なファイルが一式配置されています。

f:id:ts0818:20181124221354p:plain

WordPressをインストールするには、データベースが必要です。 (WordPressがインストールされる時に、テーブルが作成されるため、空のデータベースが必要)

ということで、MySQLにログインし、WordPress用のデータベースと、それを操作するユーザーを作成します。

f:id:ts0818:20181124223636p:plain

⇧  MySQLに、ログイン出来なくなってるぜよ...

yoku0825.blogspot.com

⇧ 上記サイト様によりますと、MySQL 8.0 からSSL導入した場合、「caching_sha2_password」というプラグインが適用されているらしく、一度は、SSL接続を成功させないとマズイらしい。

従来の「mysql_native_password」というプラグインに切り替えるという方法もあるらしいけど、MySQL的にはあんまり宜しくないらしい、ですが、WP-CLIというかPHPが、「caching_sha2_password」に対応していないらしい....

 

PHP: MySQL (PDO) - Manual

MySQL 8

When running a PHP version before 7.1.16, or PHP 7.2 before 7.2.4, set MySQL 8 Server's default password plugin to mysql_native_password or else you will see errors similar to The server requested authentication method unknown to the client [caching_sha2_password] even when caching_sha2_password is not used.

This is because MySQL 8 defaults to caching_sha2_password, a plugin that is not recognized by the older PHP (mysqlnd) releases. Instead, change it by setting default_authentication_plugin=mysql_native_password in my.cnf. The caching_sha2_password plugin will be supported in a future PHP release. In the meantime, the mysql_xdevapi extension does support it.

⇧  mysql_xdevapi という拡張機能を導入すれば、「caching_sha2_password」を使うことはできるらしい。

導入してみますか。

PHP拡張機能については、PECLPHP Extension Community Library)というところが管理してるらしい。

PECL(ピクル、PHP Extension Community Library)は、PHPで利用できる拡張ライブラリ(パッケージ)を提供しているサービス。

PECLで提供されるライブラリはCで記述されているため、PHPで記述されたPEARのライブラリよりも高速に動作する。PECLにより提供されるライブラリはPHPの拡張モジュールとしてインストールされる。一方で、PEARライブラリはPHPのバージョンアップに伴う再インストールが原則として不要なのに対し、PECL拡張モジュールはPHP内部のAPIに依存する部分があるため、PHPのバージョンアップに伴いAPIが変更された場合は再コンパイルを必要とする。

PECLのインストール用には、PEAR同様に「pecl」コマンドが提供されている。インストール方法もほぼPEARと同じだが、インストール後に設定ファイル(php.ini)の「extension」でインストールしたモジュールを指定する必要がある点が異なる。なおWindows版では、手動でphp.iniを修正して、あらかじめコンパイル済みのPECL DLLを組み込むのが一般的な方法である。

PECL - Wikipedia

ということで、

https://pecl.php.net/package/mysql_xdevapi にアクセス。

f:id:ts0818:20181125100522p:plain

⇧  「Downloads」の「DLL」をクリック。今回は、8.0.13 で。

PHP 7.2 を使っているので、「7.2 Thread Safe (TS) x86」ってのを。

f:id:ts0818:20181125101754p:plain

ダウンロードしたzipの中で、拡張子が「.dll」のファイルを、利用したいphp.exeの配置されたディレクトリの中にある「ext」とうディレクトリに配置するらしい。

f:id:ts0818:20181125102757p:plain

配置されました。

f:id:ts0818:20181125102920p:plain

そしたらば、 「php.ini」を編集して、拡張機能を有効化します。

f:id:ts0818:20181125103054p:plain

記述がないので、新たに追加の方向で。

f:id:ts0818:20181125104417p:plain

f:id:ts0818:20181125104521p:plain

で、MySQLにログイン...出来んやないか~い!

f:id:ts0818:20181125163907p:plain

f:id:ts0818:20181125163109p:plain

VERIFY_CA か、VERIFY_IDENTITY を使えって...

使いましたけど、駄目ですやん...

f:id:ts0818:20181125162942p:plain

f:id:ts0818:20181125163333p:plain

情報が少なすぎるので、

debug 用のファイルを利用できるようにしてみます。

web.plus-idea.net

⇧  上記サイト様によりますと、MySQLの設定ファイルに追記するらしい。

f:id:ts0818:20181125184537p:plain

⇧  「C:\Program Files\mysql-8.0.13\log」ってディレクトリを作成しときます。

で、MySQLのサービスを再起動し、

f:id:ts0818:20181125184637p:plain

再び、接続を試みると、

f:id:ts0818:20181125184819p:plain

クエリの内容に関するログファイルができているという。

f:id:ts0818:20181125184910p:plain

ログの中身を見たけど、有益な情報が無いと...

エラーログで表示されたポートを指定してみるも、エラー。

f:id:ts0818:20181125185031p:plain

 

なんか、「caching_sha2_password」は諦めたほうが良さげですかね...

ちょっと、しばし、調査します...

今回はこのへんで。