それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

USBハブをマグネットにして、作業デスクをスッキリさせる

USBハブをスッキリさせる

USBハブにあれこれ増設しています。作業用にノートPCとThinkCentre Tinyを使っているので、モニタ裏にPCを設置しているのでUSBのアクセス性が著しく悪いです。

USBハブを用いて使いやすい場所に引き出していますが、それも頻繁に使うわけでもないので、出っ放しだと邪魔になります。

USBハブをマグネット化

マグネットにして貼り付けてしまえば良いわけです。磁力により磁界が発生しデータが云々と思うかもしれませんが、その程度のノイズに左右されないために、0/1の2進数でビット転送をしているわけですし、省電力なので磁界など気にしても仕方がない。

ネオジムマグネットを用意します。

ダイソーやセリアで購入できます。

ボンドで貼り付けます。

量は適当です。ボンドのチューブ先を軽くつけるだけで大丈夫ですね。私の写真のは付けすぎですね。

乾くまで待ちます。

裏返しににしてその辺にくっつかないレベルまで乾燥させました。

利用したボンド

コニシ、ウルトラ多用途クリア

ExcelでOneDriveに保存したくない。(PC保存をデフォルトにする)

Excelでファイルの保存がとても手間

ExcelでCtrl-Sで保存するときが大変手間である。

初心者向けにしてるんだろうが、初心者を甘やかすゆえに、初心者にわかりにくいし、他のWindowsソフトウェアと大きく操作方法が異なることになり不便であろう。

OneDrive が表示される→邪魔じゃん?

これは実質は広告である。

OneDriveをレコメンドから消す

OneDriveは便利では有るが、作業中には邪魔でしか無い。 ファイルを送りたいなら同期機能を使えばいい。OneDrive内部のExceを編集するには、直接Chromeでひらけばいい。これは実質は広告である。削除しよう。どうしてもOneDriveに保存するなら保存ダイアログでOneDriveを選べばいいだけである、

保存先をPC(ローカル)に規定する

保存先は、通常の保存ダイアログで選ぶほうがキーボード操作もしやすく、矢印キーやALT+矢印キーで移動しやすい。

Officeサイン・インの状態を無視する。

せっかく設定しても、WEB側の設定が優先されては元も子もない。オフにしておく

保存ダイアログが表示される。

人によっては、Excelなどで従来どおりWindows共通の保存ダイアログが出てこないものだと勘違いしてる人がいらっしゃるが、ちゃんとあります。

Ctrl-Sで、名前をつけて保存にする

Ctrl-Sを押したとき「名前をつけて保存」(Windows共通の保存メニュー)が出てくるようにする。

以下の設定をすると、Ctrl-Sでファイル保存ダイアログになります。 エクセルの操作性はかなり改善される。無駄がなくなる。

ファイル保存ダイアログを常に表示する。

Backstage(メニューから)名前をつけて保存を呼び出す。

上記の設定をしてない場合に「保存ダイアログ」を呼び出したいとき、Excelではとても奥の方に配置っされている。

「保存→名前をつけて保存→PC→その他のオプション」と4ステップで保存する。とてもめんどくさい

さきほどの設定をONにすれば Ctr-S でいつでも通常の保存ダイアログになります。

Excelを通してPCに少し詳しくなろう

マイクロソフトは初心者を甘やかす。初心者を迷わないよう、いろいろな選択肢とその画面を目のつかないところに押し殺す。これは機会損失です。機会提供の視点から見て、これは初心者に優しくない。初心者にたくさんのオプションがあることを知らせ、自分が何を選んでいるのかも知らせてほしい。知らないまま使うというのも考えものでしょう。こういうことをやり、初心者を甘やかし、初心者を初心者のママで生活できるようにしてしまう。マイクロソフトは初心者をすぐ甘やかす。この結果が各種のマルウェア氾濫となり現れている。初心者を初心者のまま囲い込むからemotetのような初心者を釣るマルウェアに引っかかってしまうのだ。

クラウドを利用させて良いのか

クラウド・ストレージを利用させて良いのか、させないのか。これはPCの管理者(企業・個人)が各人の意思で決めることである。マイクロソフトが押し付けて良いものではない。保存先をOneDriveにしてそれ以外は見えないような選択肢にするのは流石に横暴ではないか。セキュリティ・ポリシーは各々が真剣に考えるべきでしょう。

企業ではGoogle Workspaceだったり他のクラウドストレージに使っていることも有るでしょう、押し売りによりユーザー周知の手間が増えます。マイクロソフトの行為は優越的地位の濫用に相当と判断しても過言ではないと思います。

