自分用のメモです。
インストール
デフォルトで入っているmariadbを削除する
sudo yum remove mariadb* -y
# インジェクションがあるpostfixも消える
mysql8のリポジトリを設定する
sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
mysql8をインストールする
sudo yum install -y mysql-community-server
バージョンの確認
sudo mysqld --version
# /usr/sbin/mysqld Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)と表示されるはず
OSの再起動の設定
sudo systemctl enable mysqld.service
MySQL8.0 認証方式を変更
今後、作成するユーザーの認証方式を変更する
caching_sha2_password => mysql_native_password
sudo sed -i '$a default-authentication-plugin=mysql_native_password' /etc/my.cnf
sudo chown -R mysql /var/lib/mysql
サービスの開始
sudo systemctl restart mysqld.service
sudo systemctl status mysqld.service
下記のような出力がされる。(エラーになっていないことを確認する)
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Fri YYYY-MM-DD ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 2559 (mysqld)
Status: "SERVER_OPERATING"
CGroup: /system.slice/mysqld.service
└─2559 /usr/sbin/mysqld
localhost.localdomain systemd[1]: Starting MySQL Server...
localhost.localdomain systemd[1]: Started MySQL Server.
rootのパスワード変更
MySQLの初期パスワードはログに出力されるのでそれを取得する。
DB_PASSWORD=$(grep "A temporary password is generated" /var/log/mysqld.log | sed -s 's/.*root@localhost: //')
echo "mysql password "
echo ${DB_PASSWORD}
新しいパスワードの設定をする(2回目はエラーになる)
PDOがcching_sh2_passwordに対応していないのでmysql_native_passwordに変更する
NEW_DB_PASSWORD='PassWord!'
sudo mysql -uroot -p${DB_PASSWORD} --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${NEW_DB_PASSWORD}'; "
変更の確認。rootのpluginはmysql_native_passwordになっている
sudo mysql -u root -p${NEW_DB_PASSWORD} -e "select user,host,password_last_changed,plugin from mysql.user;"
その他の確認
文字コード確認 => filesystem dir以外がutf8mb4になること
sudo mysql -u root -p${NEW_DB_PASSWORD} -e "SHOW VARIABLES LIKE 'chara%'"
360日問題確認 => 0になること
sudo mysql -u root -p${NEW_DB_PASSWORD} -e "SELECT @@default_password_lifetime;"
phpのインストールされている場合は接続テストをおこなう
<?php
// 変数の初期化
$sql = null;
$res = null;
$dbh = null;
try {
// DBへ接続
$dbh = new PDO("mysql:host=127.0.0.1; dbname=mysql; charset=utf8", 'root', 'PassWord!');
// SQL作成
$sql = "select user,host,password_last_changed from,plugin mysql.user; ";
// SQL実行
$res = $dbh->query($sql);
// 取得したデータを出力
foreach( $res as $value ) {
echo "$value[user]:";
echo "$value[host]:";
echo "$value[password_last_changed]:";
echo "$value[plugin]<br>";
}
} catch(PDOException $e) {
echo $e->getMessage();
die();
}
// 接続を閉じる
$dbh = null;