41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

MySQL5.6でsysスキーマを使う方法

MySQL5.6でもsysスキーマ使いたいなと思う人へ

もう新しいバージョンも出ないMySQL5.6

でも、愛着があって(?)まだまだ使いたいという人へささやかなプレゼントです。

sysスキーマMySQL内部の実行内容を把握するのに便利なビューやストアドなどが入っていて便利なのはMySQL5.7や8.0を使っていて知っている人も多いでしょう。

でも、5.7.6以前を使っている人、主に5.6を使っている人はinformation_schemaやperformance_schemaを起動してでなんとかするしか無かったりします。

そんなあなたもsysスキーマが使えるようになります。

インスコの仕方

mysql/mysql-sysから取得

まずはgithubから対象をゲットしましょう。

自分はgit cloneで落としましたが、gitをインストールしてないのであればZIP形式でも落とせます。

$ git clone https://github.com/mysql/mysql-sys.git
Cloning into 'mysql-sys'...
remote: Enumerating objects: 3009, done.
remote: Total 3009 (delta 0), reused 0 (delta 0), pack-reused 3009
Receiving objects: 100% (3009/3009), 1.18 MiB | 4.91 MiB/s, done.
Resolving deltas: 100% (1769/1769), done.

MySQL Server 5.6に接続し、インストール

MySQLに接続し、source ./sys_56.sqlを実行するだけで完了です。

$ cd mysql-sys/
$ mysql -uroot -pxxxxx -h127.0.0.1 -P5650
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.50-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

(root@127.0.0.1) [(none)]> source ./sys_56.sql
Query OK, 0 rows affected (0.00 sec)
...
Query OK, 0 rows affected (0.00 sec)

(root@127.0.0.1) [sys]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

はい、できました。

使い方とか

GitHub - mysql/mysql-sys: The MySQL sys schema を見たり、 MySQL :: MySQL 8.0 リファレンスマニュアル :: 28 MySQL sys スキーマなどが参考になるでしょう。

但し、これで入れたsysスキーマはバージョン的に5.7や8.0のそれと同じというわけではありません。

そのため、一部オブジェクトや情報が取得されていないということもありますが、そのへんはご勘弁を。

(root@127.0.0.1) [sys]> select sys_version from sys.version;
+-------------+
| sys_version |
+-------------+
| 1.5.1       |
+-------------+
1 row in set (0.00 sec)

来年も良いMySQL生活をエンジョイしてください!

ではでは。

【小学校受験】あなたのお子さんは小学校受験をするべきか?

小学校受験をやるべきか?

あくまで個人的な意見ですが、多くのお子さん、ご家族はやる必要は無いと思ってます。

いきなりですが、僕はそう思ってます。

お前、やっとるやんけ!って言われると思いますが、うちも妻がしつこく言ってこなければやらないつもりでした。

ごく普通の収入の平凡な家庭の子供が、時間やお金を大量に使って、無理をしてまでするもんでは無いです。

それでも小学校受験をしたい・させたいなら

どういう条件の家庭が小学校受験に向いている、やったほうが良いかと言うと、

  • 片方の親だけで収入が1000万(できれば1500万)超える
  • 奥さんは専業主婦or夫が専業主夫
  • 親がキレにくい性格(じっくり成長を見守れる)
  • 子供が早生まれではない。できれば4月から7月に生まれている
  • 子どもが双子や三つ子ではない
  • 子供は保育園ではなく、幼稚園に行かせている
  • 2年から3年間塾に行かせ続ける経済力と時間が親にある
  • 親が子供にしつけをしっかりしている自信がある
  • 受験をする子供に兄弟・姉妹がいる
  • 子供に寝る前に絵本を読む習慣がある
  • 家の近くに小学校受験専門の塾が複数ある
  • 親もしくは親類に政治家等がいる or 学校に縁故がある(コネ)
  • 子供の性格・趣味趣向に向いている小学校がある
  • 夫婦間で小学校受験について話し合え、受ける学校について一緒に調べることができる
  • 何のために小学校受験をさせるのか、明確な目的がある

あたりだと思います。

それぞれがチェックリストのようなもので、無いと小学校受験の障壁は1段ずつ上がると思ってください。(コネがあれば別かな)

本当はもっとあるかもしれませんし、間違ってるところもあるかもしれませんが、思いつくところで個人が書いているのでご容赦下さい。

よく、小学校受験は格安にできる!とか、年数をかけずにできるとか、共働きでもできるとか書いてる本ありますけど、

あれらが全部嘘とは言いませんが誇張してるし、努力がどれだけ必要か隠されてると思ってます。

実際、小学校受験をされている親御さんもお子さんもみんな一生懸命ですし、熱量は半端ないです。

格安にするなら塾に行かないので、テクニックを親が持っている必要があります(初受験なら普通無い)。

年数をかけないというのは普段の生活からきちんとそれに向けた準備をしていないといけないので、結局嘘みたいなもんです。

共働きだと、仕事が家庭の時間を使う時があるので両方が忙しい時は難しくなります。

学校も共働きを敬遠するところありますからね(表向きは大丈夫と言っておきながら、中に入るとほとんどいないみたいな)

というわけで、上記のチェックが全然当てはまらないのであれば、気軽な気持ちではやらないほうが身のためです。

片方の親だけで収入が1000万(できれば1500万)超える

最近、パワーカップルとか言われる、世帯収入が1000万を超えてくる様な夫婦は結構多いと思いますが、小学校受験ではそれではダメです。

小学校受験では親は子供の塾通いや勉強を見てやる必要があります。

どうしても『時間』というものが重要です。

