|||||||||||||||||||||

なんぶ電子

- 更新: 

MySQL8をzipファイルからインストール

MySQLサービス

最近ではMariaDBを使っていて、しばらくMySQLに触れていませんでしたが、気づけばメジャーバージョンが8になっていたのでWindows環境にインストールしてみたいと思います。

バージョン5の時にメモしておいたzipファイルからのインストールの方法も通用しなくなっているようだったので、 MySQL:「2.3.4 noinstall ZIP アーカイブを使用した Microsoft Windows への MySQL のインストール」を参考に進めていきたいと思います。

ダウンロード

バイナリのダウンロードは、トップページから「ダウンロード」、「MySQL Community (GPL) Downloads」、「MySQL Community Server」とページを進めていきます。

インストーラーが必要な場合は「MySQL Community Server」ではなく「MySQL Installer for Windows」の方を選択してください。

ダウンロード時のユーザーログイン/登録が下段のNo Thanksからスキップできるのは以前と変わらずでした。

ダウンロードしたら、展開して配置します。ここでは、mysql-8とリネームしてd:¥に配置しました(d:¥mysql-8)。

Program Files等管理権限が必要な場所に持っていくと、設定ファイル編集時に手間がかかります。設定が安定するまでは一時ファイルを利用するのもいいかもしれません。

my.ini(オプションファイル)の作成

次に設定ファイルを作成します。Windows環境ではmy.iniという名前になります。

d:¥mysql-8にmy.iniファイルを作成して次のように記述します。下線部は自身が設定した場所に合わせて変更してください。

フォルダを指定する際の区切りは¥をエスケープした¥¥という形を使うか/を利用します。

my.ini

[mysqld]
# ルートフォルダ
basedir=D:/mysql-8
# データフォルダ
datadir=D:/mysql-8/data
# エラーログファイル名
log-error="mysql-error.log"

データフォルダの作成と初期化

先ほどmy.iniにデータフォルダの場所を記述しましたが、このフォルダはデフォルトでは存在しませんので作成します。ちなみに、データフォルダの場所はmysqlが書き込める場所ならどこでもいいです。

フォルダを作成したら初期化します。

ターミナル(コマンドプロンプトやPower Shell)で次のように操作します。ここではPower Shellを使っています。

PS >cd D:¥mysql-8

(コマンドプロンプトの場合は cd /d とする必要があります)

PS >bin¥mysqld --initialize --user=mysql

するとdataフォルダの中にエラーログファイル名として指定したファイルが出力されるので、テキストエディタで開きます。するとそこに初期パスワードが出力されていますのでメモします。

data¥mysql-error.log

2022-06-12T01:56:46.032459Z 0 [System] [MY-013169] [Server] D:¥mysql-8¥bin¥mysqld.exe (mysqld 8.0.29) initializing of server in progress as process 2340
2022-06-12T01:56:46.125578Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-06-12T01:56:58.800353Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-06-12T01:57:07.723893Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: b6hxCrlTZ2.u

初回起動とrootパスワードの設定

MySQLサーバーを起動します。初回起動時はWindowsのファイアウォールが反応すると思いますが、許可します。

コマンドを実行するとプロンプトは戻ってきませんが、それで正常です。逆に、終了してしまうようなら何かしらのエラーが発生していると考えられます。

ここでは--consoleオプションをつけています。通常下のようなメッセージはすべてエラーログに出力されます。設定が安定していない段階では、ファイルを開かずに状態を判定できるので便利です。

PS >cd D:¥mysql-8
PS >bin¥mysqld --console
2022-06-12T02:12:02.682000Z 0 [System] [MY-010116] [Server] D:¥mysql-8¥bin¥mysqld.exe (mysqld 8.0.29) starting as process 7856
2022-06-12T02:12:02.752270Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-06-12T02:12:04.613757Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-06-12T02:12:05.714250Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
2022-06-12T02:12:05.812422Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
2022-06-12T02:12:08.200750Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2022-06-12T02:12:08.201331Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2022-06-12T02:12:13.150110Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060
2022-06-12T02:12:13.150515Z 0 [System] [MY-010931] [Server] D:¥mysql-8¥bin¥mysqld.exe: ready for connections. Version: '8.0.29'  socket: ''  port: 3306  MySQL Community Server - GPL.

これでサーバーが起動しました。ここへクライアントから接続したいのですが、サーバーはプロンプトが戻ってきませんので、もうひとつターミナルを起動します。

クライアント用のコマンドはサーバー側と一文字違いの「mysql」です。ログイン時に、さきほどメモしておいたパスワードを使います。

パスワードが受けいらられ、プロンプトがmysql>となればログインは成功です。

PS >cd D:¥mysql-8
PS >bin¥mysql -u root -p
Enter password: *******

