mita2 database life

主にMySQLに関するメモです

Gemini Code Assist に プルリク上 で DDL をレビューさせる

Gemini Code Assist に DDL をレビューさせてみました。 レビューさせるDDL CREATE TABLE users (id int, user_name TEXT, create datetime); CREATE TABLE user_items (id int, user_id VARCHAR(10), itemName TEXT, status VARCHAR(250), created datetime…

go-sysbench のカスタムシナリオが書きやすくなりました

go-sysbench go-sysbench は Go 言語で書かれた、sysbench のクローンです。複雑なカスタムシナリオを sysbench より簡単に作れることを目的として作りました。 github.com sysbench はシンプルで、非常に使いやすいベンチマークツールで、長年愛用してきま…

MySQL SYSTEM_USER 権限を持ったユーザの操作には SYSTEM_USER 権限 が必要

動的権限と静的権限 「動的権限は、従来の静的権限が細分化されたもの。静的権限を持っていれば、動的権限はREVOKEしても影響はない」と考えていました。 例えば、SUPER 権限 (静的) を持っていれば、BINLOG_ADMIN 権限 (動的) がなくとも、バイナリログをパ…

BCP/DR:バックアップ・レプリカ・マルチリージョンクラスターの比較

目標復旧時点(Recovery Point Objective = RPO) 目標復旧時間(Recovery Time Objective = RTO) バックアップの遠隔地保管 RPO RPO はバックアップ頻度に依存 日次バックアップであれば、RPOは1日、最大で1日分のデータがロスト RTO 比較的、長い デー…

MySQL バージョンアップ時の動的権限の追加処理について理解する

動的権限 / Dynamic Privilege MySQL 8.0 で、動的権限と呼ばれる、従来より細かい範囲で操作を許可できる権限が追加されました。 gihyo.jp バージョンアップ時に自動的に動的権限が付与される 一部の静的権限(従来の権限)を保持しているユーザには、MySQL…

MySQL 各バージョンの caching_sha2_password 対応状況まとめ

自分用のメモです。 MySQL 5.7 デフォルトは mysql_native_password caching_sha2_password は利用できない ただし、クライアントは caching_sha2_password をサポート MySQL 8.0 デフォルト は caching_sha2_password default_authentication_plugin パラメ…

MySQL ruby ドライバの caching_sha2_password 平文接続の挙動がバラバラだった件

caching_sha2_password は 少なくとも1回はセキュアな経路を必要とする caching_sha2_password 形式のパスワードを使った、平文の接続 をする場合、その過程で、少なくとも一度は事前に、暗号化されたセキュアな経路を通して認証成功させる必要があります。…

MySQL go-sql-driver/mysql ドライバで意図せず utf8mb4_0900_ai_ci が使われるケース

Background MySQL 8.0 で utf8mb4のデフォルトの COLLATION (照合順序) が utf8mb4_general_ci から utf8mb4_0900_ai_ci に変更されました。 COLLATE を指定せず、SET NAMES <CHARSET> を実行すると、そのキャラクタセットのデフォルトの collation が利用されます。 </charset>…

MySQL Go のドライバ と caching_sha2_password

mysql_native_password の廃止が近づいてきた... MySQL 8.4 では mysql_native_password がデフォルトで無効化されてしまいました。 そろそろ、mysql_native_password 方式の利用の撲滅に本気にならないといけないようです。 sakaik.hateblo.jp mysql_native…

TiDB metadata lock 有効な場合の DDL の挙動

TiDB の DDL の挙動を確認した。 まとめ tidb_enable_metadata_lock が有効だと、DDLは先行のトランザクションによって待たされることがある metadata lock 待ちが発生していても、(MySQL と違って) DMLは影響を受けない metadata lock の状況は mysql.tidb_…

Aurora の wait_timeout の挙動が MySQL と違った

TL;DR MySQL は wait_timeout に設定した値ぴったりに、接続が切られる Aurora は wait_timeout の値 + 最大1分 に、接続が切られる エラーメッセージも違う wait_timeout とは wait_timeout はアイドルセッションに対するタイムアウトを指定するパラメータ…

MySQL Shell dumpInstance の分割ロジック その2

この記事は MySQL Advent Calendar 2023 の23日目の記事です。 MySQL Shell の dumpInstance の chunk ロジックの説明エントリーその2です。 前回の記事では、主キーが数値型以外のケースを説明しました。主キーが数値型以外では、LIMIT句を利用して線形に…

MySQL Shell dumpInstance の分割ロジック その1

この記事は MySQL Advent Calendar 2023 の21日目の記事です。 dumpInstance dumpInstance は論理バックアップを取得する mysqlsh のコマンドです。 テーブルを分割し、並列でSELECTし、高速にバックアップしてくれます。 このように、1つのテーブルが複数…

MySQL Shell 8.0.34 を CentOS7 でビルドする

MySQL Shell のソースコードを CentOS 7 でビルドするのはいろいろ面倒で、以前も記事を書きました。 いつのまにか依存関係が変わったようで、以前の手順ではビルドできなくなってました。 どんどん難易度が上がってく。。。 MySQL Server をビルドする MySQ…

MySQL のデータを BigQuery にサクっとインポートした

MySQL のデータを BigQuery にサクっとインポートしたメモ。 Big Query がサポートしている形式 Arvo ORC CSV Parquet JSON Arvo/ORC/Parquet は MySQL からそれぞれのデータ形式に簡単に変換する方法が見つからなかった。 CSVはカンマや改行などの特殊記号…

Aurora v2 に Upgrade Checker Utility を実行してみた

Aurora MySQL v2 (MySQL 5.7 互換) の EOL が 2024/10/31 ということで、そろそろソワソワし始めている方も多いのではないでしょうか。 Upgrade Checker Utility MySQL Shell には、MySQL 5.7 から 8.0 へアップグレードする際に問題になりそうな点を洗い出…

Aurora MySQL と MySQL Community Edition の performance_schema instruments 差分

メモです。performance_schema.setup_instruments テーブルの比較 MySQL Community Edition (v5.7.38) にしかない instruments $ diff setup_instruments_aurora.log setup_instruments_community.log | grep '^>' > wait/synch/mutex/sql/LOCK_slave_trans_…

最近の MySQL の Internal Temporary Table ステータスとチューニング観点まとめ (version 8.0.28 版)

以下のエントリーでは、最近の MySQL の Internal Temporary Table の動作についてまとめました。 mita2db.hateblo.jp 条件によっては、領域が ディスク上に確保される場合があり、その場合はパフォーマンスに影響がある可能性があります。 今回はMySQLのス…

MySQLのスロークエリログにはエラーになったクエリが含まれる?

以前、エラーになったクエリがスロークエリログに落ちるかどうか試しました。 mita2db.hateblo.jp このときは文法エラーも含め、エラー時もスロークエリログに記録されてましたが、MySQL 8.0.29, MySQL 5.7.38 で文法エラーは除外するよう挙動が変更されたよ…

最近の MySQL の Internal Temporary Table 動作まとめ (version 8.0.28 版)

8.0 のGA以降、Internal Temporary Table まわりは改良が重ねられきました・・・ ネットの記事では既に古い内容になってしまっているものもあり、改めて最新の挙動を確認して整理してみました*1。 なお、MySQL 8.0 の Internal Temporary Table の動作は @ke…

MySQL アメリカのサマータイムが恒久化されたらやることになる作業

サマータイムが終わらない? アメリカでサマータイムを恒久化する動きがあるようです。 どれぐらい現実化する可能性があるのかわかりませんが、仮に、決定された場合、どのような作業が必要になるのか調べておきます。 下院を通過してバイデン大統領が署名す…

MySQL collation_server を変えたつもりが変わってなかった話

character_set_server と collation_server これらのパラメータは、データベースを作成する際に、何もキャラクタセットや照合順序を明示的に指定しなかった場合に、採用されるキャラクタセット・照合順序です (ちなみにテーブル作成時に何も指定しなかった…

MySQL 8.0.28 で performance_schema に CPU_TIME が入った

MySQL 8.0.28 から performance_schema に CPU_TIME を記録できるようになりました。 これまでも実行時間は performance_schema から確認できていました。ただ、実行時間が長いだけでは、そのクエリが必ずしもCPUに負荷をかけているクエリとは言いきれません…

MySQL Illegal mix of collations エラーが出る・出ないまとめ

Illegal mix of collations Illegal mix of collations エラーは 異なる照合順序で結合や比較を行った場合に発生するエラーです。 mysql> SELECT CONCAT(_utf8mb4 'A' COLLATE utf8mb4_bin, _utf8mb4 'B' COLLATE utf8mb4_unicode_ci); ERROR 1267 (HY000): …

MySQL Shell のパラレルテーブルインポートの実装がスマートだった件

MySQL Shell のパラレルテーブルインポートの実装が興味深かった MySQL Shell のパラレルテーブルインポート MySQL Shell 8.0.17 で導入された MySQL Shell パラレルテーブルインポートユーティリティ util.importTable() は、大規模なデータファイルの MySQ…

MySQL mysql コマンドからシェルを呼び出せなくする小技

mysql コマンドでは ! や system によって、シェルを呼び出すことができます。 mysql> \! uname Linux mysql> system uname Linux 実装はシンプルで、標準ライブラリの system 関数が利用されています。 static int com_shell(String *buffer MY_ATTRIBUTE((…

MySQL 8.0 で謎のEXPLAIN結果が出なくなってた

時々、頭の中でMySQLの気持ちになって考えた実行計画と違うものが出力されるときがあるんですよね。 まぁ、実用上、問題になることはなかったので、「MySQL ヨクワカランなー」と思って、スルーしてました。 ところが、最近、MySQL 8.0 をいじってたら、イメ…

MySQL The client was disconnected by the server because of inactivity の対処方法

3ヶ月ブログをサボっておりました。。。リハビリがてらのエントリー。 The client was disconnected by the server because of inactivity エラー MySQL 8.0.24 からタイムアウト(wait_timeout / interactive_timeout)時のエラーメッセージがに変更になり…

MySQL Orchestrator RecoveryPeriodBlockSeconds と FailureDetectionPeriodBlockMinutes の違い

Orchestrator orchestrator は マスターの障害検知およびレプリカのマスター昇格(フェイルオーバー)を自動で行うソフトウェアです。 MySQLのマスター昇格といえば、MHAがデファクトスタンダードでしたが、MHAはメンテナンスモードになって久しい・・・とい…

MySQL 論理削除に関する個人的見解まとめ

技術顧問や講演の場で、論理削除について見解を聞かれる場面がよくあります。アプリケーション開発者の方にとって、身近なデータベースの疑問なんでしょうね。 しっかり言語化できてなかったので、ブログに書いておきます。 論理削除をどう考えるかは、諸派…