そのため、しっかりと片方の親がつく必要があるので、両方で1000万ではなく、片方で1000万超えをしないと色々なひずみが生まれやすいのが現状です。

奥さんは専業主婦or夫が専業主夫

これについては既に前述で理由はほとんど語られています。

あと、夫婦両方で見ると、教え方等でもめて、子供が混乱する元です(うちがそうでした)

たとえ、親が理不尽だったり、無意味、無駄が多い、下手な教え方をしていたとしても、片方の親に任せたほうが子供としては慣れもあるので良いと思います。

(そんな妻や夫を持ったあなたのガチャ運が悪いと思って諦めてください)

親がキレにくい性格(じっくり成長を見守れる)

勉強を教える親がキレやすい場合はやめたほうが良いです。

家庭内に不穏な空気がガッツリ漂います。

幼児なんて集中力が続くわけもなく、最初はすぐに駄々をこねます。

それを力でねじ伏せると後々困るのは結局自分たちです。

教えるのが向いてない、子供の成長をじっくり見守れない人はやるべきじゃないと思います。

(塾で勉強ができなかったと子供を塾で怒鳴ってるお母さん見かけましたが、みっともないですアレは)

子供が早生まれではない。できれば4月から7月に生まれている

幼児の月齢はとてつもなく影響します。

最大1年近く差がある子が同じ土俵で戦うのですが、戦力が違って見えます。

私立でも月齢考査があると言っている学校でも、結局のところは優秀な子が欲しいので、

月齢の違う子達に同じ試験を受けさせて、同じ点数なら月齢が低い子を取るというくらいのものです。

明確に月齢考査をしているのは国立くらいですね。

ましてや月齢考査が無い学校の場合は圧倒的に不利です。

月齢考査なんてカトリック系は大体ありません。

そのため、4月~7月くらいの子は小学校受験に向いていますが、早生まれは私立では特に期待せずにいたほうが良いと思います。

4月~7月くらいの子は年長の6月~8月くらいには既に完成しています。

それに比べて早生まれの子はその子らと同じように勉強しても10月~12月に完成すると言われ、下手すれば試験に間に合いません。

そういう不利を抱えて受けるのが小学校受験であるため、早生まれの子が受験する場合は「結果」よりも「過程」を見るくらいの気持ちで臨んだほうが良いでしょう。

(早生まれで難関校受かってる子は本当に親も子も相当努力してて凄いです)

子どもが双子や三つ子ではない

よく双子や三つ子の子が受験しているのを見かけました。

全員同じ学校や、希望の学校に受かればいいのですが、そうじゃない場合が心配です。

最初は良くても、大きくなるにつれて与える影響も大きくなる可能性があります。

うちは一人っ子なので別に気にしませんでしたが、余計なお世話と思いつつ、難関校は目指さないほうが良いんじゃないかと思ってます。

子供は保育園ではなく、幼稚園に行かせている

保育園が悪い、幼稚園がカリキュラム的に素晴らしいというわけでは無いです。

保育園でもしっかり文字やかずの概念を教え、物語を読んだり、劇をして他の子との関りを密接にしているところもあります。

ここで言いたいのは、勉強時間の捻出です。

保育園という事は基本的に早い時間に両親が迎えに行けない≒共働きの可能性が非常に高いと考えます。

そういう意味では前の二つの話に密接に関係しています。

幼稚園に行かせている親≒前述の2つの可能性が高いです。

(たまにこれは祖父母を使うパターンがありますが、祖父母等は勉強を教えるのに向いてるかと言われるとどうでしょうねえ…)

2年から3年間塾に行かせ続ける経済力と時間が親にある

上記の通りですので、あまり細かいことは言いませんが、子供の面から見ると、難関校に行かせたいのであれば1年では少し足りません。

勉強自体はおそらく5か月もあれば完成します。中学・高校受験、大学受験と比べると短いですが、範囲も受ける学校を絞れば大したことないので、そんなものだと思います。

むしろ、手先の器用さ、作業スピード、お行儀、受け答え、運動神経、絵画の技術のようなもののほうが時間がかかるので、これの準備期間が必要です。

これは早ければ早いほどいいので、2年から3年かけて勉強との負荷分散をすることでコネの無い人には安定した受験が可能となります。

年少、遅くとも年中の初めから塾通い

過去問を解く力みたいなのはぶっちゃけ5か月あれば間に合うなと今回娘の受験を通じて思いました。

でも、本番にはそれだけでは足りない要素があります。それはお行儀やある場面でどうすればいいか?という考える力の部分です。

小学校受験では面接が大きな比重を占めます。

恐らくほとんどの学校が減点方式です。

そして、行動観察と言う自由に行動させて、どういう事をしたり言ったりするのかを見る試験があります。

それらは普段の家庭でのしつけも大事ですが、子供たちとのかかわりの中でしか身につかないものも多くあります。

「〇〇の時はxxするのよ!」というのを教えても教えても、じゃあこのパターンは?というのが出てきます。

早めに塾に通うことでこの辺を指摘してくれます。(私立の幼稚園なんかもこの辺は指摘してくれるようですね)

親が子供にしつけをしっかりしている自信がある

小学校受験では勉強ができることよりも、お行儀のよさを見るところが多いです。

正直、この年齢の子にそこまで必要か?という考えの人もいるかと思います。

でも、その年齢でもTPOがわきまえられる子が小学校としては欲しくて、できないんなら公立へどうぞ、と彼らは思っています。

しつけに自信が無い場合は塾等で身につけていく必要があります。(カトリックだと筆記より重視)

受験をする子供に兄弟・姉妹がいる

