MySQL

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…

MySQLの文字コード事情

この前 MySQL Casual に登壇して、「MySQLの文字コード事情」と称して発表してきました。 終電の都合で途中退席しましたが楽しかったです。また機会があれば参加したいです。 発表スライドはこちら MySQLの文字コード事情 2017版 from Masahiro Tomita www.s…

MySQL で utf8 と utf8mb4 の混在で起きること

MySQL を UTF-8 で使おうと思ってハマりがちなのは charset utf8 を指定してしまうことです。 MySQL の UTF-8 には歴史的事情により utf8 と utf8mb4 の二つあります。 UTF-8 は1バイト〜4バイトで1文字が構成される文字コードですが、MySQL の utf8 は4バイ…

MySQL X Protocol を解析してみる

前回 MySQL X Protocol で使用している Protobuf について書きましたが、それだけでは MySQL のプロトコルは解析できません。 TCP を流れるデータは区切りがないので、書き込み側が Protobuf データをただ垂れ流しても、読み込む側がどう読んで良いのかわか…

RubyからProtobufを使う

MySQL 5.7.12 から追加された X Protocol は Protobuf というのを使ってるらしいです。 Protobuf というのをそこで初めて知ったので、とりあえず Ruby から Protobuf を利用する方法を調べてみました。 Protobuf はデータ構造をバイト列にエンコードしたり、…

MySQL Shell / X DevAPI / X Protocol

MySQL 5.7.12 で突如登場した MySQL Shell とか X DevAPI とか X Protocol とかが面白そうだったので調べてみました。 Document Store とかも同じ文脈で語られてて、それぞれの用語が何を表してるのかややこしかったので、まずその辺から。 X Protocol mysql…

MySQL ソケットピア証明書認証プラグイン

全然知らなかったんですが、MySQLに「ソケットピア証明書認証プラグイン」というのがあるのを知りました。 http://dev.mysql.com/doc/refman/5.6/ja/socket-authentication-plugin.html これを使うとOSのログインユーザーと同じ名前のMySQLユーザーであれば…

MySQLのタイムゾーン

YAPC::Asia 2015 のセッションで、MySQL のタイムゾーンの話が出ていましたが、以前タイムゾーン周りで少しはまったことがあったのを思い出したので書いてみます。 MySQLのデフォルトのタイムゾーンは mysqld 起動時のシステム設定です。TZ 環境変数の値か、…

MyNA(日本MySQLユーザ会)会 2015年4月

4/22(水) に MyNA会が開催されたので久々に参加しました。 というか、私の東京出張に合わせて開催されたみたいなので強制参加です。 ちょっと前に話題になった「=問題」についてしゃべってきました。 スライド: = from Masahiro Tomita www.slideshare.net…

Ruby, MySQL のうるう秒の扱い

2015/7/1 にうるう秒が挿入されるということで、うるう秒の話題が盛り上がってるようなので自分も書いてみます。 Linux 上のプログラムが時刻で60秒を刻むには、うるう秒対応のタイムゾーンを使う必要があります。 通常はうるう秒を考慮していないタイムゾー…

Postfix から MySQL を使う

これは Postfix Advent Calendar 2014 の15日めの記事です。 Postfix Advent Calendar 2014 - Qiita ルックアップテーブル Postfix のルックアップテーブルは Linux だと通常は hash 形式のファイルですが、ファイルの代わりに MySQL, PostgreSQL, LDAP 等を…

MySQLユーザーがPostgreSQLを触ってみたメモ

最近なぜか MySQL を使う Ruby アプリを PostgreSQL に対応する羽目になっているのですが、今までほとんど MySQL 以外の RDBMS を触ってなかったので、色々ハマったりしたのでメモっときます。 なお PostgreSQL 歴が浅いので間違ってること書いてるかもしれ…

Ubuntu の MySQL を標準以外のディレクトリで動かす

Ubuntu の MySQL の datadir は /var/lib/mysql です。これを別のディレクトリに変更して動かそうとするとエラーになります。 # mkdir /hoge # mysql_install_db --datadir=/hoge Installing MySQL system tables... 140614 8:57:23 [Warning] Can't create …

MySQL Talk in 長野を開催しました

