MySQL

UPDATE1文だけでもデッドロックするという話

デッドロックは複数のトランザクションが複数のレコードをロックする場合にタイミングによって発生する。 トランザクションAがレコード1をロック→成功 トランザクションBがレコード2をロック→成功 トランザクションAがレコード2をロック→2のロックの解放待ち…

MySQLマニュアルの差分

MySQL 8.0.x はパッチレベルのリリースで機能追加がされていくんだけど、マニュアルは常に 8.0 の最新版しか公開されてない。 MySQL は OSS だけど、MySQL のマニュアルは自由なライセンスではないしリポジトリも公開されてない。 ライセンスは自由でなくて…

MySQL徹底入門第4版からの差分

2020年7月に出た「MySQL徹底入門 第4版」という本は MySQL 8.0.20 をベースとしてたんですが、ご存知の通り MySQL 8.0 はパッチリリースでどんどん機能が追加されてったりするんで、同じ 8.0 でも最新版とは機能の差分が出てしまってます。 ということで、自…

MySQL Parameters のデータの作り方

これは MySQL Advent Calendar 2020 の 25日目の記事です。 MySQL Parameters というページのメンテをしてます。 MySQL Paramters は MySQL のバージョン間の差分を表示できるものです。 現在次のバージョンを比較できます。 5.0.96 5.1.72 5.5.58〜62 5.6.3…

MySQL 8.0.22 で `ORDER BY ?` のプリペアドステートメントがフリーズする原因

tmtms.hatenablog.com の続き。 C API だと ORDER BY ? のプリペアドステートメントでクライアントがフリーズするというのを書いたんだけど、Go だと問題ない という話があったので、MySQL のプロトコルを追ってみた。 プリペアドステートメントを発行すると…

CentOS 7 の mysql コマンドでの日本語入力

某所で CentOS 7 で mysql コマンドで日本語入力ができないという話を見かけた。 mysql> プロンプトで日本語を入力しようとしても確定すると消えてしまうらしい。 自分は Ubuntu で普通に入力できてるので調べてみた。 結論からいうと、これはロケールの問題…

MySQL 8.0.22 DNS SRV レコードサポート

MySQL 8.0.22 の新機能で DNS SRV レコードのサポートというのがあったので試してみた。 https://dev.mysql.com/doc/refman/8.0/en/connecting-using-dns-srv.html MySQLサーバー3台 (a.example.com, b.example.com, c.example.com)とそれに接続するためのク…

MySQL 8.0.22 のプリペアドステートメントの非互換

MySQL 8.0.22 のリリースノートによるとプリペアドステートメントまわりに非互換があるらしい。 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-22.html For a prepared statement of the form SELECT expr1, expr2, ... FROM table ORDER BY ?,…

MySQL の接続まわりのエラー

MySQL で Host '〜' is blocked because of many connection errors が出るのってどういうときだっけ…とふと思ったので接続周りを調べてみた。 クライアントごとの連続接続失敗によるブロック マニュアル https://dev.mysql.com/doc/refman/8.0/en/blocked-h…

MySQL Parameters - プラグインとコンポーネントを有効にして Variable も追加

MySQL Parameters というページを公開してたら @tmtms still love this https://t.co/388NNoxxfr but would be so cool to have group_replication parameters too ;-)— lefred (@lefred) 2020年7月24日 と言われたんだけど、mysqld --no-defaults --help --…

Re: MySQL の NOW() と SYSDATE()

自分は全然気にしたことなかったんだけど、MySQL の NOW() と SYSDATE() は異なるらしい。 sakaik.hateblo.jp MySQL 8.0 のマニュアル (https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_sysdate) にも確かにちゃんと書かれ…

「MySQL徹底入門 第4版」が出るよ

「MySQL徹底入門 第4版」が 7/6 に発売される。 www.shoeisha.co.jp 電子書籍は翔泳社の直販がDRMフリー(たぶん)だからオススメ。 著者用見本誌も届いたので、さすがにこれからやっぱり発売できませんでした!ってことにはならないと思う。 長かった。 本当…

mrubyudf : C を書かずに Ruby だけで MySQL の UDF を作る

昨日はmrubyでMySQLのUDFを作ってみたんだけど、関数毎にCのプログラムを書くのがめんどくさいので、簡単なツールを作ってみた。 github.com 詳しくは README 参照。 fib.rb と fib.spec をこんな感じで作っておいて、 fib.rb LONG_LONG_MAX = 9223372036854…

RubyでMySQLのUDFを作る

昨日はCでMySQLのUDFを作ってみたんだけど、今日はRubyで作ってみる。Rubyと言ってもmrubyだけど。 mrubyは5年ぶりくらいに使ってみたんだけど、相変わらずドキュメントが少なくてなかなかつらい…。 まず mruby のビルド。MySQLのUDFは共有ライブラリにしな…

MySQLのユーザー定義関数(UDF)

MySQLのユーザー定義関数(UDF)は大昔に作った記憶があるけど、最近作ってなかったので試しに作ってみたメモ。 関数の中身はなんでも良かったんだけど、フィボナッチ数を求める fib()を作ってみた。 ちゃんと知りたい場合は、マニュアルとかサンプルプログラ…