このような初心を囲い込む押し付けには断固反対するべきです。

企業でPCを管理する立場にある人は、全体ポリシーでEXCELの共通設定として、通常のWindowsの保存ダイアログが出るように、設定流し込んでおきましょう。

OS提供企業が自社のソフトウェアを優先表示し、デフォルト動作に見せる広告行為は法規制も検討すべき段階にあると思います。

類似の広告行為としては、iOSiCloud photo や WindowsのOneDriveやOneNoteレコメンドや、AndroidGoogle Map、iOSSafari Keychainなどが挙げられます。とくにiOSの Keychains/iCloud photoは他OSや他アプリからアクセスが不可能で囲い込みです。注意しましょう。

jpg から pdf を作るときは img2pdf を使う

jpg から pdf を作るときは、img2pdf が無難

img2pdf は添付ファイルとして画像を処理してくれるみたいで、ファイルが変更されない。

magick の場合

imagemagick の conver でPDFを作ると。

convert 000.jpg magick.pdf
pdfimages -j  magick.pdf m

取り出した画像は少し変化している。

takuya@sample$ md5sum m-000.jpg 000.jpg
cb183e325b265d0cd985ae6bcf8a7f45  m-000.jpg
eeb3981fd491ad2dde29416db2144727  000.jpg

EXIFだけかと思ったら、画像全体を再エンコしてるっぽいので、オリジナルを含めたいときは不適切。

img2pdf の場合

pip でインストールする img2pdf コマンドを使った場合

img2pdf 000.jpg i2p.pdf
pdfimages -j  i2p.pdf i2p

ファイルが入れた通りに取り出せる。

takuya@sample$ md5sum 000.jpg i2p-000.jpg m-000.jpg
eeb3981fd491ad2dde29416db2144727  000.jpg
eeb3981fd491ad2dde29416db2144727  i2p-000.jpg
cb183e325b265d0cd985ae6bcf8a7f45  m-000.jpg

理由を詳しく考えるとめっちゃめんどくさいんで考えるのをやめた。 たぶん添付ファイルとして添付するときに、画像の色プロファイルをPDF標準に合わせて変換してるんだと思う。

参考資料

https://stackoverflow.com/questions/51909733/why-does-a-jpeg-embedded-into-a-pdf-render-slightly-differently-than-the-origina

python pip で libxml がエラーになった

対処

次の方法で強引に解決した。

export C_INCLUDE_PATH=\
/Applications/Xcode.app\
/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs\
/MacOSX.sdk/usr/include/libxml2:$C_INCLUDE_PATH

pipenv  run pip install lxml

理由は、あれだ。macOSのバージョンがうまく解決できないので、pyenv で作ったpythonが古い。

libxml とかコアなので、エラーになるとすごく焦る

とりあえず、インストールしちゃえば libxml 依存するパッケージ。例えばimg2pdf など

pipenv run img2pdf -h

などとちゃんと動く

p7zip の7z コマンドがSTDIN/STDOUTを部分的にしかサポートしてなかった。

STDIN/STDOUTで使いにくい7z コマンド

7z コマンドが最強だと思ってました。 7z はアップデートも頻繁にされているし、利用者も多い枯れているツールだと思いこんでました。

STDIN から読み込み

tar.gz を展開するときは次のようになりますよね。

cat sample.tgz |gunzip | 7z -si -ttar l 
cat sample.tgz |gunzip | 7z -si -ttar x 001.jpg -so > out.jpg

同じように 7z / zip が扱えるかというと。

STDIN でパイプすると出来ない

## zip / 7z
cat sample.zip | 7z -si -tzip  
cat sample.7z| 7z -si -t7z 

エラーになる。

ERROR:  : opening : E_NOTIMPL : Not implemented 

STDIN でリダイレクトすると出来ない。

7z -si l < sample.7z
7z -si l < sample.zip

stdin 使えない

tar 以外では、STDINが使えません。まじかよって感じです。だったら -t tar の形式指定オプションはなんのためにあるんだよって感じ。

p7zip 使いにくい・・・

公式マニュアルを読んでみると、STDINで想定してるのはtar だけっぽいぞ。

7z コマンドって微妙に使いにくいですね。

brew の p7zip はエラーになる。

Macで起きうる現象

mac で特定の形式を7z すると、めっちゃめんどくさくなるよ。