これは確実にそうとは言えないのですが、兄弟・姉妹がいると家の中で既に行動観察のようなものを毎日経験しているので強いと思います。

長男・長女の場合は下に対して乱暴にしてたりすると親が叱るため、優しくした方が大人受けがいいんだなと理解しますし、

下はそれを見て、ああ、こういうのはダメだし、上と仲良くする方法を普段から模索してるので、同年代の子と調整するのもそれほど苦にしません。

逆に一人っ子はこの辺の人付き合いというものがこの年代ではかなり苦手な子が多いと思います(うちもそうでした)

子供に寝る前に絵本を読む習慣がある

小学校受験でよくある試験内容に、話の記憶というものがあります。

それはある物語を読んで、その内容をどれだけ覚えているかというものです。

正直大人でも厳しい問題が多いのですが、子どもの脳は大人よりもスポンジのようにそういう話を吸収するので思った以上に記憶しています。

ただ、普段からそういう話を聞いているのと、そうでないのでは実力に大きな差が出ます。

そのため、普段から読み聞かせをしている様な家庭でないとこの課題は厳しいと思います。

家の近くに小学校受験専門の塾が複数ある

小学校受験の場合、子供と先生の相性と言うものが非常に重要です。

先生に対して嫌いという感情があると、それだけで勉強したくない、塾に行きたくないとなり、思うようにはかどりません。

また、自分たちのような場合(塾の教え方が雑、子供のためになってない)もあるので、いざとなったらすぐ移れるようにしたいものです。

移動距離があると乗り物に乗りっぱなしでも子供が疲れてしまうので、家にはドアツードアで30分以内が良いと思います。

親もしくは親類に政治家等がいる or 学校に縁故がある(コネ)

他があてはまらなくてもこれがあれば最強ですw

ちなみにコネって悪いものだと僕は思ってないです。むしろ、それはその人やその人の先祖の努力の結晶ですから使えるなら使ったほうが良いと思ってます。

それにWIN x WINの関係になると思うからそういうのを学校も認めるんだと思うし、別にいいでしょう。

国立がそういうものを排除するために抽せんというものを使っているのは知っていますが、それでも抽せん通った後は別にコネがあってもわかりませんしね。

現に昔、弟はコネもなく、完全な運と実力で国立小に入りましたが、周りは政治家、官僚や凄い企業のお偉いさん、大学教授の子供・孫が多かったと聞きます。

同じ点数ならより育ちやバックグラウンドがしっかりしているお子さんを取りたいと思うでしょう。

金があるから勉強にも投資でき、実力があるとも言えますが、それだけじゃないな、というのが人間の社会ですw

子供の性格・趣味趣向に向いている小学校がある

子供が受かった小学校のカリキュラムについていけない、面白いと思えないのであれば、せっかく行かせても意味がありません。

こんなカリキュラムがあるなら行かせたい、子供が学校に毎日楽しく行けそうだというのがあれば考えてみるべきです。

私立だと多いのが課外授業です。キリスト教系の学校だと奉仕の精神を学ぶために、ボランティアや老人ホームや養護学校に行ったり、ハロウィン・クリスマスなどのイベントも豊富です。

体育会系の小学校だと、山登りやマラソン、遠泳などを強制しているところもあります。

中・高・大の偏差値が高いから行かせるのではなく、子供に合ってるかどうかで行かせたいところがあるか考えましょう。

偏差値が高いところなら、結局内部での進学も厳しいので、自分で頑張れる年齢になってから本人が行く気になってれば行かせればいいと思います。

夫婦間で小学校受験について話し合え、受ける学校について一緒に調べることができる

子育てについて語り合えない夫婦には小学校受験は厳しいです。

小学校受験では両親が面接に駆り出され、何故その学校を志望したか聞かれますし、志望理由も書かされます。

志望理由がありきたりだと余裕で落ちます。

志望理由をアツくするため、年少から学校説明会に参加してますとアピールする親もザラです。

(まあ、コロナの昨今、なかなか対象学年以外の親子が参加しにくくなってるので、それ以外で攻める必要が出てきているのですが・・・)

母親に聞かれがちな質問、父親に聞かれがちな質問というのがあったりしますが、年によってそれが逆になることも多いです。

ですので、どちらの親もどのような質問でも受け答えできないといけないことから、受験したい学校について普段から語り合える夫婦である必要があります。

何のために小学校受験をさせるのか、明確な目的がある

小学校受験は水物です。実力があるから受かるというものでも決してありません。

コネがあれば確率は非常に上がりますが、無ければ塾で優秀な子も行きたい学校に行けないということは良くあります。

これは親の面接の出来や面接官との相性、学校側が取りたい子供が毎年違う可能性がある、付属幼稚園からの上がってくる人数の違い等もあります。

国立のように8割~9割最初に落とされるような恐ろしいまでの『運』の要素もあります。

滑り止めとして、義務教育の公立小学校があるので、どの親もチャレンジしがちです。

そのため、全滅ということもあることは覚悟しなければいけません。

全滅したとき、お金をかけていったい自分たちは何をしてきたんだ?とならないように、小学校受験をする際の目的を決めるべきです。

自分たちは子供の自立心の芽生えを考えました。

自分で考えて行動することができるようになれば成長と捉え、受けた学校全て落ちたとしても高い教育費として諦める覚悟をしました。

幸い、自分たちは1校受かったので良かったのですが、やる前にそういう目的をもっておかないと、結果を受け止められずに、家族でもめる可能性もあります(;^ω^)

どのくらいあてはまりますか?

