バックアップ
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