takuya@mac$ /usr/local/Cellar/p7zip/17.04/bin/7z x 'sample.rar' -so '001.jpg'
ERROR: Unsupported Method : 001.jpg

起きうる問題

問題は2つ

  • 特定の文字コードを解消できない
  • 特定のファイル形式がエラーになる。

文字コードのエラー

文字コードの指定が全くうまく動かない。cp932 の指定どころか、LANG指定がうまく動かず、全部UTF16で取り出されちゃう

ファイル形式のエラー

再現方法 ( brew 版 7z と rar など)

brew install p7zip
/usr/local/Cellar/p7zip/17.04/bin/7z x 'sample.rar' 

起こりうるエラー

ERROR: Unsupported Method : 001.txt

回避策

https://www.7-zip.org/download.html から 7zz のmac対応版を持ってくる。

他にもいろいろと、7z で問題が出るので、できる限り、homebrew の p7zip は避けたほうが無難っぽい

7z で tar.gz/tgz からファイルを取り出す

7z で tgz を扱うには、パイプする

STDOUT/STDINを駆使してパイプする

7z -so x a.tgz  | 7z l -aoa -ttar -si

tgz はネスト扱い

tgz は tar.gz の名前通り、ネスト扱いです。

$ 7z -ba -r l a.tgz
2022-06-17 17:32:20 .....       276480       259342  a.tar

なので、コマンドをパイプします。

7z -so x a.tgz  | 7z l -ba -aoa -ttar -si
2021-03-02 00:30:30 .....       266367       266752  aaaaaaaa.jpg
2021-08-23 08:38:44 .....           54          512  md5sum.txt

パイプするときに、-ttar でtar ファイルを明示しないといけない。めんどくさいですね。

取り出す

一覧が見れたら、取り出します。

7z -so x a.tgz  | 7z x -oOUTPUT_DIR -aoa -ttar -si

ちょっと冗長ですよね。

RuntimeException: SplFileInfo::getSize(): stat failed for php://temp となり、getSize出来ない

php8.1 までで起こる

SplFileInfo / SplFileObject / SplTempFileObject で php://memory php://stream を使うとエラーになる。

<?php
    $sf= new \SplTempFileObject();
    $sf->fwrite($ret);
    $sf->getSize(); // =>Error
    

対応

fstat は動くのでそっちを使う。

<?php
    $sf= new \SplTempFileObject();
    $sf->fwrite($ret);
    $sf->fstat()['size']; // => ok
    

こんなの気づかないよねぇ。

すでにパッチは投稿されていた

https://github.com/php/php-src/pull/4186

パット見だとClosedになっているので、そのうち使えるようになると思う。

exiftoolで写真をフォルダ(月日・年月・カメラ)に入れる。

写真の整理はexiftoolが確実です。

WindowsだとVector窓の杜にソフトウェアが紹介されていますが、あれはうまく動きません。

Exifの名前でフォルダに仕分けられるの

カメラで仕分けたり、日付で仕分けたりできる

写真を「年・月」に仕分ける。

写真を年月のフォルダに仕分ける。

exiftool '-Directory < DatetimeOriginal' -d '%Y/%m' *.jpg

exiftoolのインストール

sudo apt install exiftool

exiftool のアンインストール(ubuntu)

## ubuntu の場合のアンインストール
sudo apt purge libimage-exiftool-perl

実行例

このように散らばったファイルがあるとき

takuya@:sample$ ls
2022          IMG_6824.JPG  IMG_6827.JPG   IMG_6831.WEBP  IMG_6839.MOV  IMG_6844.PNG
IMG_6821.MOV  IMG_6825.JPG  IMG_6828.JPG   IMG_6833.JPG   IMG_6841.PNG  IMG_6856.PNG
IMG_6823.JPG  IMG_6826.JPG  IMG_6830.WEBP  IMG_6834.JPG   IMG_6842.PNG  IMG_6857.PNG

コマンドを実行すると

exiftool '-Directory < DatetimeOriginal' -d '%Y/%m' *.jpg

次のように、YYYY/MMのフォルダに仕分けられる。

takuya@:sample$ find
.
./IMG_6856.PNG
./IMG_6823.JPG
./IMG_6825.JPG
./IMG_6830.WEBP
./2022
./2022/06
./2022/06/IMG_6859.jpg
./2022/06/IMG_6858.jpg
./2022/06/IMG_6838.jpg
./2022/06/IMG_6848.jpg
./2022/06/IMG_6854.jpg
./2022/06/IMG_6845.jpg
./2022/06/IMG_6843.jpg
./2022/06/IMG_6820.jpg