うちの家で言うと、15個中下の5つしか当てはまりませんでした。

  • 子どもが双子や三つ子ではない
  • 子供に寝る前に絵本を読む習慣がある
  • 子供の性格・趣味趣向に向いている小学校がある
  • 夫婦間で小学校受験について話し合え、受ける学校について一緒に調べることができる
  • 何のために小学校受験をさせるのか、明確な目的がある

塾だって近くにあったのに、少し高いからって結局吉祥寺まで片道1hかけていってましたしね。

それで子供は最後の一か月、ずっと37度~38度あって、薬でなんとか抑えてました。

親もボロボロでした。

それでもなんとか1校はGETしました(まあ、難関校とは言えませんが)

やった甲斐はあった気もします。少し生意気になりましたし。

ちなみに、僕の弟は30年前の話ですが、塾にも行かず国立に受かったのですが、運の力を最大限に活かしたとはいえ、以下のような条件でした。

  • 片方の親だけで収入が1000万(できれば1500万)超える
  • 奥さんは専業主婦or夫が専業主夫
  • 子どもが双子や三つ子ではない
  • 親がキレにくい性格(じっくり成長を見守れる)
  • 子供が早生まれではない。できれば4月から7月に生まれている
  • 子供は保育園ではなく、幼稚園に行かせている
  • 親が子供にしつけをしっかりしている自信がある
  • 受験をする子供に兄弟・姉妹がいる
  • 子供に寝る前に絵本を読む習慣がある
  • 子供の性格・趣味趣向に向いている小学校がある
  • 夫婦間で小学校受験について話し合え、受ける学校について一緒に調べることができる
  • 何のために小学校受験をさせるのか、明確な目的がある

15分の12も当てはまってます。

これで塾行ってたらコネ以外ほとんどだな。

オヤジ、稼いでたしなあ…。

家庭はほったらかしだったけど、子供の勉強には熱心だったし。

母親は子供のしつけしっかりしてたなあ。。。