MySQL 8.0.19 のオフセットつき日時リテラル

MySQL 8.0.19 のリリースノート にこんなのがあって、 MySQL now supports datetime literals with time zone offsets, such as '2019-12-11 10:40:30-05:00', '2003-04-14 03:30:00+10:00', and '2020-01-01 15:35:45+05:30'; these offsets are respected …

MySQL 8.0.19 で追加された TABLE と VALUES

1/13 に MySQL 8.0.19 がリリースされたんで、リリースノート を眺めてると気になるのがいくつか。 Important Change: MySQL now supports explicit table clauses and table value constructors according to the SQL standard. These have now been implem…

MySQL Parameters を拡張した

これは「MySQL アドベントカレンダー 2019」と「富士通クラウドテクノロジーズ アドベントカレンダー 2019」の4日目の記事です。 qiita.com qiita.com MySQL の各バージョン間のパラメーターの違いを比較できる MySQL Parameter というページを去年公開した…

MySQLと「令和」その2

MySQLでは異なる字が等しいと見なされることがあるということを書きました。 tmtms.hatenablog.com この動きはMySQLが独自に変なことをしているわけではなく、Unicodeの規則に従っています。 MySQL 8.0 のデフォルトのCollationは Unicode 9.0.0のUnicode Co…

MySQLと「令和」

新元号が「令和」に決まったことなので、MySQLでの扱いについての話を。 普通の文字 「令」も「和」もJIS第一水準に含まれている基本的な文字なので普通に日本語が使用できるcharsetで使用できます。 mysql> create table t ( utf8mb4 varchar(255) charset …

そろそろMySQLのutf8について一言いっとくか

MySQLのutf8 charsetは、やれ「罠」だの「絵文字が入らなくて使えない」だの「utf8という名前はutf8mb4の別名にすべき」だの、散々な言われようでディスられてかわいそうな charset なんだけど、というか主に私がそう言ってる気もするんだけど、そろそろ utf…

MySQLのsjisとcp932の違い

今さらですけど、自分でもちゃんと把握してなかったので調べてみました。 MySQLのCharsetのうちシフトJIS系のものはsjisとcp932の二つあります。 どちらもコードの範囲は次のように同じです。 1バイト文字 0x00-0x7F, 0xA1-0xDF 2バイト文字の1バイト目 0x81…

MySQL Innovation Day Tokyo で MySQL 8 の文字コードについて話した

MySQL Innovation Day Tokyo に参加して10分ほど喋ってきました。 ひさびさに巨大サキラちゃん登場。本人曰く5年間ほど倉庫に隠れてたそうです。 昼ごはんは今半のすき焼弁当でした。豪華! 会場の様子。百数十人で満員でした 以下わたしの発表内容。スライ…

MySQLパラメータ比較

Vue.js の勉強をしようと思ってMySQLのバージョン間のパラメータを比較できるページを作ってみました。 MySQL Parameters やってることは、あらかじめ mysqld --no-defaults -v --help の出力からパラメータの名前と値を JSON にしておいて、それを表示して…

本当はこわいMySQLプロトコル

11/28 に Haskell で MySQL の Xプロトコルを実装したという話が聴ける Club MySQL というイベントがあったので参加してきました。 clubmysql.connpass.com MySQLのプロトコルの話ということで、平日の夜とは言え東京で参加者9人(発表者含む)というマニアッ…

MySQL の max_connections, table_open_cache, open_files_limit の関係

昔書いた記事を久々に見てみたら何書いてあるかさっぱりわからなかったので、最新情報で書き直してみます。 tmtms.hatenablog.com 以下は MySQL 5.6, 5.7 について書かれています。 MySQL の max_connectoins, table_open_cache, open_files_limit パラメー…

MySQLの日本語コレーション

4月にMySQLの日本語コレーションについて語り合う場に呼ばれていろいろ話を聞いてきました。すぐにブログを書こうと思ったんですが、はや2ヶ月経過…。 ときどき、自分がMySQLの文字コードに関して発表する際に、次のようなスライドをいれてるんですが、 MySQ…

MySQL 5.7が何も言わずに起動できなかったのでメモ

MySQL 5.6と同じ方法でMySQL 5.7を起動しようとしたら何も言わずに黙って終了してしまって少しだけハマったのでメモ。 MySQL 5.6では次のようにして起動してました。 # /usr/local/mysql-5.6/bin/mysqld --no-defaults --user=mysql --basedir=/usr/local/my…

MySQLユーザ会会 in 長野 を開催しました

5/13(土)に「MySQLユーザ会会 in 長野」を開催しました。 nseg.connpass.com 「会」が2つあるのは仕様です。「MySQLユーザ会」の会合で「MySQLユーザ会会」です。 開催経緯はこんなかんじです。 自分もMyNAとかに気軽に遊びに行きたい。— とみたまさひろ (@t…

Unicode Collation Algorithm

文字コードは面白いね! わーい! たのしー! MySQL で utf8mb4_unicode_ci コレーションを使用した時に「」=「」や「ハ」=「パ」になる問題があります。 この utf8mb4_unicode_ci ってなんぞや?と思ってマニュアルを見てみると、 MySQL は、http://www.un…