DatetimeOriginal がないJPGファイルは、iPhoneスマートフォンの場合、スクショだったりWEBから保存したものだったり、アプリで編集(モザイク加工)したもの、誰かから送られた写真を保存したもの(LINEやFBなどSNS系はプライバシーのためExif削除される)だったりするので、DatetimeOriginalがあるものが自分の写真だとはっきりわかるので便利だったりする。

カメラで仕分ける例

たとえば、ExifのModelには、カメラの名前が入ってるので、そっれを使って仕分けたり

exiftool '-Directory < Model'  *.jpg

exif の値使って仕分けるの便利

exif のタグなら仕分けに使えるので便利ですね。

GPSでいい感じに絞れたらいいんだろうけど、調べたけど厳しそうだった。

関連資料

その他、exiftool に関する記事です。参考にしてください

https://takuya-1st.hatenablog.jp/search?q=exiftool

参考資料

  • man exiftool

exiftoolで写真の日付を修正する

写真の日付を修正したい

写真ファイルをバックアップしたら、ファイルの更新日時が撮影日にならない。

ファイルシステム上のタイムスタンプも撮影日にしておくと、エクスプローラーやFinderで見るときにべんりなので、写真のファイル更新日時を撮影日合わせたい時がある。

exiftool でファイル更新日時=撮影日にする

exiftool  '-FileModifyDate<DatetimeOriginal' IMG_6862.jpg

一括で変更する

ワイルドカードを使えば、対象ファイルをまとめて更新できる

exiftool  '-FileModifyDate<DatetimeOriginal' *.jpg

_original ファイル

exiftool でファイルを更新すると、_original のバックアップファイルが作られることがある。

ファイルをスクリプトで処理していると バックアップファイルも書き換えにいき、バックアップのバックアップ( IMG_6862.jpgIMG_6862.jpg_originalIMG_6862.jpg_original_original ) が作成されてしまうので、自動化処理には注意が必要だ。

バックアップを自動で削除するより、ちゃんと手作業でコマンドを打ち込みファイルの修正前後をしっかり確認したほうが無難だと思う。

_original ファイルを元に戻す には rename が便利。

rename  's/_original//' *

日時の確認

日時の確認は、次のようになる。

exiftool -s -filemodifydate -datetimeoriginal IMG_6862.jpg

まとめてやるときは、-Tをつけると楽

exiftool -T -s -filemodifydate -datetimeoriginal *.jpg

関連資料

その他、exiftool に関する記事です。参考にしてください

https://takuya-1st.hatenablog.jp/search?q=exiftool

参考資料

  • man exiftool

exiftool で日付・時刻の確認する。

exiftool でタイムスタンプを確認する

exif に設定された写真の日時・タイムスタンプを確認する。

exiftool -time:all -s IMG_6862.jpg

次のような出力が得られる。

takuya@mac:~ $ exiftool -time:all -s IMG_6862.jpg
FileModifyDate                  : 2022:06:07 22:59:13+09:00
FileAccessDate                  : 2022:06:16 00:47:35+09:00
FileInodeChangeDate             : 2022:06:13 20:02:41+09:00
ModifyDate                      : 2022:06:07 22:58:57
DateTimeOriginal                : 2022:06:07 22:58:57
CreateDate                      : 2022:06:07 22:58:57
OffsetTime                      : +09:00
OffsetTimeOriginal              : +09:00
OffsetTimeDigitized             : +09:00
SubSecTimeOriginal              : 301
SubSecTimeDigitized             : 301
ProfileDateTime                 : 2017:07:07 13:22:32
SubSecCreateDate                : 2022:06:07 22:58:57.301+09:00
SubSecDateTimeOriginal          : 2022:06:07 22:58:57.301+09:00
SubSecModifyDate                : 2022:06:07 22:58:57+09:00

ただし、FileModifyDate・FileInodeChangeDate・FileAccessDateについてはファイルシステムから取得した値で、写真ファイルに埋め込まれた値ではない。

名前に空白を入れない -s

空白を入れるとコマンドから再利用しにくいので -s を使って、出力をCamelCaseにしている。

-s を点けない場合

-sなしでは、次のような出力になった

exiftool -time:all IMG_6862.jpg

名前に空白が含まれる。

