mita2 database life

主にMySQLに関するメモです

MySQL

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

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

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 8.0 で無理矢理ダウングレードを試みる(未完了)

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

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…

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) の概要をブログに書きました。この時は、特権アカウントの接続元との関連は書かなかったのですが、特権アカウントの接続…

日本MySQLユーザ会 望年LT大会2019 と Casual Talks 開催告知

はてなブログに引っ越して、初めての記事です。 先日、MyNA 忘年LT大会に参加してきました。 keny_lala さんが、MySQL クイズやったりしてて、面白かったです。 sakaik さん、企画ありがとうございます。来年もよろしくお願いします! sakaik.hateblo.jp 自…

MySQL の 巨大な core ファイル 対策(MySQL 8.0〜)

昨日記事では core ファイルを圧縮する方法を紹介しました。 昨日の記事では、OSの機能(kernel.core_pattern)を使って対応する方法を紹介しました。 mita2db.hateblo.jp MySQL 8.0からは、MySQLの機能(設定)を利用して、巨大なcoreファイルを抑制するこ…

MySQL table_encryption_privilege_check パラメータの挙動

前回の記事ではdefault_table_encryption パラメータについて触れました。 default_table_encryptionでは、ENCRYPTION句を省略した場合の挙動を制御することができます。今回は、table_encryption_privilege_check パラメータについて確認してみます。 この…

MySQL Casual Talks vol.12 で発表してきた

MySQL Casual Talks vol.12 で発表してきた。 MySQLの容量とか圧縮まわり from Satoshi Mitani MySQLに入れるとしたらどれぐらいの容量が目安かアンケートしたりしてみました。 結果は、結構ばらけました。。。もうちょっと傾向が出ることを期待してたのです…

MySQL default_table_encryption パラメータの挙動

MySQL 8.0 で default_table_encryption パラメータが追加されてました。「テーブルの暗号化をデフォルトで有効にするオプションかな?」と思って、CREATE TABLEしてみるも変わらず・・・マニュアル見ると、データベースとテーブルスペースに効くと書いてあ…

MySQL Technology Cafe #5 に参加してきた

前回の、MySQL Technology Cafe #4 に続き、#5 に参加してきました。タイムテーブル 時間内容登壇者18:00-18:25受付-18:25-18:30はじめにMySQL GBU18:30-19:15MySQL 8.0 の便利機能とSQL標準MySQL テクニカルアナリスト 木村明治 氏19:30-19:40MySQL Binlog …

プロシージャの中身はPerconaだとスロークエリログに落ちる

プロシージャの中身のクエリはスロークエリログに落ちない の続き。Vanilla MySQLだとプロシージャの中身がログに落ちませんが、Percona Server ではスロークエリログが拡張されていて、ログに落ちます。log_slow_sp_statements で出力の有無を設定します。…

プロシージャの中身のクエリはスロークエリログに落ちない

とあるMySQLのデータベースで、性能劣化した疑いのあるプロシージャがありました。プロシージャには複数のSELECTやINSERTが含まれています。どのSQLが遅かったか突き止める方法はあるのでしょうか?プロシージャに含まれている、各SQLはスロークエリログに落…

サーバサイドプリペアドステートメントはperformance_schemaに記録されない

あるクエリがperformance_schemaに記録されなかった。原因を調べていて1つ記録されない条件を見つけたのでメモ。まず、問題ないパターン。mysql> SELECT NOW();+---------------------+| NOW() |+---------------------+| 2019-07-30 10:40:47 |+----------…

mysqldumpで出力されるINSERT文の最大長は?

mysqldumpの --extended-insert オプションを利用すると、出力されるINSERT文がバルクINSERTの形式になる。まとめてINSERTすることで、書き込み回数を減らし、importにかかる時間を短縮するための仕組み。どこまで長いINSERT文が生成されるんだろうか?まさ…

MySQL 8.0でレスポンスタイムのヒストグラムが見れるようになった

このエントリーはMySQL Casual Advent Calendar 2018の7日目です。 自分は筆が遅く、11月から準備しようしよう、と思ってたにも関わらず、結局、直前になって書いてます。。。 さて、MySQL 8.0になって、performance_schemaが15個増えてました。5.7では、87…

MySQL 8.0でrootのSHOW GRANTSの表現が変わった

8.0からGRANT ALLしたユーザをSHOW GRANTS FORすると、ALL PRIVILEGESではなく、 実際に付与されている個別の権限が列挙されるようになってた。 mysql> GRANT ALL PRIVILEGES ON *.* TO 'super'@'%';Query OK, 0 rows affected (0.07 sec)mysql> SHOW GRANTS…

MySQLでワイルドカード証明書が扱えないという話をしたらすぐ扱えるようになった件

07/23日の日本MySQLユーザ会で、MySQLのSSLや透過的暗号化について発表してきました。 透過的暗号化とSSL 使ってみた from Satoshi Mitani 発表の中で、 SSLのワイルドカード証明書がうまく扱えず、大量にサーバを管理するときは大変。。。という話をしまし…

MyNA 会 201703 で MySQL のDB利用者向けベストプラクティスの話してきた

MySQL のプロダクトマネジャーである Matt Lord さんをお招きして 日本MySQLユーザ会会 を開催しました。 当日はベストプラクティス・・・というかDBAからのお願いを発表してきました。DB利用者に意識してほしいことを中心に取り上げてみました。 My MySQL B…

Group Replication を試す(4) リカバリ

Group Replication で特定のサーバのデータが吹き飛んでしまった場合の復旧手順を確認。 動いているサーバからdumpを取って、復旧すれば良いのだが、、、--single-transaction で mysqldump しようとすると、GRではSavepoint がサポートされていないため、 …

Group Replication を試す(3) 障害時の挙動

group_replication_recovery チャネルは障害後のサーバ間の差分同期のみに使われる。 Group Replication のステータスが ONLINE 状態のときは、Master_HostがNULL、Slave_{IO,SQL}_Running は NO。 mysql> select * from performance_schema.replication_gro…

Group Replication を試す(2) ロックの挙動

テスト用のテーブル mysql> CREATE TABLE grplt.tbl (pk SERIAL, col1 int, who_update varchar(10));Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO grplt.tbl (col1, who_update) VALUES (1, 'node1') , (2, 'node1'), (3, 'node1');Query OK, …

Group Replication を試す(1) 導入編

MySQL 8.0 で入ると噂されていた、Group ReplicationがMySQL 5.7.17 でリリースされました。5.7 GAとは何だったのか。。。 とはいえ、早く使えるようになったのは、うれしいです。※ Group Replication は追加プラグインとして提供されているため、明示的に使…