自分用のメモです。
インストール
デフォルトで入っている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のインストールされている場合は接続テストをおこなう
<?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;