と今更ながら自分の家が恵まれてたことを実感しました(;^_^A

次回

こんだけネガティブに書いといて、次回はやるメリットを書こうかと思いますw

起動しない、エラーログ出ない、困ったー!と言う時はmy.cnf(my.ini)を見よう

小学校受験の話をガッツリ書く前に、今日はちょっとしたMySQLの小話。

なんで起動しないのか確認できないよぉ…

MySQL Serverを起動しようとしたら起動しない。

でも、エラーログが出てない。

実行しているコンソール上にも何も出ない。

なんで起動しないのかわからないよー!

そんな時ありませんでした?

理由は恐らくあなたのmy.cnf(my.ini)にあります。

my.cnfやmy.iniのあるパラメータに注目

それはdatadirとlog_errorです。

log_error が指定されていない場合、またはファイルに名前を付けずに指定されている場合、--pid-file オプションが指定されていないかぎり、デフォルトの宛先はデータディレクトリ内の host_name.err という名前のファイルになります。

log_error が指定されているが、ファイル名だけの場合、そのファイルはデータディレクトリ上に作られます。

log_error が指定されていて、パスも記載されている場合、そのファイルはそのパス上に作られます。

データディレクトリは通常、インストールディレクトリ下のdataフォルダ下になり、datadirで指定されます。

つまり、

  • datadirに記載されたパスが間違っていて、
  • かつlog_error が指定されていない or ファイル名しか記載されてない or パスが記載されているが、そのパスがdatadirに書かれたものと同じ

場合、エラーログが出ない上に、起動しない現象が起きます。

解決方法はdatadirを直す

こういう場合、datadirの記述を見直してください。

Linuxだったら大文字小文字、Windowsだったら¥の数や半角スペースとかがおかしくないか見てみましょう。

log_error をデータディレクトリじゃないところにして、パスも記載しておけばdatadirが間違っててもログを見ればばっちりです。

参考

https://dev.mysql.com/doc/refman/8.0/ja/error-log-destination-configuration.html https://dev.mysql.com/doc/refman/8.0/ja/server-system-variables.html#sysvar_datadir https://dev.mysql.com/doc/refman/8.0/ja/server-system-variables.html#sysvar_log_error

【小学校受験】小学校受験を終えて

振り返り

はじめに

先日、娘の小学校受験が終わりました。

多くの人に助けられ、第2志望のところが受かったんで、来年はそこに通うことになります。

(第1志望の学校には行けませんでしたが、それもまた縁かな、と)

色々な人から話を聞くとその学校も調べた以上に評判が良く、親としても段々楽しみになってきました。

娘を通じて初めて経験した小学校受験について、何回かに分けて振り返ってみたいと思います。

受験開始

始めたのは今年の2月でした。(一般的には凄く遅い)

妻にずっと「小学校受験をやりたい」言われ続けていたので、折れた形で認めたのが始まりです。

塾に通わせたものの小学校受験というものがイマイチ良くわかっていませんでした。

国立小を目指す感じで塾に行かせてましたが、コロナで教室に入れず、勉強の様子が見られないまま3か月が過ぎました。

勉強時間

この頃の勉強は塾でやったプリントを復習したり、宿題をやったりしつつ、妻が買い集めた問題集を少しやる程度でした。

大体1日1h勉強したらいい方だったと思います。

3か月後、塾を変更

5月に入り、ようやく塾の方でリモートで勉強の様子を見られるようになり、愕然としました。

できる子には手厚く教え、できない子は別の部屋で素人のような新人先生に教わるスタイルでした。

そして我が子はその新人先生の部屋に…。

新人先生が手厚く教えるならいいんですが、人手も足りず、子供がわかってないところは「親御さんよろしく!」な授業。

わかってなかったら置いていく授業スタイル。

娘もかなりわかってない雰囲気を出していて、娘どうです?と塾の先生に聞いたところ、

今更「ええ、お子さんこのままじゃマズいです」と言う…。

「これはマズい!」といつもは意見が正反対のうちら夫婦が珍しく意見が一致。

3か月も通わせて、何も成長していないことを連絡してこなかった、いや見てなかった(?)塾に対して不信感を持った我が家は早速、近くに今からでも入れる塾が無いか探し始めました。

今度は丁寧に教えてくれて、親がちゃんと授業内容も見れるような塾に。

しかし、既に5月。入塾するとしても6月になる状況で、勉強が遅れているような子を喜んで入れてくれるところはなかなかありません。

そんな時、妻が思い出したのがあるカリスマ先生の塾でした。

そこが家の近くに分校を最近建てたのを知り、連絡してみたところ、土曜日に授業があることから体験に行くことに。

授業はカリスマ先生の息子さんがされていましたが、非常に教え方も丁寧で、できない我が子や他の子にも分かるように教え、それでいて値段も手ごろ。

ここに転塾しよう!と速攻切り替えました。

志望校を国立から私立へ変更

転塾したことは志望校の見直しにもつながりました。

前の塾では国立対策コースにいたので、私立は全く考えていませんでした。

しかし、転塾したことでそもそもどこに行かせるのかを先生と話しながら考え直すようになりました。

ある日、吉祥寺の本校である女子校の教頭先生が話に来るので、その説明会に参加しては?という話を先生から聞き、参加してみることに。

そこで聞いた話が楽しく、ああ、この学校、面白そうやな!俺が入りたい!と思ったのが決め手でした。

色々その学校について調べ、子供に学校の映像を見せたり話したりすると、子供もそこに行きたいと。

そこからは私立でも子供に合いそうだとか、中学や高校もあってしばらく受験はしなくてよくて、カリキュラム的にお金をかける価値がありそうなところを探しました。

その結果、コネに頼れない我が家は頑張って実力を身につけないと入れない私立を目指すことになりました。

勉強時間

子供の気持ちに少し火が付いたことで勉強時間は1日1.5h~2hくらいになりました。

夏から秋にかけて

遅れを取り戻すべく、朝保育園に行く前に朝勉、夕方保育園から帰ってご飯前に少し夕勉、ご飯食べた後夜勉、寝る前絵本タイムというのが毎日行われるようになりました。

まあ、受験やってるところはどのご家庭もやってるんでしょうけど、ここで保育園と専業主婦のママ+幼稚園との差が見えてきます。

圧倒的な時間の差が塾でハッキリ出てきますw(幼稚園だけどやってないご家族は置いときますw)

足りないスキルも見えてきたので、受けるクラスを増やしました。

吉祥寺の本校でしかやってない授業とか自分たちの都合もあって、吉祥寺まで週2回くらい行くようになりました。

これで交通費と親子の体力が毎日削られ続けていました。

夫婦間の衝突も多かったこの頃。

子供に「なんでできないの!他の子はできるのに!」という妻に対し、俺がいい加減にしろというのが日常茶飯事に。

あんまり子供の前で言い争う親の姿なんか見せたくないんですが…。

勉強時間

この頃は1日1.5h~2.5hくらいでした。ただ、保育園に行きながらはこれ以上はどうしても捻出できませんでした。

塾行く行き帰りの電車の中などもこまめに使いましたが、やりすぎるとすぐ風邪をひいてしまいました。

そのため、第一志望校受験前の1か月は保育園を休み、妻も仕事を休んで1日4h+運動1hのような生活をしました。

模試

いくつか夏から秋にかけて模試があって、慣れさせるために受けさせましたが、第一志望どころか第三や第四志望のところすら合格圏内に届かない、常に最下位レベル。

これに妻が毎回激怒。

子供はいつもツラいと小さな声で俺に呟いている感じで、こんなの何故やり続けるのかと疑問になる毎日。

ただ、第一志望の学校は子供も行きたいと自分で思った学校なので、励ましながら、なんとか親子で間違った問題を復習したりし続けました。

そして、10月の末くらいにようやく第一志望の学校に手が届くか届かないかくらいの感じになり、ギリギリ間に合ったようにも見えました…。

本番

小学校受験都道府県により開始のシーズンが違い、

  1. 埼玉は8月から9月、
  2. 神奈川は9月から10月、
  3. 東京は10月後半から11月、
  4. 国立が最後に11月中旬から12月

というスケジュールになっています。

我が家は埼玉1、神奈川2、東京2、国立はとりあえず申し込み可能な4つ受けてみることにしました。

埼玉の学校を受けに行ったときは何の準備もできておらず、ほぼ模試として受けに行っていました。

忘れ物もしてしまい、面接もボロボロであっさり落ちました。

神奈川の学校の一つは妻の行かせたい学校(俺は否定的)だったのですが、ここでも娘が面接でやらかしてしまい、帰りの電車で妻は大激怒。

たった5~6歳の子に失敗するなというほうが無茶だとは思うのですが、小学校受験とは「躾」を見る場でもあるので、そういうやらかしは即アウトになります。

神奈川のもう一つの学校は夫婦ともに「ここはいいね」と思った学校です。

家から遠いことを除けば、自然もあり(学校のすぐそばの林の中にリス!)、中・高、下手すりゃ大学まで受験無しというなかなかの好条件のところ。

ここが受かって、両親ビックリ!

とりあえず最低限の目標はクリアした気になりました。

東京の2のうち、一つは近いので全く興味も無いけど、第一志望前に試験慣れしとこうと思って受けて、案の定面接から玉砕。

そして、第一志望を受けましたが、事件発生。。。そして学校で泣いてしまい、案の定不合格。

ここでテンション駄々下がりなので、後の国立についてはとりあえず。。。な感じで申し込んで、4分の2受けて、全落ちしました。

終わっての感想

最後の12月の試験を受けた直後から複数の嘔吐+39度の熱を出しました。

本人もプレッシャーがあったのか、それとも誰かにうつされたのかわかりませんが、約10か月の受験期間が終わりました。

1勝8敗

受験にかけたお金は150万くらいだと思います。(これは入る学校に支払う分は含みません)

会社の同僚にも時間の面で色々と協力してもらいました。

妻は一か月会社を休職して、給料は丸一か月分0になりました。

数字だけ見るとコスパ悪いようにも見えます。

でも、入れる学校は1つだし、受かった学校が穏やかそう&将来性ありそうなところなので◎とはいかないまでも〇くらいは出資者の親としては思うようにしてますw

また、本人も塾や試験対策で色々な経験を積んだことで、1年前から比べると大きく成長しました。

娘にガンバレガンバレと言い続けたことで、自分もここから更に頑張ろうと言う気持ちになりました。

もう一回やる機会があればもう少しうまくやれるけど、やりたいかと言われると…(苦笑)


次回はこれから小学校受験を受けようかな、どうしようかなと考えている人向けに書いてみます。

MySQL8.0を再起動するとアプリからつながらなくなる理由

この記事は MySQL Advent Calendar 2021 の18日目の記事です。

それ、多分 caching_sha2_password が原因です

この話、実は既にyoku0825さんが語っている話なので、別に目新しさは無いですw

でも、アプリケーションからというように、少しDBへの接続の仕方が変わるとこの話に気づきにくくなってる気がするのであえて書いてみました。

caching_sha2_passwordって何?(おさらい)

caching_sha2_password は MySQL8.0のデフォルトの認証プラグインです。

MySQL5.7まではmysql_native_password がデフォルトの認証プラグインでした。

認証プラグインって?

MySQLサーバは認証方式をプラグイン化しています。

そして、アカウント毎にその認証方式を選べるようにしています。

例えば、

  • ローカルからしか接続しないので、パスワードのみでの認証方式にしたり、
  • 外部からDBへ接続するので暗号化されたパスワードハッシュを使って認証したり、
  • OSユーザーと連携したいので、Windows認証やLDAP認証といった方式も使えます。

caching_sha2_passwordはそれら複数ある認証方式の一つで、SHA-2プラガブル認証をより使いやすくしたものです。

どうやって変更するの?

デフォルトの認証方式はdefault_authentication_pluginを変更すれば

mysql> CREATE USER xxx@localhost;

というように特にIDENTIFIED WITH句を指定しない場合に、そのデフォルトの認証方式が使われます。

逆にIDENTIFIED WITH句を使えば、ユーザーごとに異なる認証方式を設定できます。

ところで、caching_sha2_passwordの何がいいの?

雑ーなマトリクスを作りました。

mysql_native_password sha256_password caching_sha2_password
セキュリティ ×
パフォーマンス ×

caching_sha2_passwordはその名の通り、パスワードのハッシュ化にSHA256を使用していますが、それをサーバーのメモリ上にキャッシュしています。

詳しい話はドキュメント「SHA-2 プラガブル認証のキャッシュ」に書かれています。

さて、本題の原因についての説明です。

くどいようですが、caching_sha2_passwordはMySQL8.0からのデフォルトの認証方式になりました。

そのため、認証方式というものをそもそも意識していないと、「ユーザーが急に入れなくなった!」と感じたりします。

そんなときは以下のようなことを確認してみましょう。

原因と思われる作業

  • MySQLサーバを再起動してませんか?
  • FLUSH PRIVILEGESを実行しませんでしたか?
  • ALTER USERしたユーザーで接続しましたか?
  • CREATE USERしたばかりのユーザーで接続しましたか?
  • MySQLサーバーへ接続する際、非SSLTCP接続じゃないですか?

対応方法

主な方法は以下の通りです。

  1. 接続ユーザーをmysql_native_password認証に変更する
  2. mysqlクライアント等のSSL接続ができるものから一度接続し、認証情報のキャッシュをサーバー上に作った後、非SSL方式で接続する
  3. サーバーの公開鍵を使い、認証を行う
  4. クライアント側、アプリケーションの接続設定部分でSSL接続を有効にする

1の接続ユーザーをmysql_native_password認証に変更するのはセキュリティ的にはあんまりお勧めできません。

2のようにキャッシュが乗った状態なら非SSL方式でもパスワード認証でOKなので、再起動後等に一回つなげばいいんですが、めんどくさいですよね。

というわけで、3か4で対応することをお勧めします。

どうでもいい豆知識ですが、

default_authentication_pluginパラメータでcaching_sha2_passwordを設定できるのはMySQL8.0からです。

設定ファイルに

default_authentication_plugin=caching_sha2_password

と書くと、MySQL5.7以前だとエラーとなり、起動しません。

[ERROR] Can't start server: Invalid value for --default-authentication-plugin

参考情報

MySQL :: MySQL 5.7 Reference Manual :: 6.4.1.4 Caching SHA-2 Pluggable Authentication

MySQL :: MySQL 8.0 Reference Manual :: 6.4.1.2 Caching SHA-2 Pluggable Authentication

MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.4.1.2 SHA-2 プラガブル認証のキャッシュ

明日は

明日は@shallow1729 さんです。お楽しみに!

リモートからBLOB型に画像やPDFファイルを登録する方法

この記事は MySQL Advent Calendar 2021 の5日目の記事です。

久々のブログです。

今年は私事が忙しくてサボりまくってましたが、年明けから頑張ろうかと思いそのためのリハビリです。

今回のネタは備忘録的に自分のために残したかったものです。

BLOB型へのファイルの登録

ローカルなら簡単にできるんだけど

BLOB型に画像やPDFファイルを登録する方法ですが、LOAD_FILE()って関数があって、通常はこれでBLOB型にファイルパスを入れて突っ込みます。

しかし、残念ながらMySQL Serverのあるインスタンス、つまりローカルにそのファイルが無いといけないという制約(*1)があります。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.8 文字列関数および演算子

というわけで、リモートからのBLOB型カラムへのバイナリファイルの格納方法がMySQLのコマンドツールでは出来ません。

(マウントすればローカル扱いになるんですが、MySQL Severのローカルとして見える場所にファイルなんか置きたくないよ!って言う声はあるでしょう)

じゃあ、どうすれば?

そんな場合はプリペアドステートメントを使用すれば可能です。

プリペアドステートメント

MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.5 プリペアドステートメント

MySQL C API client library for C プログラム、MySQL Connector/J for Java プログラム、MySQL Connector/NET for .NET を使用するプログラムなどのクライアントプログラミングインタフェースを介して使用できます。

ってわけで、簡易的なコードを書いてみました。

実行例

package java_mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.Blob;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

public class Test {
    public static String URL = "jdbc:mysql://(ホストorIPアドレス):(ポート番号)/(データベース名)";
    public static String USER = "(DBユーザー名)";
    public static String PASSWD = "(DBパスワード)";
    public static String TEST_PDF_PATH = "(ファイルパスとファイル名)";
    public static void main(String[] args) {

        Connection conn;
        Statement st;
        PreparedStatement ps1;
        String sql1 = "INSERT INTO t_blob (b) VALUES(?)";
        byte[] data1;
        
        Blob blob;

        try {
            data1 = Files.readAllBytes(Paths.get(TEST_PDF_PATH));
        } catch(IOException ioex) {
            ioex.printStackTrace();
            return;
        }
        
        try {
            conn = DriverManager.getConnection(URL, USER, PASSWD);
            st = conn.createStatement();
    
            st.execute("CREATE TABLE IF NOT EXISTS t_blob (a SERIAL, b LONGBLOB)");
            st.execute("TRUNCATE t_blob");
            blob = conn.createBlob();
            blob.setBytes(1, data1);
            ps1 = conn.prepareStatement(sql1);
            ps1.setBlob(1, blob);
            ps1.executeUpdate();
            ps1.close();
            st.close();
            conn.close();
        } catch (Exception e) {
            if (e instanceof SQLException) {
            System.out.println("SQLState: " + ((SQLException)e).getSQLState());
            System.out.println("SQLErrorCode: " + ((SQLException)e).getErrorCode());
            System.out.println("SQLErrorMsg: " + ((SQLException)e).getMessage());
            }
            e.printStackTrace();
        }
    }

}

おおまかには以下のような流れです。

  1. Files.readAllBytesで対象の画像ファイルを読み込み、
  2. データベースへ接続
  3. テーブルが存在しない場合は再作成し、存在する場合にはTRUNCATE TABLEをします
  4. プリペアドステートメントを開始し、BLOBファイルを読み込み、DBに挿入します
  5. プリペアドステートメントとDBへの接続を切ります。

ちなみに

プリペアドステートメントじゃなくても、各言語のライブラリなどで格納するものがあったりもするので、その場合はそっちを参照してください。(試してはいない)

npm - mysql でリモートの MySQL サーバーにバイナリファイルのデータを挿入する : まだプログラマーですが何か?

PHP MySQL BLOB: Insert, Update, And Select BLOB Data

さいごに

普段は簡単なコーディングもしないんで、たまにこうやってちょっとしたもの作って、それが動くのを見るだけでも楽しいです。(というか、気軽なコーディングが一番楽しい)

参考資料

Writing and Reading MySQL BLOB Using JDBC

MySQL :: MySQL Connector/NET Developer Guide :: 5.6.3 Reading a BLOB from the Database to a File on Disk

注釈

*1 LOAD_FILE()には、ファイルはサーバーで読取り可能というほかに、そのサイズが max_allowed_packet バイト未満である必要があるという制約もあります。

明日は

明日は@hmatsu47 さんです。お楽しみに!

innodb_strict_mode のセッション値を変更するのに必要な権限(from 8.0.26)

サクッと書けるネタだったので、久々に書きました。

リリースノートを読んでて気になった

MySQL8.0.26のリリースノートのServer Administrationの箇所にこうあった。

Setting the session value of the innodb_strict_mode system variable is now a restricted operation and the session user must have privileges sufficient to set restricted session variables.

For information about the privileges required to set restricted session variables, see System Variable Privileges. (Bug #32944980)

なになに、「システム変数 innodb_strict_mode のセッション値を設定することは、(より)制限された操作に変更され、セッション ユーザーは制限されたセッション変数を設定するのに十分な特権を持っていなければならない。」と。

んで、「制限されたセッション変数を設定するために必要な権限については、「システム変数の権限」を参照してください。」と。

そして、その先のページを読むと、セッションシステム変数を変更するにはMySQL 8.0.14以降 では、必要な権限は SESSION_VARIABLES_ADMIN で、それより前のバージョンだとSYSTEM_VARIABLES_ADMINまたはSUPERが必要とある。

んー?よくわからんな・・・。

何が変わったんだ?

  • まず、8.0.25まではinnodb_strict_mode のセッション値を変えるのにどんな権限が必要なのかわかりにくい。
    • SESSION_VARIABLES_ADMINだけなの?
    • SESSION_VARIABLES_ADMIN or SYSTEM_VARIABLES_ADMIN or SUPER なの?
  • その上で8.0.26で必要な権限が何かハッキリとわからん。
    • 制限されたってのはどういうこと?
  • SESSION_VARIABLES_ADMINはおそらくセッション値を変えるのに必要なんだろうが、SYSTEM_VARIABLES_ADMIN、SUPERは8.0.14〜8.0.25で使える?使えない?がわからん。

ってわけで、ちとその3つ+1(USAGE)の権限でユーザー作って8.0.25と8.0.26で確認してみることに。

検証

検証用ユーザーとその権限

SUPER権限のユーザー

CREATE USER 'strict_super'@'%' IDENTIFIED BY 'xxxxxxxx';
grant SUPER on *.* to 'strict_super'@'%';

SESSION_VARIABLES_ADMIN権限のユーザー

CREATE USER 'ss_var_admin'@'%' IDENTIFIED BY 'xxxxxxxx';
grant SESSION_VARIABLES_ADMIN on *.*  to 'ss_var_admin'@'%';

SYSTEM_VARIABLES_ADMIN権限のユーザー

CREATE USER 'sys_var_admin'@'%' IDENTIFIED BY 'xxxxxxxx';
grant SYSTEM_VARIABLES_ADMIN on *.*  to 'sys_var_admin'@'%';

USAGE権限のユーザー

CREATE USER 'usage_user'@'%' IDENTIFIED BY 'xxxxxxxx';
grant USAGE on *.* to 'usage_user'@'%';

(※パスワードのxxxxxxxxの部分は適当に入れてね)

検証作業

8.0.25

SUPER権限のユーザー

$ mysql -ustrict_super -pxxxxxxxx -h127.0.0.1 -P8025
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.25-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.01 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

変更できる。(ほうほう)

SESSION_VARIABLES_ADMIN権限のユーザー

$ mysql -uss_var_admin -pxxxxxxxx -h127.0.0.1 -P8025
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.25-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

変更できる。(そらそう)

SYSTEM_VARIABLES_ADMIN権限のユーザー

$ mysql -usys_var_admin -pxxxxxxxx -h127.0.0.1 -P8025
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.25-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

変更できる。(まあ、そうか)

USAGE権限のユーザー

$ mysql -uusage_user -pxxxxxxxx -h127.0.0.1 -P8025
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.25-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

なんや、お前でもできるんやないか!?

SUPERとかなんとか言ってたのはアレ一体なんやったんや・・・。

というわけで、8.0.25でも実はSESSION_VARIABLES_ADMIN 以外にSYSTEM_VARIABLES_ADMINまたはSUPER、というかUSAGEでもセッションでの変更が可能だとわかった。

さて、問題の8.0.26である。

8.0.26

SUPER権限のユーザー

$ mysql -ustrict_super -pxxxxxxxx -h127.0.0.1 -P8026
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.26-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
mysql> set session innodb_strict_mode = OFF;
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

Oh... SUPERだと無理になってる!

コメントに

you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

とあるので、その2つのどっちかなら行けるってことか。

SESSION_VARIABLES_ADMIN権限のユーザー

$ mysql -uss_var_admin -pxxxxxxxx -h127.0.0.1 -P8026
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.26-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.01 sec)

うん、OKだね。

SYSTEM_VARIABLES_ADMIN権限のユーザー

$ mysql -usys_var_admin -pxxxxxxxx -h127.0.0.1 -P8026
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.26-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

やっぱりOK

USAGE権限のユーザー

$ mysql -uusage_user -pxxxxxxxx -h127.0.0.1 -P8026
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.26-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
mysql> set session innodb_strict_mode = OFF;
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

デスヨネー!

こうなってくると

気になるのは8.0.13以前。どうなっているんだ?

SESSION_VARIABLES_ADMIN権限は無いので、それ以外で試す。

8.0.13

SUPER権限のユーザー

$ mysql -ustrict_super -ppassword -h127.0.0.1 -P8013
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

変更できる。(ドキュメント通り)

SYSTEM_VARIABLES_ADMIN権限のユーザー

$ mysql -usys_var_admin -ppassword -h127.0.0.1 -P8013
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

変更できる。(ドキュメント通り)

USAGE権限のユーザー

$ mysql -uusage_user -ppassword -h127.0.0.1 -P8013
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_strict_mode = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> set session innodb_strict_mode = OFF;
Query OK, 0 rows affected (0.00 sec)

( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

まとめ

つまりこういうこと

権限 8.0.13 8.0.25 8.0.26
SUPER 変更可 変更可 変更不可
SESSION_VARIABLES_ADMIN 変更可 変更可 変更可
SYSTEM_VARIABLES_ADMIN 変更可 変更可 変更可
USAGE 変更可 変更可 変更不可

リリースノートとドキュメントに

innodb_strict_modeのセッション値を変更する権限として「SESSION_VARIABLES_ADMIN か SYSTEM_VARIABLES_ADMIN をちゃんと指定してね 」

を書いてもらいつつ、8.0.14より前の〜、のくだりは直しじゃないか。

レポート出しとくか。

ちなみに

上の話はinnodb_strict_modeでの話ですのでご注意を。

$ mysql -ustrict_super -pxxxxxxxx -h127.0.0.1 -P8026
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.26-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set session innodb_parallel_read_threads = 1;
Query OK, 0 rows affected (0.00 sec)

最後に

尊敬するyoku0825さんからご指摘頂き、正確に把握できました。

本当にありがとうございます。