my.cnf/my.iniの優先順位とオプショングループ

my.cnf/my.iniの優先順位

マニュアルにきちんと記載してくれている。
dev.mysql.com

表 4.1 Windows システムで読み取られるオプションファイル
もしくは
表 4.2 Unix および Unix-Like システムで読み取られるオプションファイル
に記載されている順番を参照すれば良い。

なお、my.cnfに全ての設定が定義できる訳ではない。
どのパラメータが設定できる/できないは以下を参考にすれば良い。
dev.mysql.com
また、MySQL8.0ではSET PERSIST句という機能が新しく用意されており、
my.cnfよりも更に優先順位高く設定が行われる上に、
当機能を利用すればmy.cnfで定義できないパラメータも指定可能である。
但し、mysqld-auto.cnfという別の場所に定義されるため管理が猥雑になる欠点もある。
blog.s-style.co.jp

オプショングループ

my.cnfの[mysqld]や[client]という記述はオプショングループという定義である。

4.2.2.2 オプションファイルの使用
(中略)
オプションファイル構文
(中略)
[group]
group はオプションを設定するプログラムまたはグループの名前です。 グループ行のあと、すべてのオプション設定行は、オプションファイルが終了するか、または別のグループ行が指定されるまで、名前を指定したグループに適用されます。 オプショングループ名では、大文字と小文字は区別されません。

そのため、ここの記述無視して書いてると痛い目をみる。
(AmazonRDSのパラメータグループとか普段利用していて、dockerとかで利用する時に忘れてるとやらかす)
よって、同じ定義をしているのは、意味がある。

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock

なお、オプショングループは以下の特性がある。
・オプショングループ名は同じプログラム名に適応される。
・clientオプショングループは、mysqlだけでなくMySQLクライアント全体に適応される
・client、mysqlみたいな包括関係がある場合は、オプショングループで同じ値を指定すると後勝ちになる
【関連リンク】
yoneyore.hatenablog.com