LoginSignup
0
0

More than 1 year has passed since last update.

【mysql】mysql バックアップ リストア(5.7→8 照合順対応)

Last updated at Posted at 2022-07-28

バックアップ

mysqldump -u [ユーザ名] -p[パスワード] --routines --events [DB名] > [バックアップファイル名]
# ex)
mysqldump -u root -p --routines --events hoge > ./hoge.sql

MySQL v5.5からはデフォでストアドとイベントが出力されない。

オプション 説明
-p[パスワード] パスワード省略時は、後で入力要求される。
--routines ストアドを出力。(ストアドをバックアップしない場合は不要)
--events イベントを出力。(イベントをバックアップしない場合は不要)

リストア準備

リストア先のDBの作成

mysql -u [ユーザ名] -p -e "CREATE DATABASE [新しいDB名]";
# ex)
mysql -u root -p -e "CREATE DATABASE newhoge";

8系からデフォルトcollationが変わっている問題

8系からはデフォルトの照合順が utf8mb4_0900_ai_ci になっている。
utf8mb4_general_ci で運用している MySQL 5.7 からバックアップしたものを
8系の環境にリストアするには、DBのデフォルトの文字コードの照合順を
バックアップしたものに合わせる必要がある。

mysql -u [ユーザ名] -p -e "CREATE DATABASE [DB名] COLLATE utf8mb4_general_ci;"
# ex)
mysql -u root -p -e "CREATE DATABASE newhoge COLLATE utf8mb4_general_ci;"

できたDBを use して、以下のコマンドで確認ができる。

mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_general_ci   |
+--------------------------+----------------------+
1 row in set (0.00 sec)

リストア

mysql -u [ユーザ名] -p[パスワード] [リストア先DB名] < [バックアップファイル名]
# ex)
mysql -u root -p newhoge < ./hoge.sql

Node から MySQL8.0へ接続しようとするとエラー

Node.jsでMySQL 8.0へ接続しようとする時に、エラーが発生する。

ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

原因

MySQL8からパスワードの認証形式が変更されている。
しかしながら Nodeの mysql にはまだ実装されていないので接続エラーになる。

解決方法(認証方法を変更する。)

認証方法を「mysql_native_password」に変更する。

ALTER USER 'ユーザ名'@'ホスト名' IDENTIFIED WITH mysql_native_password BY 'パスワード'
# ex)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

パスワードが現在のポリシー要件を満たしていません

パスワードがポリシーに合っていないとエラーになる場合がある。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

ポリシーの確認

mysql> SHOW VARIABLES LIKE 'validate_password.%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
名前 変数名 現在の設定
パスワード長 length 8文字以上
大文字小文字 mixed_case_count 1文字以上
数字 number_count 1文字以上
ポリシー policy MEDIUM
記号 special_char_count 1文字以上
ポリシー値 制約
LOW 長さのみ
MEDIUM 長さ、数字、大文字小文字、記号
STRONG 長さ、数字、大文字小文字、記号、ディレクトリ、ファイル

ポリシーの変更

mysql> set global validate_password.policy = "LOW";
Query OK, 0 rows affected (0.00 sec)

制約文字数の変更

mysql> set global validate_password.special_char_count = 0;
Query OK, 0 rows affected (0.01 sec)

注意事項

オンラインで値を変更してもDBサーバが再起動するとデフォルトに戻ってしまう。
必要であれば my.cnf を修正して設定を変更しておく。

$ vi my.conf

# 下記の設定を追加・修正する

validate_password.policy=LOW
validate_password.length=4
validate_password.check_user_name=OFF
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0