もう二週間も経ってしまいましたが、3/15 に NSEG 第49回勉強会として「MySQL Talk in 長野」を開催しました。 本当は 2/15 に開催する予定だったのですが、例の大雪でひと月延伸となりました。 会場はいつも NSEG 勉強会で使わせていただいているケイケンさ…

MySQL の SQL エスケープ

この記事は MySQL Casual Advent Calendar 2013 の15日目の記事です。 今、空前の SQL エスケープブームみたいなので、このビッグウェーブに乗っかってみます。 でも面倒なのでセキュリティについての話はしません。カジュアル! 文字列リテラルとエスケープ…

Ruby/MySQLの速度

Ruby 2.1.0 preview1 がリリースされたので、Ruby/MySQL の速度を測ってみました。 測定環境 ThinkPad X220 Core i5 2.3GHz Linux Mint 15 32bit MySQL 5.6.13 測定内容は https://github.com/tmtm/ruby-mysql/tree/master/bench 参照。 ruby-mysql すべて R…

MyNA会2013年7月 に行って来ました - MySQLのプロトコル解説

7/29 に MyNA会2013年7月 というイベントがあったので、行って喋って来ました。 MySQLのプロトコルという誰得なネタを発表しました。 何故か2ヶ月ほど前のスライドにアクセスが急増している昨今ですが、こっちも見てください。でも面白くはないです。 MySQL…

MySQL の "Illegal mix of collations" エラーについて

MySQL で「Illegal mix of collations」というエラーが出ることがあります。テーブルの charset と接続の charset 等、すべてを utf8 などで統一してれば出ないので、あまり見ることはないかもしれません。 私はカラム毎に charset を指定することがあるので…

OSS貢献者賞を頂いたので昔話をします

この記事は、おっさんの自分語りと昔話なので、あまり読む価値はないです。 もう1ヶ月くらい前になるのですが、OSS貢献者賞を頂きました。 最近はあまりOSSに貢献するようなことをしてる自覚はなかったので、なぜ自分が候補にあがったのか謎でした。OSS貢献…

Ruby/MySQL 2.9.9

