mita2 database life

主にMySQLに関するメモです

MySQL Connection Pooling と Persistent Connections はチョット違うという話

コネクションプーリングのメリット コネクションプーリングは、一度確率したコネクションを使い回す仕組みです。TCP 3-way ハンドシェイクやDBの新規接続処理をスキップすることで、パフォーマンスを向上させる効果があります。 ただ、私の経験ではコネクシ…

Amazon Aurora レプリカ では metadata lock 待ちが発生しない

Amazon Aurora のレプリカは Vanilla MySQL のレプリケーションとは違った仕組みで実現されている。 マスターとレプリカは同じディスクボリュームを参照しており、マスターでの更新はほぼ即時レプリカに反映される。 DB クラスターボリュームは DB クラスタ…

MySQLを止めずにレプリケーションをブーストする小技

先日は、MySQLユーザ会会 2020年7月に参加しました。 今回はWebや雑誌で連載の著者の方々が、執筆に至った経緯や、執筆時に心がけていることを語る回でした。 @kk2170 さんが「過去の自分に向けて書く」とおっしゃっていたのが、(そういう視点は自分の中に…

スロークエリログをDataDogで可視化するLambda Function を作った

MySQL 徹底入門 第4版が出ましたね! 著者の方々にサインをもらいたいところですが、Stay Homeな昨今なかなかチャンスがありそうにありません。 MySQL徹底入門 第4版 MySQL 8.0対応作者:yoku0825,坂井 恵,鶴長 鎮一,とみたまさひろ,深町 日出海,福山 裕大,…

MySQL max_connections は雑に設定しておけば良い

MySQL 誕生25周年 らしいです。めでたい! 25年、1つのソフトウェアが継続しているってすごい! max_connections について データベースを使っている開発者から「最大までどれぐらいコネクション数を増やせるのか」という質問を良くもらいます。 最大コネク…

MySQL 複数データセンター利用する場合のレプリケーショントポロジー考察

マスター・スレーブ構成ではマスター障害時、保持しているバイナリログが最も進んでいるスレーブから新マスターを選出する。 MySQLでは、どのスレーブが最新のログを持っているかはコントロールできない。 準同期レプリケーションを利用していたとしても、非…

MySQL 8.0 の新機能 デュアルパスワードでパスワード変更時のダウンタイムを回避する

MySQL 8.0で、「デュアルパスワード」がサポートされました。 1つのユーザに対して、新旧2つのパスワード(プライマリとセカンダリ)を設けることができます。 # どっちのパスワードでもログインできる $ mysql -uapp -h$HOSTNAME -pPassw0rd@init -e 'SEL…

MySQL 8.0.20 でHASH JOINが効くケースが拡大した

TLDR; MySQL 8.0.20 から INNER JOIN だけじゃなくて、Semi joinや Left/Right outer join でも HASH JOIN が使えるようになったよ MySQL 8.0.20 では (EXPLAIN ANALYZEではなく)EXPLAIN でも、HASH JOINが使われているか、表示されるようになったよ MySQL …

良く使う pt-query-digest のコマンド メモ

ただのメモです。 pt-query-digest percona tookit に含まれるツールの1つ。 スロークエリログやtcpdump からクエリを抽出して、クエリを集計するツール。 負荷をかけているクエリを洗い出すのに便利なヤツ。 https://www.percona.com/doc/percona-toolkit/…

MySQL の feature request を眺める

feature request MySQL のバグは bugs.mysql.com で管理されています。 このサイトにはバグだけでなく、機能改善(feature request) の要望も投稿できます。 bugs.mysql.com 眺めてみる 普段はバグ(不具合)に注目してみているのですが、今日は、FRをみてみ…

MySQL 各インデックスごとの容量を確認する

お題 不要そうなインデックスを削除して、どれぐらい容量が減るのか確認したい information_schema.tables の INDEX_LENGTH では合計容量しか見えない mysql> SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH FROM information_schema.tables WHE…

MySQL Clone Plugin を利用してスレーブが簡単に作れた

お題 MySQL 8.0 で導入された、Clone Plugin を利用してスレーブを作ってみる dev.mysql.com やってみる Clone プラグインをマスターとスレーブ、両方に設定しておきます。 ※ MySQL 8.0 から plugin-load-add という書き方がサポートされました。従来のplugi…

ROW_FORMATとCHECKSUM TABLEの結果の違い

お題 CHECKSUM TABLE は ROW_FORMAT が異なっても同じ値を出すときがある。 どういう場合に、ROW_FORMAT が異なっていても、チェックサムが一致するのか? CHECKSUM TABLE(おさらい) CHECKSUM TABLE はテーブルの中身のチェックサムを取得するコマンドです…

TRIGGERの権限とDEFINER

お題 トリガーってどの権限で動くんだっけ? 定義したユーザの権限? トリガーを引いたユーザの権限? プロシージャと違って、SQL SECURITY の指定がない TLDR; トリガーはDEFINERに指定したユーザで動作する DEFINERをナシにすることはできない、省略した場…

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

お題 エラーになったクエリはスロークエリログに記録されるのか? されるとしたら、エラーになったクエリであることは判別可能なのか? 試してみます 1. 文法エラー まずは、文法エラー。 mysql> UPDATE t.tx1 SET c1 100; ERROR 1064 (42000): You have an …

MySQL 8.0 で無理矢理ダウングレードを試みる(未完了)

以前も書きましたが、MySQL のバージョンが 8.0 になってからダウングレードが出来なくなりました。マイナーバージョンであってもダウングレードすることが出来ません。ダウングレードするには、古いバージョンをインストールしたサーバを用意し、mysqldump…

MySQL Casual Talks vol.13 を開催しました

今週、MySQL Casual Talks vol.13 を開催しました。 mysql-casual.connpass.com コロナウィルスの件もあり、どれぐらいの方が参加してくれるか心配だったのですが、当日は雨にもかかわらず、30名以上の方が参加してくださいました。よかったです。 最初の…

MySQL explicit_defaults_for_timstamp ON と OFF の CREATE TABLE 時の挙動

explicit_defaults_for_timstamp が MySQL 8.0 からデフォルトで ON になりました。アプリケーションに影響が出る可能性があるため、要点を確認しました。 DML の挙動の変化は yoku0825 さんがまとめてます。 yoku0825.blogspot.com CREATE TABLE の挙動の変…

MySQL 8.0 の LOAD DATA で The used command is not allowed with this MySQL version エラー

TL;DR MySQL 8.0 で LOAD DATA INFILE LOCAL を利用するには、 サーバとクライアント両方で local-infile パラメータを ON にする必要がある セキュリティ強化のため、8.0から LOAD DATA INFILE LOCAL はデフォルトで無効にされた MySQL 8.0 で LOAD DATA IN…

MySQL 8.0 Authentication requires secure connection エラーの件

MySQL 8.0 から デフォルトのパスワードの仕組みが caching_sha2_password に変更されました。 これに関連して、yoku0825 さんが以下のエントリーを掲載してます。 yoku0825.blogspot.com yokuさんのエントリーを抜粋すると: caching_sha2_password プラグ…

MySQL 8.0 の binlog_row_metadata オプションを試す

TL;DR MySQL 8.0 で導入された binlog_row_metadata について調べた 今のところデータ連携用途以外では使うところはなさそう binlog_row_metadata オプションとは何か マニュアルでは以下のように記載されています。 デフォルトはMINIMAL(最小限) ROWベー…

MySQL の クッキーを焼いた

クッキーを焼く MySQL の クッキーを焼いた話です。技術的な話は出てきませんw Anycubic i3 Mega 3D プリンター 高精度 大きい プリンタサイズ 構造物取り易いヒートベッド (ブラック)メディア: 年末年始は、3D プリンタで遊んでました。 3Dプリンタ扱うの…

MySQL テストコードを書いてみる

先日、MySQLをソースからビルドする方法を書きました。今日はテストコードについてのエントリーです。 mita2db.hateblo.jp MySQL のテストコード mysql-test/suite ディレクトリ以下にテストコードが記述されています。 5800以上のテストが記述されています…

CentOS7 で MySQL 8.0 をソースからビルドする

yoku0825さんが、CentOS8 で MySQL 8.0 をビルドする記事を書いていました。 CentOS8でもビルドするために、あれこれインストールしないといけないようです。 yoku0825.blogspot.com CentOS7インストール直後の状態では色々足りない 最近のMySQLはビルドに最…

MySQL ヒストリーに記録されない条件

TL; DR; *IDENTIFIED*:*PASSWORD* にマッチしたクエリ、つまりパスワードを含むクエリはヒストリーに記録されない 環境変数 MYSQL_HISTIGNORE で記録しないクエリを追加指定できる ヒストリーに記録されない時がある mysql コマンド には履歴機能があります…

InnoDB FTSで検索できない文字があるときは innodb_ft_enable_stopword のせいかも

InnoDB FTS シリーズが続きます。今回は innodb_ft_enable_stopword についてです。 mita2db.hateblo.jp mita2db.hateblo.jp TL; DR ngram で、yakitori がヒットしない mysql> SELECT * FROM fts_ngram; +----+----------+ | id | c1 | +----+----------+ |…

Mroonga から InnoDB FTS への乗り換えを考えてみた

このエントリーはMySQL Casual Advent Calendar 2019 の7日目です。 実は、毎年 12 /7 日書いてます。 mita2db.hateblo.jp mita2db.hateblo.jp -- 昨日は、@SHINOHARATTT さんでした。 ポケモンを題材にして論理設計を学ぶ というエントリーでした。楽しく学…

InnoDB FULLTEXT Search の ngram_token_size

ngram_token_size パラメータは InnoDB FTS の ngram パーサーの設定です。ngram_token_size に指定した文字数ごとに文章をトークナイズします。 疑問 ngram_token_size をインデックス作成後から変更すると、どうなるのか? あり得るパターン CREATE INDEX …

MySQL admin_address にワイルドカードは指定不可

先日書いたエントリーについて、 mita2db.hateblo.jp MySQL Weekly で tom__bo さんから頂いた、感想へのフィードバック(と補足)です。 mysql-weekly.hatenablog.com 僕がやりたかったこと 接続あふれしている時でも、DBAは管理者アカウントで接続できるよ…

MySQLで管理用IFを使いつつ特権ユーザをローカルアカウントのみに絞りたい

以前、接続が溢れているとき(too many connectionsエラー発生時)でも接続可能にする Administrative Network Interface(管理NW IF) の概要をブログに書きました。この時は、特権アカウントの接続元との関連は書かなかったのですが、特権アカウントの接続…