■ はじめに
* 2018/04/19に「MySQL 8.0.11 (GA版)」を正式リリースされたので、試してみる * なお、v5.7 のインストールについては、以下の関連記事を参照のこと。https://blogs.yahoo.co.jp/dk521123/36283180.html
補足:GAについて
* GA : General Availability=> 「正規版」ってこと => 「一般提供」「一般向け提供」 * 直訳で... + Availability = 「入手できること」「可用性」 + General Availability = 「一般に利用できる状態」(ついでに) RC : Release Candidate
=> 「出荷一歩前のリリース」ってこと => ベータ版よりもさらに製品版に近い * 直訳で... + Candidate = 「候補」 + Release Candidate = リリース候補
■ 主な変更
* トラブルにもなるので主な変更点を上げる* 大幅な性能向上(MySQL 5.7よりも最大2倍高速) * JSONデータに対応したNoSQL機能の搭載 * 地理情報の対応 * Unicode対応強化 * ロールによるユーザー権限
認証方式
* mysql_native_password から caching_sha2_password に変更 * 実際にインストールしていざ、HeidiSQLでアクセスしたら、エラーになった。 => 原因は、HeidiSQLがcaching_sha2_password に対応できてなかったから旧 MySQL Clientとの互換性のために...
■トラブル回避1 ~~~~~~~ ALTER USER 'admin'@'%' identified WITH mysql_native_password BY 'password'; ~~~~~~~ ■トラブル回避2 sudo vi /etc/my.cnf ~~~~~~~ default_authentication_plugin=mysql_native_password ~~~~~~~
デフォルト・キャラクタセット
* latin1(ascii相当)から utf8mb4 に変更
SET PASSWORD使用禁止
* SET PASSWORDが使えない ~~~~~~~~~ [x] SET PASSWORD FOR root@localhost=PASSWORD('password'); [o] ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; ~~~~~~~~~
■ インストール/初期設定
インストール
sudo yum -y localinstall http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm # MySQLのインストール sudo yum install -y mysql mysql-devel mysql-server # バージョン確認 mysql --version # 今回は「mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)」が表示 # 一旦、MySQLの起動し、エラーが発生しないことを確認し、停止する sudo systemctl start mysqld sudo systemctl status mysqld sudo systemctl stop mysqld
初期設定(MySQLの修正)
# 修正前のファイルをバックアップとして、とっておく sudo cp -p /etc/my.cnf /etc/my.cnf.orig # viなどでファイルを修正する sudo vi /etc/my.cnf ~~~ [mysqld] ・・・ # Add character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 default_authentication_plugin=mysql_native_password # パスワード制限をゆるゆるにする validate_password.length=4 validate_password.mixed_case_count=0 validate_password.number_count=0 validate_password.policy=0 validate_password.special_char_count=0 ~~~ # 意図した修正かどうかを最後に差分をとって確認する sudo diff /etc/my.cnf /etc/my.cnf.orig
■ rootの設定
[前提条件] MySQLを起動させておく(sudo systemctl start mysqld)# [1] /var/log/mysqld.log で、検索キーワード「temporary password」などで # 仮パスワード(以下の「****」部分)をメモるかコピーしておく sudo less /var/log/mysqld.log /temporary password 2018-08-07T14:27:06.815348Z 1 [Note] A temporary password is generated for root@localhost: **** # q で終了 # [2] 初期設定を行う mysql -u root -p # パスワードは[1]を入れる。 # 新しいパスワードを変更する ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES; SELECT Host, User, plugin FROM mysql.user;
■ アップデート
MySQL5.7 => MySQL8 の更新
# 古いMySQLを削除 sudo rpm -e mysql-community-release # MySQL8 をインストール sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm # MySQLの停止 sudo systemctl stop mysqld # MySQLのアップグレード sudo yum update mysql-server # MySQLの開始 sudo systemctl start mysqld # MySQLテーブルのアップグレード sudo mysql_upgrade -u root # MySQLのリスタート sudo systemctl restart mysqld # 確認 mysql --version
【トラブル】「Could not create the upgrade info」が表示
「mysql_upgrade -u root」を実行したら、以下の「エラー内容」が表示エラー内容
Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13解決案
# ルートで実行 sudo mysql_upgrade -u root
【補足】 基本コマンド
https://blogs.yahoo.co.jp/dk521123/36283180.htmlと同じ
MySQLの自動起動
sudo systemctl enable mysqld # enabledで表示されたら自動起動が有効になっている sudo systemctl is-enabled mysqld
MySQLの起動
# MySQLの起動 sudo systemctl start mysqld # MySQLの再起動 sudo systemctl restart mysqld # MySQLの停止 sudo systemctl stop mysqld
【任意設定】外部からアクセスするためにファイアウォールをあける
# ファイアウォールが有効か?(「active (running)」なら以下を実行) systemctl status firewalld sudo firewall-cmd --add-service=mysql --zone=public --permanent sudo firewall-cmd --reload
参考文献
http://gihyo.jp/dev/serial/01/oss-db-various-news/0033https://hit.hateblo.jp/entry/MYSQL/MYSQL8/SETTING
https://qiita.com/namahage1111/items/0529910b24136e08cad4