mita2 database life

主にMySQLに関するメモです

mysql_config_editor は シャープを含むパスワードをうまく扱えない

mysql_config_editor は ログイン情報を管理するためのコマンドです。~/.mylogin.cnf に難読化されたIDやパスワード、接続先の情報が記録されます。$ strings .mylogin.cnf#Xu*|難読化されているので、中身を確認するには、my_print_defaults コマンドで表示…

MySQL 8の新機能 LATERAL句によるSQLチューニング

MySQL 8.0.14でLATERAL句がサポートされました。一瞬、LITERALに空目しましたが、LATERAL(側面)でした。LATERAL句を試してみます。サンプルとしてこのようなテーブルを扱います。従業員の一覧(employees)と、各従業員の特定の期間の月額給与(salaries)…

SHOW PROCESSLISTのHostがパーセントになるケース

プロシージャでDEFINERを指定して作成すると、Hostの覧が%になる。以下詳細。まず、通常のケース。Id 37のセッションは正しく root が localhost から接続していると表示される。mysql> SELECT CONNECTION_ID( );+------------------+| CONNECTION_ID( ) |+-…

mysql コマンドを使ってシェルスクリプトを綺麗に書くコツ

mysql コマンドは -e で実行するSQLを指定できる。セミコロンで区切れば複数のSQLを同時に実行することもできる。$ mysql -e 'select 1; select 2'+---+| 1 |+---+| 1 |+---++---+| 2 |+---+| 2 |+---+-e を複数指定して、これでもいける。複数行に分けて書…

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のワイルドカード証明書がうまく扱えず、大量にサーバを管理するときは大変。。。という話をしまし…

MySQL 8.0 でクエリーキャッシュはなくなりました

先日、MySQL 8.0 がGAリリースされました。888888!こないだ、MySQL 5.7がGAになった気がしたんですが、調べてみたら、5.7 GAは2015/10でした。いつのまにか約2年半もたっていたようです。。。頂いたMySQL 8.0 Tシャツ。これは背中側。 さて、MySQL 8.…

MEMORYエンジンが勝手にGTIDを進めてた

スレーブの gtid_executed がいつのまにかマスターとずれていることがあって、「スレーブに書き込んだうっかりさんは誰・・・?」と思ったらMEMORYエンジンが犯人だった。MEMORYエンジンはディスクにはデータを保存せず、メモリ上のみデータを保存する。DBを…

Index column size too large エラーでレプリケーションが停止

マスターが MySQL 5.5 で スレーブが 5.6 の構成で、Index column size too large エラー でCREATE TABLEがコケてレプリケーションが止まった。はて?5.5で通ったDDLがなぜ5.6でエラー?mysql> SET GLOBAL innodb_large_prefix=OFF;Query OK, 0 rows affecte…

Percona XtraDB Cluster 5.7 のバグたち(修正済)

私はRDBで一番大事なのは、durability (永続性、整合性) だと思っている。データの整合性は、気づくことが難しい。整合性を疑って、正しいデータと比較して初めて気づける。気づいたときには影響が広くなっており、すでに取り戻せないデータが発生している・…

ファイル倉庫系DBをSQLiteでなんとかできるか

MySQLのDBAをしていると、MySQLを「SQLでアクセス可能なファイル倉庫」として使う人たちに出会うことがある。 彼らの要件はだいたいこんな感じ・・・ SQLを喋れる「何か」である必要があるが、MySQLである必要はない DBサーバに入れておけば、可用性やバック…

MySQLのデッドロックについて

この記事は MySQL Casual Advent Calendar 2017 の7日目です。 最近、デッドロックを真剣に対応する機会があったのでその時のメモです。 デッドロックとは? デッドロックとは「複数のトランザクションが互いがロックの開放を待ち、結果として、どの処理も先…

MySQL 8.0 で導入されたリソースグループを試す

MySQL 8.0.3 リリース候補版がリリースされました。8.0.3はDMR(Developer Milestone Release) ではなく、 RC(リリース候補) でした。正式リリースまで一歩前進。正式リリースが楽しみですね。 8.0.3 ではリソースグループという機能が導入されました。 The p…

OSC 2017 Okinawa で MySQLの冗長構成について発表してきた

大阪で話した内容とほぼ一緒なのですが、、、MySQL Shell を試してみました。 OSC 2017 Okinawa MySQL の高可用性構成比較 と新機能 Group Replication from Satoshi Mitani OSC Hokkaido も参加したので、これで南は沖縄から北は北海道まで行ったと言える・…

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

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

MySQL Causal Talk vol.10 で Group Replication について話した

MySQL Causal Talk vol.10 で Group Replication について話してきました。 最近ずっとGroup Replication しか触ってない・・・・ MySQL Group Replication - MySQL Casual Talk vol.10 from Satoshi Mitani また、 myfinder さんから、MySQL Casual slack …

OSC 2017 Osaka で MySQLの冗長構成について発表してきた

OSC Osaka で MySQL の高可用性構成について発表してきました。 会場でフォローして頂いた。sakai さん、ありがとうございました! OSC 2017 Osaka MySQL 落ちないDBサーバの作り方 from Satoshi Mitani

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 は追加プラグインとして提供されているため、明示的に使…

performance_schema を top っぽく見るツール ps-top

とある企業のDBA @yoku0825 さんに ps-top というものを教えてもらったので試してみました。 ps は 「Performance Schema」のps です。MySQL の パフォーマンス統計である performance_schema の情報をtopコマンドのように表示してくれる。 インストールps-t…

MySQL 5.7 InnoDBで日本語全文検索できるようにした

MySQL 5.7.6 からMecab によるトークナイズが標準搭載されました!https://dev.mysql.com/doc/refman/5.7/en/fulltext-search-mecab.htmlMySQL 5.7 でInnoDB FULLTEXT SEARCH のパーサープラグインを独自に作れるようになってます(従来はMyISAMのみ)。23.2…

InnoDBのFULLTEXT SEARCHに変更してハマった

MyISAMとInnoDBでFULLTEXT SEARCHは完全に同じだと思い込んでたのでハマった。MyISAMのNATURAL LANGUAGEモードの検索では半分以上の行に含まれるワードは検索対象にならない。InnoDBではその仕様はなくなってる。NATURAL LANGUAGEモードを使うケースほとんど…