mita2 database life

主にMySQLに関するメモです

MySQL

MySQL キャラクタセット(文字コード)の変換方法おさらい

ALTER TABLE xxx MODIFY 〜 でキャラクタセットを変換するのと、ALTER TABLE xxx CONVERT TO〜 で変換するのは、どう違うんだっけ? ってなったので、おさらい。 データベースのデフォルトキャラクタセット MySQL はカラム単位でキャラクタセット(文字コー…

MySQL Group Replication vs Percona XtraDB Cluster 〜DDLのKILL 編〜

MySQL のマルチマスターのソリューションである、PXC と Group Replication の比較記事が続きます・・・ PXC では DDL は KILL できない Percona XtraDB Cluster (Galera) では DDL実行中は、すべてのノードで更新が止まると、以前のエントリーで書きました…

MySQL Group Replication vs Percona XtraDB Cluster 〜フルデータコピー中のDDLブロック 編〜

フルデータコピーが行われるタイミング PXC や MySQL Group Replication では、新規にノードを追加したタイミングや、障害発生後、既存ノードからデータをコピーし、復旧する機能があります。 データコピー中のDDLの挙動の比較 フルデータコピーには非常に時…

MySQL Group Replication vs Percona XtraDB Cluster 〜DDLのロック編〜

Gelera Cluster / Percona XtraDB Cluster Galera Cluster for MySQL は フィンランドの会社が開発している、MySQL の fork (派生製品)の1つです。wsrep API と呼ばれる独自のレプリケーション機構を使った、マルチマスター型のHA構成を組むことができま…

Percona Playback で 本番 MySQLに流れているクエリを試験環境でリプレイする

データベースのバージョンアップの際、アプリケーションの網羅的なテストが可能であれば良いのですが、どうしても難しいケースがあります。 そのような場合、リプレイツールで本番環境に流れているクエリを、試験環境でリプレイ(再現)し、動作確認を取る方…

MySQL Shell で検証環境を作る

日々、検証のためDBサーバを作っては捨て、作っては捨てる・・を繰り返しています。 そうすると、検証環境を作る手間を省きたくなってきます。 dbdeployer、docker-compose やchef など、いろいろなツールを試してきましたが、結局、白紙の仮装マシン(VM)…

MySQL スロークエリログからやたら遅いクエリだけ取り出す

日常的に、long_query_time をちょっと超えているクエリが流れていて、スロークエリログが多く出力されているDBってあったりしますよね? そんなログからノイズとなってしまっている、ちょっと遅いクエリは除いて、非常に重症のクエリのログだけに絞って見た…

MySQL ALTER TABLEとその影響まとめ

MySQLの初期のALTER TABLEの実装は非常にシンプルな実装でした。 新しいテーブル定義で(内部的に)一時テーブルを作成し、そこに既存のデータをコピーして、コピーが終わったら入れ替えます。コピー中は更新をブロックします。 MySQL v5.6 で オンラインDDL …

MySQL Shell dumpInstance でバックアップ中はDDL が待機させられる

MySQL Sever Blog に MySQL Shell 8.0.21 の Dump / Import 機能についてエントリーが投稿されています。 並列化により非常に高速に Dump / Import 出来ることなどが示されてます。非常に強力なツールであることが感じられます。 MySQL Shell Dump & Load pa…

MySQL のロック範囲は実行計画で変わるという話

最近、ANDPADでデータベース周りの技術顧問をさせて頂いています。ANDPADのエンジニアの皆さんから「データベースのロックまわりを詳しく知りたい!」というお話を受けて、先日、ロック周りの社内勉強会を開催しました。 SQLでは一般的なプログラミング言語…

PHP mysqli ドライバの max_persistent 設定の使い所がよくわからなかった件

TL;DR PHP の mysqli.max_persistent で指定できるのは、HTTPワーカ プロセスあたり のコネクション数だった 「全部で何個まで」っていう制限値じゃなかった PHP mysqli.max_persistent 設定 Persistent Connections まわりのエントリーを先日書きました。 m…

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

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

スロークエリログを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 …