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 のクローンです。複雑なカスタムシナリオを sysbench より簡単に作れることを目的として作りました。 github.com sysbench はシンプルで、非常に使いやすいベンチマークツールで、長年愛用してきま…
動的権限と静的権限 「動的権限は、従来の静的権限が細分化されたもの。静的権限を持っていれば、動的権限はREVOKEしても影響はない」と考えていました。 例えば、SUPER 権限 (静的) を持っていれば、BINLOG_ADMIN 権限 (動的) がなくとも、バイナリログをパ…
目標復旧時点(Recovery Point Objective = RPO) 目標復旧時間(Recovery Time Objective = RTO) バックアップの遠隔地保管 RPO RPO はバックアップ頻度に依存 日次バックアップであれば、RPOは1日、最大で1日分のデータがロスト RTO 比較的、長い デー…
動的権限 / Dynamic Privilege MySQL 8.0 で、動的権限と呼ばれる、従来より細かい範囲で操作を許可できる権限が追加されました。 gihyo.jp バージョンアップ時に自動的に動的権限が付与される 一部の静的権限(従来の権限)を保持しているユーザには、MySQL…
自分用のメモです。 MySQL 5.7 デフォルトは mysql_native_password caching_sha2_password は利用できない ただし、クライアントは caching_sha2_password をサポート MySQL 8.0 デフォルト は caching_sha2_password default_authentication_plugin パラメ…
caching_sha2_password は 少なくとも1回はセキュアな経路を必要とする caching_sha2_password 形式のパスワードを使った、平文の接続 をする場合、その過程で、少なくとも一度は事前に、暗号化されたセキュアな経路を通して認証成功させる必要があります。…
Background MySQL 8.0 で utf8mb4のデフォルトの COLLATION (照合順序) が utf8mb4_general_ci から utf8mb4_0900_ai_ci に変更されました。 COLLATE を指定せず、SET NAMES <CHARSET> を実行すると、そのキャラクタセットのデフォルトの collation が利用されます。 </charset>…
mysql_native_password の廃止が近づいてきた... MySQL 8.4 では mysql_native_password がデフォルトで無効化されてしまいました。 そろそろ、mysql_native_password 方式の利用の撲滅に本気にならないといけないようです。 sakaik.hateblo.jp mysql_native…
TiDB の DDL の挙動を確認した。 まとめ tidb_enable_metadata_lock が有効だと、DDLは先行のトランザクションによって待たされることがある metadata lock 待ちが発生していても、(MySQL と違って) DMLは影響を受けない metadata lock の状況は mysql.tidb_…
TL;DR MySQL は wait_timeout に設定した値ぴったりに、接続が切られる Aurora は wait_timeout の値 + 最大1分 に、接続が切られる エラーメッセージも違う wait_timeout とは wait_timeout はアイドルセッションに対するタイムアウトを指定するパラメータ…
この記事は MySQL Advent Calendar 2023 の23日目の記事です。 MySQL Shell の dumpInstance の chunk ロジックの説明エントリーその2です。 前回の記事では、主キーが数値型以外のケースを説明しました。主キーが数値型以外では、LIMIT句を利用して線形に…
この記事は MySQL Advent Calendar 2023 の21日目の記事です。 dumpInstance dumpInstance は論理バックアップを取得する mysqlsh のコマンドです。 テーブルを分割し、並列でSELECTし、高速にバックアップしてくれます。 このように、1つのテーブルが複数…
MySQL Shell のソースコードを CentOS 7 でビルドするのはいろいろ面倒で、以前も記事を書きました。 いつのまにか依存関係が変わったようで、以前の手順ではビルドできなくなってました。 どんどん難易度が上がってく。。。 MySQL Server をビルドする MySQ…
MySQL のデータを BigQuery にサクっとインポートしたメモ。 Big Query がサポートしている形式 Arvo ORC CSV Parquet JSON Arvo/ORC/Parquet は MySQL からそれぞれのデータ形式に簡単に変換する方法が見つからなかった。 CSVはカンマや改行などの特殊記号…
Aurora MySQL v2 (MySQL 5.7 互換) の EOL が 2024/10/31 ということで、そろそろソワソワし始めている方も多いのではないでしょうか。 Upgrade Checker Utility MySQL Shell には、MySQL 5.7 から 8.0 へアップグレードする際に問題になりそうな点を洗い出…
メモです。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 の動作についてまとめました。 mita2db.hateblo.jp 条件によっては、領域が ディスク上に確保される場合があり、その場合はパフォーマンスに影響がある可能性があります。 今回はMySQLのス…
以前、エラーになったクエリがスロークエリログに落ちるかどうか試しました。 mita2db.hateblo.jp このときは文法エラーも含め、エラー時もスロークエリログに記録されてましたが、MySQL 8.0.29, MySQL 5.7.38 で文法エラーは除外するよう挙動が変更されたよ…
8.0 のGA以降、Internal Temporary Table まわりは改良が重ねられきました・・・ ネットの記事では既に古い内容になってしまっているものもあり、改めて最新の挙動を確認して整理してみました*1。 なお、MySQL 8.0 の Internal Temporary Table の動作は @ke…
サマータイムが終わらない? アメリカでサマータイムを恒久化する動きがあるようです。 どれぐらい現実化する可能性があるのかわかりませんが、仮に、決定された場合、どのような作業が必要になるのか調べておきます。 下院を通過してバイデン大統領が署名す…
character_set_server と collation_server これらのパラメータは、データベースを作成する際に、何もキャラクタセットや照合順序を明示的に指定しなかった場合に、採用されるキャラクタセット・照合順序です (ちなみにテーブル作成時に何も指定しなかった…
MySQL 8.0.28 から performance_schema に CPU_TIME を記録できるようになりました。 これまでも実行時間は performance_schema から確認できていました。ただ、実行時間が長いだけでは、そのクエリが必ずしもCPUに負荷をかけているクエリとは言いきれません…
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 8.0.17 で導入された MySQL Shell パラレルテーブルインポートユーティリティ util.importTable() は、大規模なデータファイルの MySQ…
mysql コマンドでは ! や system によって、シェルを呼び出すことができます。 mysql> \! uname Linux mysql> system uname Linux 実装はシンプルで、標準ライブラリの system 関数が利用されています。 static int com_shell(String *buffer MY_ATTRIBUTE((…
時々、頭の中でMySQLの気持ちになって考えた実行計画と違うものが出力されるときがあるんですよね。 まぁ、実用上、問題になることはなかったので、「MySQL ヨクワカランなー」と思って、スルーしてました。 ところが、最近、MySQL 8.0 をいじってたら、イメ…
3ヶ月ブログをサボっておりました。。。リハビリがてらのエントリー。 The client was disconnected by the server because of inactivity エラー MySQL 8.0.24 からタイムアウト(wait_timeout / interactive_timeout)時のエラーメッセージがに変更になり…
Orchestrator orchestrator は マスターの障害検知およびレプリカのマスター昇格(フェイルオーバー)を自動で行うソフトウェアです。 MySQLのマスター昇格といえば、MHAがデファクトスタンダードでしたが、MHAはメンテナンスモードになって久しい・・・とい…
技術顧問や講演の場で、論理削除について見解を聞かれる場面がよくあります。アプリケーション開発者の方にとって、身近なデータベースの疑問なんでしょうね。 しっかり言語化できてなかったので、ブログに書いておきます。 論理削除をどう考えるかは、諸派…