MySQL を知りたい人向けの定番入門書として名高い『MySQL徹底入門』という本があります。2020年6月現在、第3版が出ていて、その発行は2011年、対応バージョンがMySQL 5.5でした。 そして来月 2020年7月。待望の第4版が出版されます。 第4版は、過去3つの版のコンセプトを引き継ぎつつ、全体にわたって1から書き起こした本です。当然 最新の MySQL 8.0 に対応。9年に1度の最高のできあがりであり、MySQL 8.0 を知りたい人には絶対にお勧めの一冊と言ってよいかと思います。 なお、今更ですが一応表明しておくと、このエントリーは、私の主観に基づいたものであり、著者として…
オープンソースカンファレンス(OSC)2020 Online Hokkaido
に参加してきました。
event.ospn.jp
もともと、「普通」に札幌現地で開催される予定だったイベントですが、「新しい普通」にオンラインで開催へと変更されました。飛行機等を早めに取っていたので、キャンセル代が心配でしたが、最終的にキャンセル代なしで取りやめることができました。 …
[さらに読む]TL;DR
- マスター上で、3バイトUTF-8なカラムとコネクションのcharsetの対応(いずれもsql_mode = ‘STRICT_TRANS_TABLES’ でない )
| SET NAMES utf8 | SET NAMES utf8mb4 | |
|---|---|---|
| utf8なカラム | 絵文字から後ろが切れる | 絵文字が ‘?’ になる |
| utf8mb4なカラム | 絵文字が ‘????’ になる | 絵文字が入る |
- マスターが3バイトutf8でスレーブが4バイトutf8(utf8mb4)の場合と↑の対応
| ROW | STATEMENT | |
|---|---|---|
| マスターでは後ろが切れた | … |
TL;DR
- MySQL :: MySQL 8.0 Reference Manual :: 15.6.3.5 Temporary Tablespaces
- MySQL
8.0.13とそれ以降ではテンポラリーテーブルの実データ格納に「セッション単位のテンポラリーテーブルスペース」が使われるようになった
- セッションが終われば領域が解放されるので、ibtmp1のように「mysqldを再起動しないとDisk Fullから復帰できない」ことがなくなった
- この「セッション単位のテンポラリーテーブルスペース」の格納ディレクトリが
datadir/#innodb_tempディレクトリ
PoC
### ダミーデータを1000万行ほど
$ perl -MDigest::MD5 -E 'for (my $n= …[さらに読む]
gihyo.jpの連載「MySQL道普請便り」の最新回(第123回)は、ロッキングリード(SELECT ~ FOR UPDATE)のつかいどころのお話が興味深かったです。
乱暴に要約すると、例えば 5000枚のチケットを捌くUPDATEは、いきなり UPDATE するのではなくて、SELECT ~ FOR UPDATE でロックを取ってからUPADTEすると、同時実行数が大きくなっても遅くならないぞ、という内容です。人気のあるチケットの販売って、瞬時に大量の更新が走りますからね。 まさにチケットを捌くと、あっという間に砂漠みたいに何もなくなります。ひと仕事終えた人たちはデザートでもどうぞ。砂漠だけに。
…
[さらに読む]最近(でもないけど) information_schema.tables の中身を1日1回程度取得してMySQLに突っ込んでいる。
/*!80013 SET SESSION information_schema_stats_expiry = 0; */
SELECT
table_schema AS table_schema,
table_name AS table_name,
table_rows AS table_rows,
data_length AS data_length,
index_length AS index_length,
data_free AS data_free,
engine AS engine,
NOW() AS last_update
FROM
information_schema.tables
WHERE
table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND
table_type = 'BASE TABLE'
ORDER BY
data_length + index_length DESC;
CREATE TABLE `table_status_info` (
`seq` bigint unsigned NOT NULL AUTO_INCREMENT,
`ipaddr` varchar(15) NOT NULL,
`port` smallint unsigned NOT NULL, …[さらに読む]
Yoku-san no ToolKIT の yt-healthcheck
はデフォルトでは「接続先のMySQLがマスターなのかスレーブなのか mikasafabricなのか
」によって監視項目を切り替える。
—role によって明示的に “master” なり “slave”
なりを押し込むこともできるけれど、デフォルトは “auto” で、 yt-healthcheck
自身が勝手にマスターかスレーブかあるいは中間マスター(カスケード構成の2段目、子スレーブ(孫スレーブの親))かを判定する。
https://github.com/yoku0825/ytkit/blob/0.2.1/lib/Ytkit/HealthCheck.pm#L181-L207
判定ロジックはこんな感じ。 …
[さらに読む]