File Modification Date/Time     : 2022:06:07 22:59:13+09:00
File Access Date/Time           : 2022:06:16 00:47:35+09:00
File Inode Change Date/Time     : 2022:06:13 20:02:41+09:00
Modify Date                     : 2022:06:07 22:58:57
Date/Time Original              : 2022:06:07 22:58:57
Create Date                     : 2022:06:07 22:58:57
Offset Time                     : +09:00
Offset Time Original            : +09:00
Offset Time Digitized           : +09:00
Sub Sec Time Original           : 301
Sub Sec Time Digitized          : 301
Profile Date Time               : 2017:07:07 13:22:32
Create Date                     : 2022:06:07 22:58:57.301+09:00
Date/Time Original              : 2022:06:07 22:58:57.301+09:00
Modify Date                     : 2022:06:07 22:58:57+09:00

-a をつけると重複を取れる

Exifはタグで書き込まれているだけなので、同じキーに複数回の値を設定することができる。編集ソフトを使って冗長に何度も書き込まれている場合もあるので、それを確認する。

exiftool -a -s -time:all IMG_6862.jpg

上記のコマンドだと、DatetimeOriginalやCreateDateが何回も出力されることがある。EXIF編集を追記追記で適当にやった場合にそのようなミスがわかるので便利。

特に写真の日付は撮影者から人手を経るたびに何らかの編集ソフトでうっかり同じKEY-VAULEを書き加えてしまうことがあるので、日付がおかしいなと思ったら -a でチェックするのも手だ。

特定の値(撮影日)だけを見たい

撮影日だけ見たいとき

exiftool -datetimeoriginal -s *.jpg

作成日だけ見たいとき

exiftool -creatdate -s *.jpg

ファイルシステム上の更新日を見たいとき

exiftool -FileModifyDate -s *.jpg

複数を指定もできる。

複数個書いて、見たいものだけ指定するのもありだ

exiftool -FileModifyDate -DatetimeOriginal -s *.jpg

mov の場合

mov ファイルはQuicktimeなので、createDateでなくCreationDateで入ってることがある。

exiftool -CreationTime -s *.jpg

参考資料

  • man exiftool

exiftool でカラム表示で撮影日とファイル名を一覧する

exiftoolでファイル名とカラム表示したい

ls -alt 的な感じでexiftools で写真のEXIFデータを見たい

-T でカラム表示

exiftool -T にすると、カラム(タブ区切り)で表示できる

ファイル名を表示したい

exiftool -filename でファイル名を表示できる

写真のタイムスタンプ(日時)を表示したい

DateTimeOriginal がシャッターを押した日付になる。

exiftool -DatetimeOriginal

lsコマンドみたいに撮影時刻を見る

すべてまとめて、次のようにコマンドを作ることができる。

takuya@mac:~/Photos/2022/06$ exiftool -T -filename  -datetimeoriginal *.jpg
IMG_6820.jpg    2022:06:01 01:22:12
IMG_6829.jpg    2022:06:01 19:55:41
IMG_6832.jpg    2022:06:02 14:44:53
IMG_6836.jpg    2022:06:03 14:32:40
IMG_6837.jpg    2022:06:04 15:48:09
IMG_6838.jpg    2022:06:04 15:48:11
IMG_6840.jpg    2022:06:04 23:12:00

通常のexiftoolの場合

カラム(縦方法)に1行に表示しない場合は、複数行に記載されてしまい、コマンドから非常に扱いにくい。

takuya@mac:~/Photos/2022/06$ exiftool -s -filename -datetimeoriginal IMG_6838.jpg
======== IMG_6860.jpg
FileName                        : IMG_6860.jpg
DateTimeOriginal                : 2022:06:07 22:58:26
======== IMG_6861.jpg
FileName                        : IMG_6861.jpg
DateTimeOriginal                : 2022:06:07 22:58:40
======== IMG_6862.jpg
FileName                        : IMG_6862.jpg
DateTimeOriginal                : 2022:06:07 22:58:57
   22 image files read

ファイルの生成日・更新日・撮影日を一覧する

exiftool -T -Filename  -DatetimeOriginal -CreateDate -FileModifyDate -file *.jpg 

このコマンドは大文字小文字を区別しないようですね。

exiftool -T -filename  -datetimeOriginal -createDate -filemodifydate -file *.jpg 

このコマンドを使って、ファイル更新日と撮影日がずれているファイルを見つけたり、撮影日が未設定のファイルを探す事ができる。便利

xargs と組み合わせて処理を高速化

xargs のマルチプロセス機能を組み合わせて、限界までCPUを使って演算を高速化する。

ls *.jpg | xargs -P10 -I@ exiftool -T -filename  -datetimeoriginal @

