Tag: MySQL8

目次

関連ページ

参考情報

設定

export/importでcollateが異なってしまう

  • mysqldumpによるexport時、create tableのcharsetがutf8mb4で、collateが指定していない場合、
  • import時にcollateがutf8mb4_0900_ai_ciになってしまう(collation-serverがutf8mb4_binでも)。
  • これはcharsetだけ指定されている場合、そのcharsetのデフォルトのcollateが指定されるというmysqlの仕様らしい。MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.1.3.3 テーブル文字セットおよび照合順序
  • これを避けるためには、charsettとcollateをcreate tableで明示しておいたほうがよいっぽい。

既存のテーブルのcollateを一括設定

  • mysql - How to convert all tables in database to one collation? - Stack Overflow
  • 以下のコマンドでcollateを変更するSQLを生成できる。以下をcollate.sqlとして保存。
    SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," COLLATE utf8mb4_bin;") AS ExecuteTheString
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA="mydb"
    AND TABLE_TYPE="BASE TABLE";
    
  • 以下のように実行してファイルに保存。
    mysql --skip-column-names < collate.sql > collate_change.sql
  • collate_change.sqlの内容を確認。。
    ALTER TABLE mydb.test_table COLLATE utf8mb4_bin;
    (...)
  • 実行。環境によって少し時間が必要かも。
    mysql < collate_change.sql

caching_sha2_password関連

  • 古いライブラリから認証できない場合がある(PHP 7.3以前。PHP 7.4は対応しているはずだがMacPortsから接続できない)。
  • もうしばらく安定するまでmysql_native_passwordに設定しておくほうが良いかも(2020/10/26(月)現在)。
  • MySQL8.0 認証方式を変更する(Laravel5) - Qiita

状態の確認

  • 以下のSQLで確認できる
    SELECT user, host, plugin FROM mysql.user;

新規ユーザーの認証方法を変更

  • /etc/my.cnfを変更。
    [mysqld]
    default_authentication_plugin=mysql_native_password

既存ユーザーの認証方法を変更

  • 以下のSQLで実行。
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';

トラブルシューティング

「grant all privileges」でエラー

unknown variable 'validate_password.policy=LOW'が表示される

リモートから接続できない

  • skip-networking、bind-addressの設定を確認する。以下はリモートアクセスを許可する設定。
    bind-address=0.0.0.0
    skip-networking=0
    
  • 現在の設定はこれで確認できる。
    $ mysql -b -e "SHOW GLOBAL VARIABLES like 'bind_address'"
  • それでもだめな場合ユーザー(rootなど)のアクセス許可がlocalhostに限定されているせいかもしれない。
    select user,host from mysql.user;
    | root             | localhost |
  • 以下で作成する。
    create user root@'%' identified by 'hogehoge';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

PHP 7.3から接続できない


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-11-15 (月) 14:28:31