複合プライマリーキー vs サロゲートキーでInnoDB読み取りページ数の比較をもうちょっと機械的にやりたい
日々の覚書: 複合プライマリーキー vs サロゲートキーでInnoDB読み取りページ数の比較の続き。毎回innodb_metricsを眺める方法だとサンプル数が余程限られている状態でもない限りスケールしないので、もうちょっと機械的にやる方法を考える。思いついたのはPercona...
View ArticleERROR 3546 (HY000): @@GLOBAL.GTID_PURGED cannot be changed には実は2種類ある
TL;DRSET GLOBAL gtid_purged = '+?'のプラス付きの記法は、既存の gtid_executedと1つたりともカブってはいけない。RESET MASTERができず、既存の gtid_executedに足したい場合は差分を取って +記号で足してやらないといけないgtid_executedが空でない時に +記号なしの SET GLOBAL gtid_purged =...
View Articleテンポラリーテーブルがストレージを埋め尽くした時のエラー番号の違い on MySQL 8.0.32
TL;DRTempTableストレージエンジンがDisk落ちした時とInnoDB Temporary tableで「同じストレージあふれ」でも微妙にエラー内容が違う前者は ERROR 14 (HY000): Can't change size of file (OS errno 28 - No space left on device) , エラーログ出力なし後者は ERROR 1114...
View ArticleFoeign Key制約によって暗黙に作成されたINDEX or NOT
TL;DRMySQL 8.0なら ibd2sdiの結果から判断がつくFoeign Key制約によって暗黙に作成されたINDEXとは何ぞや、という人は↓第63回 MySQLの外部キー(Foreign Key)制約 | gihyo.jp(num, val) を持ったテーブルが2つ、numはどちらでもPKE、valはt1でだけUNIQUE KEY。mysql80 46> SHOW CREATE...
View ArticleMySQL 8.0ならGTIDのスキップはもっと簡単になる
TL;DRMySQL 8.0なら SET gtid_next=.., COMMIT, SET gtid_next= AUTOMATICってやらなくても SET GLOBAL gtid_purged = '+..'でスキップさせられるMySQL :: MySQL 8.0 Reference Manual :: 17.1.7.3 Skipping TransactionsとはいえそもそもSQL...
View ArticleWinDbgでMySQL on Windowsのミニダンプの中身を見てみる
Microsoft Store から WinDbg Preview をダウンロードするにしたDebugging Tools for Windows のダウンロード - WinDbg - Windows drivers | Microsoft LearnMySQLにミニダンプを吐かせるのはLinuxと同じでmy.iniの [mysqld]セクションに...
View ArticleMySQL 8.0で導入された動的権限を利用してたけのこ派にCOUNTを使えなくする
TL;DR今日は2023年4月1日ですし、私はたけのこ派です動的権限とは、MySQL 8.0で加わった「 mysql.userやその他のテーブルに独自のカラムを持た ないタイプの権限」のことらしい。MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.2.2 MySQL で提供される権限↓このへんが「静的権限」でmysql> DESC mysql.user;...
View ArticleMySQL 8.0.32にデフォルトコレーションをutf8mb4_general_ciにするパッチを当てる
地味にgrepから始める。$ grep -r 'utf8mb4_0900_ai_ci' | grep -v mysql-test | grep -v scripts/fill_help_tables.sql | grep -v gunit client/mysqltest.cc: &my_charset_utf8mb4_0900_ai_ci; /* Default charset */...
View ArticleDATETIME型と現在時刻の差分が秒数でほしい時に"-"で比較してはいけない
TL;DRTIMESTAMPDIFFを使う知ってたはずなのにやらかしたので自戒を込めてメモmysql80 65> CREATE TABLE t11 (dt DATETIME); Query OK, 0 rows affected (0.14 sec) mysql80 65> INSERT INTO t11 VALUES (NOW()); Query OK, 1 row affected...
View ArticleMySQL 8.0でtx_isolationを使わせるようにするパッチ
TL;DRちょっと試してみただけなのでフツーに使うことはまずない。自分ですら使おうと思っていない。パッチはこれだけ。$ diff ./sql/sys_vars.cc.orig ./sql/sys_vars.cc 5196a5197,5204 > // NO_CMD_LINE - different name of the option > static...
View Articlegtid_mode=OFFの移行元MySQLからGroupReplicationにマイグレーションするはなし
origin側はgtid_mode=OFF, binlog_format=MIXEDでこれを変えてはいけないMySQLはこのケースに限り 8.0.28以外でも良いメンテナンスには入れられる。ただし、メンテナンスウィンドウ内でMyDumperをかけられるほどデータは小さくないなおGroupReplication ≠ InnoDB Clusterとした。つまりMySQL Shellの支援とMySQL...
View ArticleMySQLの user@'%'にまつわる謎仕様
TL;DR昔から user@'%'と user@'xxx'の 両方があって認証が ‘xxx’ の方で行われた場合、そのセッションは user@'%'と user@'xxx'の両方の権限を持つ謎仕様があったMySQL 8.2.0のリリースノートにある In addition, the treatment of %by the server as a synonym for localhost when...
View Articleソースビルドのmysqldでthdがgdbで掴めない (MINIMAL_RELWITHDEBINFO=ON)
TL;DR8.0.29とそれ以降でソースビルドをしてる人だけだと思うcmake する時に -DMINIMAL_RELWITHDEBINFO=OFF するgdbでmysqldにアタッチした時に色々見つからなくて困った。thdとか全然見えない。$ gdb -p $(pidof mysqld) (gdb) b PT_show_processlist::make_cmd +b...
View ArticleSHOW PROCESSLISTとinformation_schema.processlistとperformance_schema.processlistと
TL;DR呼び出し元エントリーポイントリスト関数SHOW PROCESSLIST...
View ArticleMySQL 8.0.35で旧McAfeeのmysql-auditをビルドしてみる
【2023/11/21 15:58】タイトルが8.0.32だったけど8.0.35でした…TL;DRビルドしてみただけ。動作確認はしていないMySQL...
View ArticleConoHaの上でひたすらMySQLをビルドする in 2023
この記事は ConoHaのカレンダー | Advent Calendar 2023 と MySQLのカレンダー | Advent Calendar 2023 の5日目の記事です。去年は CentOS 9 Stream でビルドしたらしい。日々の覚書: また今年もConoHaの上でMySQLをビルドする季節がやってきた2021年 ConoHaの上でひたすらMySQLをビルドする 20212020年...
View Article明日使えない地味なシェルスクリプト用ワンライナー集
この記事は MySQLのカレンダー | Advent Calendar 2023 の7日目の記事です。6日目は けんつ さんの MySQL いい感じにコントリビュートする方法(非公式) - それが僕には楽しかったんです。...
View ArticleMySQL公式のDockerリポジトリがcontainer-registry.oracle.comに引っ越していた
この記事は MySQLのカレンダー | Advent Calendar 2023 の10日目の記事です。昨日は meijik さんの 最新のSQL標準(SQL:2023)とFirebird/MySQL/PostgreSQL | キムラデービーブログ でした。TL;DRdockerhub のMySQLイメージはもうメンテナンスしていないっぽいややこしいのだけれど、 docker pull mysql...
View ArticleMySQLの論理バックアップにおける2段階のViewのリストア
TL;DRmysqldump とかが CREATE VIEW v1 AS SELECT 1 AS num, 1 AS val とかいう一見VIEW定義となんの関係もない CREATE VIEW 文を吐く理由mysqldumpは単にアルファベット順にテーブルやビューの定義を取得するので、シンプルに直接 CREATE VIEW を書いてしまうと順番によってはリストアに転ける。mysql80 38>...
View Article