Welcome to the MySQL monitor.  Commands end with ; or ¥g.
Your MySQL connection id is 8
Server version: 8.0.29

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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>

rootのパスワードを仮のパスワードから変更します。rootは管理者用のユーザーになりますので、パスワードは厳重に管理しておきましょう。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

ちなみに@localhostの部分ですが、これはlocalhostからのアクセスを指定しています。rootユーザーのログインはローカルホスト(MySQLが起動しているサーバー)からしか許可しないケースが多いと思いますが、別のIPからのアクセスを許可したい場合は次のようにします。

mysql> CREATE USER 'root'@'192.168.1.1' IDENTIFIED BY 'root-password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.1';

新しいユーザーを作成して、GRANT文で権限を与えています。

rootというユーザー名はすでにいるのにCREATEするのに若干の違和感を覚えますが、MySQLではユーザー名と接続元がセットで識別されていると考えるとわかりやすいかもしれません。

GRANTで与えた権限を外すにはGRANTの部分をREVOKE、TOの部分をFROMにします。

また、接続元のIPは「192.168.1.0/24」等ネットワークにしたり、「%」のワイルドカードを使うこともできます。

my.iniサンプル

筆者の場合他で稼働中のMariaDBの設定を参考に次のようにmy.iniを構成しました。

設定ファイル内のキー名称では-と_の間は互換性があり、どちらを使っても問題ありません。ただし、値ではそのルールは適用されないので utf8mb4_general_ciはアンダーバーにしておく必要があります。

またskip-name-resolveのエントリーを入れると、クライアントでの接続時にlocalhostとしてアクセスしていたものが127.0.0.1またはIPv6におけるローカルホストである::1としてアクセスするようになります。root@localhostとroot@127.0.0.1は管理上別のユーザーとみなされるようで、127.0.0.1に対するパスワードを設定していない場合アクセスできなくなってしまうので注意してください。その場合は、一度skip-name-resolveをコメントアウトしてサーバーを再起動させれば元通り接続できますので、127.0.0.1に対しての設定をします。

my.ini

[mysqld]
# ルートフォルダ
basedir=D:/mysql-8
# データフォルダ
datadir=D:/mysql-8/data
# エラーログファイル名
log-error="mysql-error.log"

# (Other) Basic Settings

# IPv4だけにしたい場合はbind-addressを0.0.0.0にします。
# IPv6を含んだすべてを受け入れる場合はコメントアウトするか*とします。
# bind-addressは,で区切って複数の指定も可能です
bind-address=0.0.0.0

port = 3306
#skip-name-resolve

# Fine Tuning
key-buffer-size = 16M
max-allowed-packet = 16M
thread-stack = 192K
thread-cache-size = 8

# Log
slow-query-log-file = D:/mysql-8/data/slow-query.log
long-query-time = 10

# InnoDB
default-storage-engine=InnoDB
innodb-data-home-dir = D:/mysql-8/data/
innodb-data-file-path = ibdata1:10M:autoextend
innodb-log-group-home-dir = D:/mysql-8/data/
innodb-buffer-pool-size = 512M
innodb-log-file-size =128M
innodb-log-buffer-size=256M
innodb-flush-log-at-trx-commit = 1
innodb-lock-wait-timeout = 50
innodb-file-per-table = 1

# Character set
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

現在の設定や設定可能なオプションを表示するには「mysqld --verbose --help」とすると表示されます。

サービス化

MSIインストーラーを利用した場合、MySQLはサービスとしてWindows開始時に起動されるようになると思います。それと同様にサービスとしたい場合は、「mysqld --install」とします。この時のターミナルは管理者権限で起動しておく必要があります。デフォルトだと「MySQL」という名前でサービスに登録されます。任意に名前を付けたい場合は--installの後に名前を設定します。

サービスを取り消したい場合は --removeとします。この時サービスは停止した状態でないといけません、また名前を付けてインストールした場合はremoveでもつけた名前を指定しなければいけません。

PS >cd D:¥mysql-8
(管理者権限が必要です)
PS >bin¥mysqld --install
...
PS >bin¥mysqld --remove
...

rootのパスワードを忘れた場合

rootのパスワードを忘れてしまった場合は、バージョン8ではB.3.3.2 root のパスワードをリセットする方法に従って次のようにします。

まず、MySQLサーバーを停止します。その後、任意の場所にパスワード変更のSQLコマンドを記述したファイルを作成します。ここではD:¥mysql-8¥resetpass.txtとして作成しました。

resetpass.txt

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password';

次に、mysqldに--init-fileオプションをつけその値にファイルのパスを指定して起動します。

PS >cd D:¥mysql-8
PS >bin¥mysqld --init-file=D:¥mysql-8¥resetpass.txt --console

これでパスワードがリセットされます。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告