Ruby/MySQL 2.9.9 を作りました。 Ruby/MySQL Ruby/MySQL は Ruby から MySQL を使用するためのライブラリです。特徴: Ruby だけで書かれているためコンパイル不要 Ruby 1.9 の Encoding 対応 Ruby のスレッドでも動作 MySQL C API ライブラリ(libmysqlclien…

MySQL Beginners Talk #mysqlbt で発表しました

MySQL Beginners Talk に行って喋ってきました。 初心者向けMySQLの始め方 View more presentations from Masahiro Tomita 匿名ユーザーとか不要なユーザーの削除まわりの話は、手で削除するんじゃなくて mysql_secure_installation を実行すればいいと Twit…

Ruby/MySQL

最近 Rails でプログラム作ったりしてるのですが、Ruby/MySQL が Rails で使えないことがわかったので、1年以上放置していた Ruby/MySQL をいじって使えるようにしてみました。Ruby/MySQL というのは Ruby スクリプトから MySQL を使用するためのライブラリ…

mysqldump --single-transaction に --flush-logs をつけてはいけない

(いまだに時々ブクマされていたりしますが、これはバグで MySQL 5.5.21 以降では修正されています。)mysqldump は MySQL のデータのバックアップを取得するコマンドです。mysqldump に --single-transaction を指定すると一貫性を保持したバックアップを取得…

MySQL最新ロードマップセミナー2011

MySQL最新ロードマップセミナー2011 に行ってきました。講師は肩書き長すぎな 梶山さんでした。 「お客様講演」は都合がつかずに中止でした。残念。 以下適当なメモです。嘘書いてあるかもしれません。 MySQL State of The Dolphin Oracle は MySQL に対して…

UTF-8 のサニタイズ

UTF-8 文字列中に UTF-8 として正しくないコードが入っていた場合に、その文字を「?」などに置き換えたいことがあります。たとえば MySQL に登録するときは不正な文字を消しとかないと、その文字以降すべて消えてしまいます。 mysql> insert into t (c) valu…

NSEG 14 - MySQLの文字コード

NSEG14 に参加しました。はじめはそのつもりはなかったんですが、枠が空いてたので発表することにしました。急遽決めたので、当日の15時すぎまでスライド作ってました。今回は、つい最近 MySQL の文字コードまわりでハマったので、それをネタにしてみました…

MySQL 5.5 の unicode collation で同一視される文字

MySQL の collation について調べてたら、 今回の実験で、utf8_unicode_ciによる大文字-小文字や全角-半角の同一視に関する動作はなんとなく分かりましたが、どの文字が同一視されるのかを記載した資料ってあるのだろうか? http://d.hatena.ne.jp/end0tknr/2…

MySQL5.5 に groongaストレージエンジン入れてみた

groongaストレージエンジンは現在 MySQL 5.1 にしか対応してないようですが、MySQL 5.5.6-rc に入れてみました。環境は CentOS 5.5 x86_64 です。用意するもの groonga のソース: goonga-1.0.2.tar.gz http://groonga.org/download/ より groongaストレージ…

MySQL/Ruby 2.8.2

MySQL/Ruby にバグがあったので 2.8.2 をリリースしました。ダウンロードはこの辺から→ http://rubyforge.org/projects/mysql-ruby/Mysql#insert_id が 32bit を超える場合に不正な値を返すというものです。具体的には BIGINT AUTO_INCREMENT の場合に、自動…

Ruby/MySQL 2.9

Ruby から MySQL を使うための pure Ruby ライブラリ Ruby/MySQL 2.9 を公開しました。まだベータ版です。 http://github.com/tmtm/ruby-mysql/tree/2.9前の Ruby/MySQL は 0.2.6 だったのですが、今回 2.9 とした理由は: Cライブラリ版の MySQL/Ruby 2.8.x …

MySQLユーザー会会2009冬

MySQLユーザー会会2009冬に参加。 16時前に長野の会社を出て、19時前に六本木のGREEに到着。19時に始まるはずだった池田さんのセッションだったんだけど、プロジェクタに出力できないというトラブルが発生。 事情によりUSBが使えないPCなので、他のPCにデー…

Ruby/MySQL 3.0.2 alpha

Ruby/MySQL 3.0.2 です。相変わらずアルファ版です。 インストール方法: # sudo gem install tmtm-ruby-mysql --source http://gems.github.com 3.0.1 からの変更点。 Ruby 1.9 対応 これまでのでもちゃんと動くんじゃないかなぁ…と漠然と思っていたのですが…

Ruby/MySQL 3.0.1 alpha

Ruby/MySQL 3.0.1 を作りました。相変わらずアルファ版です。インストールは次のように。 # sudo gem install tmtm-ruby-mysql --source http://gems.github.com3.0.0 からの変更点 Mysql#query で勝手にプリペアドステートメントを使うのをやめました。いろ…

table_cache, max_connections, open_files_limit の関係

昔はマニュアルに書いてあったような気がしたけど、最近のマニュアルには見当たらないのでメモ。mysqld が同時に使用可能なファイル数は open_files_limit というパラメータで指定します。ただし、mysqld は最低でも table_cache*2+max_connections+10 --- (…

Ruby/MySQL 3.0.0 alpha

github に Ruby/MySQL 3.0.0 を置きました。git にも gem にも慣れてないので試行錯誤でしたが、なんとか置けたようです。github は gemspec を置いておけば自動的に gem を作ってくれるはずなのですが、罠に嵌まってもがいてました。 GitHub では *.gemspec…

MySQL 5.1 InnoDB が遅い

Rubyist Magazine 25号が出ました。Ruby 1.9.1 についての有用な記事が盛りだくさんです。「Ruby 1.9 で Web アプリを想定したベンチマークをとってみた」は「言語の速度がそのままアプリケーションの速度になるわけではない」ということについて、実際にベ…

MySQL/Ruby 2.8.1

Ruby 1.9.1 がリリースされました。が、MySQL/Ruby は 1.9 に対応してませんでした。気づいてませんでした… orz。とりあえず、Ruby 1.9.1 でもコンパイルと簡単なテストを通るようにしてみたものを、MySQL/Ruby 2.8.1 としてリリースしました。ダウンロード…