写真フォルダには数千枚のファイルがあるので、xargs と組み合わせるとすこし速いかもしれない。

ただし、プロセス生成のオーバーヘッドがあるのでexiftool に複数ファイルを引数に渡すのと比べて、遅くなる場合も多い。

exiftool コマンドのインストール

sudo apt install libimage-exiftool-perl

参考資料

  • man exiftool

journald がログエラーで無限ループになってサーバーが応答なしになった。journald の上限を決める

サーバーの容量不足で無限ループになった

知らない間に、サーバーにDockerのキャッシュを溜めすぎて、残容量が底をついた。

気づかずに発生した

journald が無限ループ

journld は閾値をもっていて、一定量以上のログを書き込みしないはずだが、容量不足なってエラーになり、エラーログを書き込もうとしてまたエラー、そのエラーを書き込もうとして更にエラーになった

journald の設定を明示的に書いておくことにした。

自動設定ではjournald は無限ループになってしまうことがわかったので。 /etc/systemd/journald.conf に設定を明示することにした。

/etc/systemd/journald.conf

[Journal]
SyncIntervalSec=10m
RuntimeMaxUse=5G
RuntimeKeepFree=10G

こちら(https://isleofhoso.com/journald-conf/)を参考にいくつか設定を書いた。

設定を反映

sudo systemctl restart systemd-journald

docker を整理

sudo docker image prune -a 
sudo docker volume prune -a 
sudo docker container  prune

image がいい感じに消えてくれないので 明示的に消した。

docker 怖いよ。。。

2022-06-20 追記

また、エラーになった。SSDがぶっ壊れか、XFSがエラーになったかどちらかだと思う。

XFSをリペアして様子見する。

phpでThe server requested authentication method unknown to the client.

php で次のようなエラーが出る

The server requested authentication method unknown to the client

原因 php-mysql の接続でエラー

エラーの原因は mysql の認証方式の変更に対応できないエラー

いままで、mysql は mysql_native_password だったが、mysql8 あたりで caching_sha2_password になっている

対処方法

候補は次の通り、

mysql 8 の caching_sha2_password を殺し、mysql_native_password を使う。

または、

mysql_native_password 時代に対応した mysql 5.x 系を使う。

mysql 5.x 系を使う場合

ubuntu / debianmysql を併存させるのは苦労でしかないので docker を使う

docker run -d --rm \
   --name mysql-5 \
   -p 3304:3306 \ 
   -v /data/mysql5-server/data:/var/lib/mysql \ 
   -e MYSQL_ROOT_PASSWORD=**PASS** \
   mysql:5

あえて古いUbuntuDebianを用意してもいいけど、基本的に非推奨だし、Dockerに閉じ込めればいいわけですから、これでいいでしょう

mysql8 に mysql_native_password を使わせる

これは、ちょっと茨の道。いくつかのポイントを抑える必要がある。

ユーザーの現在の認証方式を確認する。 以下のユーザの通り、mysql_native_password にしていると、mysql_native_passwordを使って認証することになる。

mysql > select User, Plugin from mysql.user;
mysql root@(none):(none)> select User, Plugin from mysql.user;
+---------------------------------+-----------------------+
| User                            | Plugin                |
+---------------------------------+-----------------------+
| connect_test                     | mysql_native_password |
| takuya                          | caching_sha2_password |
| mysql.infoschema                | caching_sha2_password |
+---------------------------------+-----------------------+

mysql_native_password を使う設定

my.cnf で設定を変更する

[mysqld]
default_authentication_plugin=mysql_native_password

再起動する

systemctl restart mysql

注意点。デフォルト値の変更

デフォルト値を変更すると、mysql_native_passwordが優先される。

接続時に mysql_native_password がクライアントに通知される。

caching_sha2_password は使えるけど、トラブルが多い。mysql_native_passwordが先に通ってしまうので。クライアントはmysql_native_passwordを送ってくる。

なので、mysql_native_password と caching_sha2_passwordを混ぜた運用はしないほうがいい。

また caching_sha2_password に未対応のphp といえば、php5.6 や php7.0 なので、そのような古いPHPでしか動かないコードを最新版のMySQLで動かそうとするほうが無茶なので、素直にphpソースコードをアップデートしてパッチを當てるか、古いものは古いものと合わせてDocker環境に閉じ込めて動かしたほうが素直だと思います。

参考資料

https://improve-future.com/mysql-php-the-server-requested-authentication-method-unknown-to-the-client.html