サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
mir.hatenadiary.org
MySQLでは以下のように行うことでカラム単位での権限付与と権限剥奪を行うことができます. 以下のようなテーブルがあったとして mysql> CREATE TABLE t1 (c1 int primary key, c2 int);主キーであるc1の更新は許可したくないのでc2のみ更新(UPDATE)してもよいというような許可を与える場合. mysql> GRANT UPDATE (c2) on test.t1 to 'foobar'@'localhost' identified by 'foobar';というようにやります.(この例では"test"データベースが対象となっているので意味はありません) この設定内容は"mysql"データベースからもSELECT文で見れますが,Information_Schemaを使った場合には以下のように見ることができます. mysql> SELECT *
以前の記事 [MySQL] Understanding MySQL Internalsを読む(1) [MySQL] Understanding MySQL Internalsを読む(2) [MySQL] Understanding MySQL Internalsを読む(3) [MySQL] Understanding MySQL Internalsを読む(4) [MySQL] Understanding MySQL Internalsを読む(5) Fieldクラス Fieldクラスは、数値型、文字列型、時間型といった各種データ型を定義するための抽象クラスです。クエリを処理する際、ほとんどのケースでテーブルのフィールドが関連してくるため、このクラスは主にパーサとオプティマイザでの処理に使用されます。Fieldクラスはsql/field.hに定義されていますが、一部はsql/field.ssに
また例によって考えてみた.僕らJ2EE技術者は「Log4jとかって非同期でログを出してくれているんだよね」とか「非同期処理をしたかったらThreadをnewして別スレッドで処理を実行させろ」とか「でもEJBではThread使うの禁止だからMessage Driven Bean使え」とか思っている. そんなの当たり前だと昨日の今日まで思っていたわけだけど,本当はなんで非同期処理ができるのか,よ〜く考えると,まるで分かっちゃいない. 「いやだって別スレッドで起動すれば非同期に」とここで言うと無限ループ. さて,実は数日前『詳説Linuxカーネル』という本を買って,そういったことを理解するための情報源を入手していたので調べてみた.(この本はOSの一般的なアーキテクチャを理解するための教科書として秀逸,との評判があったので) ちょこっと引用抜粋.まずはプロセスから. プロセスの概念は,どのようなオ
MySQL日本ユーザ会(MyNA)のMLで話題にでていたので調べてみた. Timestamp型カラムに"0000-00-00 00:00:00"が入っていた場合にConnector/Jを経由して取得した際に,ver3.0系ではnullが返ってきていたがver3.1以降はSQLExceptionがスローされるようになっていて,この挙動にアプリが影響を受けるためにConnector/JのバージョンUPを控えている,という話が発端. 単純なコードを書いて再現してみると確かにver3.0系ではnullが返り,ver3.1以降ではSQLExceptionが返る.最初は状況がよく飲み込めなかったのでバグである疑いも持ちながらいろいろコードを読んだりドキュメントを読んだりしてみたら,どうやらこれは変更しがたいものであることが分かった. ver3.0からver3.1にアップグレードする際の注意点としてドキ
PICとは 任意のアドレスにロード可能なコードのこと。データのアクセスやジャンプは相対アドレスで行われます。 共有ライブラリはPICでコンパイルする PICでコンパイルすることで共有ライブラリが意図している本来の機能を発揮できます。PICでないと実行時の再配置の処理が増えて遅くなったり、物理メモリ上にある共有ライブラリを複数のプロセスのユーザメモリ空間で共有するということができません。 PICでコンパイルするにはgccの場合は"-fPIC"を指定します。 よさげなページ発見 => http://0xcc.net/blog/archives/000107.html これBinary Hacksの著者の人かな? MySQLのconfigure時に--with-picを指定すると gccに"-fPIC"フラグが渡されてMySQLの静的ライブラリが再配置可能になり、他の共有オブジェクトへのリンクが
8月下旬にver0.1テストリリースが行われてから1ヶ月弱が経過しました。 まだver0.1であるにもかかわらず、案件への投入を検討して問い合わせを下さった方がいらっしゃったりとか、思った以上に反響をいたいだております。ありがとうございます。 開発の方は相変わらずのんびりとしたペースで進んでおりまして、、、おりまして、、と思っていたらgroonga本体の方はver1.0の安定版がリリースされました! これはストレージエンジンの方も開発速度を上げていかないといけないなと思っていた矢先、なんと最近DeNAへ転職された松信さんからgroongaストレージエンジン用のinformation_schemaプラグイン導入パッチを寄付いただきましたー! information_schemaプラグインというのはpluggable storage engineなどと同様にMySQL 5.1で追加されたプラグ
MySQL 5.1対応の全文検索エンジンである「groongaストレージエンジン」がテストリリースされました。 groongaストレージエンジンの公式サイト http://mroonga.github.com/ ご存知の方もいらっしゃると思いますが、groongaはSennaの後継プロダクトとして開発が行われている全文検索エンジンです。今回リリースされたgroongaストレージエンジンはこのgroongaをMySQLにストレージエンジンとして組み込んだものになります。 詳細は日本MySQLユーザ会MLへ投稿されたアナウンスメールあるいは上記公式サイトを見てください。 http://www.mysql.gr.jp/mysqlml/mysql/msg/15373
これはとある環境で取得したsarの結果をグラフ化したものなんですけど、 stealってのがでています。 今までstealが0以上になったのを見たことがなかったのでなんだろうと思って調べたら、 steal列には、ゲストOSがリソース要求を行ったにもかかわらずCPUリソースを割り当ててもらえなかった時間の割合が表示されます。steal列に 0%以外の値が表示されている場合はCPU利用率閾値設定が行われているか、ほかのゲストOSあるいはホストOSが同時にCPUリソースを要求して「取り合い」の状態になっていることが考えられます。 ということらしいです。(http://www.atmarkit.co.jp/flinux/rensai/xen05/xen05b.html) 確かに仮想マシン環境で取得したものですし物理CPU以上にぶん回していました。つまりもっとCPUたくさん積めばいいですよみたいなこと
たまにしかやらないため何度やっても忘れてしまうので書いておきます。 イメージファイルはループバックディバイスを使ってmountできる。 losetupで"-f"オプションをつけて空いているループバックディバイスを探す。ここでは/dev/loop0が空いていると仮定。 losetup -a losetup -f losetup /dev/loop0 /path/to/file.img空きが無い場合はmodprobeコマンドで増やせる。 modprobe loop max_loop=32kpartxで"-a"オプションをつけてパーティションを識別。/dev/mapper配下にloop0p3みたいなのができる。 kpartx -a /dev/loop0後は好きなようにmount mount /dev/mapper/loop0p3 /mnt/fooやったね! [root@localhost foo
ひとつ前のエントリで紹介したイベントで話をしてきました。 今回はTritonnやMySQL全文検索のコア技術からは一歩引いた視点で、全文検索が何に役立つのかとか、Tritonnプロジェクトの意義とかを説明させていただいています。 MySQL全文検索ことはじめView more presentations from ikdttr. 当日はプロジェクタへの出力にトラブり、開始までに35分も押してしまいました。参加者&関係者のご迷惑をおかけして申し訳ございませんでした。
MySQLのクエリキャッシュ機能ですが、SELECT文の内容によってはquery_cache_XXX変数の値に依らず無条件に結果がキャッシュされませんよね。 ではどんなキーワードを含んでいるとキャッシュされないのでしょうか。sql_yacc.yyとlex.hで確認してみました。 SQL_NO_CAHCE FOR UPDATE LOCK IN SHARE MODE CURRENT_DATE CURDATE CURRENT_TIME CURRENT_TIMESTAMP CURTIME CURRENT_USER DATABASE DATABASES LAST_INSERT_ID MASTER_POS_WAIT NOW ROW_COUNT SYSDATE UNIX_TIMESTAMP USER UTC_DATE UTC_TIME UTC_TIMESTAMP (ユーザ定義関数) (ストアドプロシージ
早いもので前回のリリースから1年弱が経過してしまいましたが、SourceForgeのダウンロード統計を見ているとリリースが無い間も継続的にダウンロードしてくださる方々がいらっしゃるのが気になっていました。 そこで現在のMySQL 5.0系の最新版である5.0.87向けのソース配布版およびold-styleパッチをリリースしました! https://sourceforge.jp/projects/tritonn/releases/ 今回のリリースはMySQL 5.0系最新版へのアップデートが目的です。Tritonn自体のバージョンは1.0.12のままです。 Tritonnの1.0.13については担当者多忙につき少しお休み中。MySQL 5.1対応についてはGroongaストレージエンジンを開発中です。 バイナリパッケージについては時間が取れ次第、随時リリースして行きます。 追記:11/26
id:kiskeさんにお誘いいただいて先週金曜日にカカクコムさんの社内勉強会でお話させていただきました。貴重な機会をいただきありがとうございました。 自由に話してOKですよとのことだったので、何にしようかなと少し考えた結果、こんなスライドができあがりました。 MySQLのパフォーマンスの話View more presentations from ikdttr. MySQLも今となってはかなり広く使われていて、パラメータチューニングとかも一通りのことは皆さんご存知だろうと思ったので「チューニングをする際にソースを読んで調べたいと思ったらどうしたらいいか」といったようなテーマに対する答えの一例見たいな感じの内容になりました。 普段使っている/参照しているサーバ変数やステータス変数がどのように実装されていて、それらをソース上で追いかけるにはどうしたらいいか、みたいな感じですね。 勉強会ではgdb
MeCabをmake installできる環境であれば、例えば--prefix=/usrとしていたらならば、 /usr/lib/libmecab.so が配置され /usr/lib/mecab に辞書が配置され /usr/etc/mecabrc に設定ファイルが配置され という感じになります。 このとき、mecabrcには辞書の位置が"/usr/lib/mecab/dicdir/dic/ipadic"ですよとか書いてあるので、mecabはmecabrcを通じて辞書の位置を特定できるのです。 ところが、libmecab.aを利用してmysqld等のELFバイナリに直接埋め込んでしまった場合、そしてそのバイナリを別の場所へ持っていって動かすような場合、mecabの関数はmysqldの中に埋め込まれているので問題ないですが、辞書が置いてきぼりをくらってしまいます。 そこで、辞書もいっしょにパッケ
しばらくブログを更新していなかったのですがそろそろ再開しようと思います。 ここ半年くらいTritonnに動きがなかったと思うのですが、この間新しいストレージエンジンの開発に着手していました。Sennaの後継プロダクトとしてgroongaがリリースされましたが、このgroongaをMySQLのストレージエンジンにするというものです。 新しいストレージエンジンはもうしばらくしたらテストリリースする予定です。 従来のMySQL 5.0向けのTritonn(MyISAM+Senna)は大きなトラブル(落ちるバグなど)も無かったのでしばらくアップデートしていませんでしたが、こちらも来月あたりにアップデート版をリリースしようと思っています。 このアップデート版ではMySQL 5.0の最新版へ追随すると共に、今までTritonnでは実装していなかった「ORDER BYしなくてもscore順でソートしてお
現在のMySQLのプロトコル仕様により定められた,クライアントからサーバへ送ることができるPacketの最大サイズは16MBです(パケットの長さをサーバへ伝えるためのフィールドが24bitであるため). しかしデフォルトでは,MySQLサーバ側が受信を許可するPacketの最大サイズは1MBとなっています.この設定値はサーバ変数max_allowed_packetを見ることで確認できます. mysql> show variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+-------
いつの頃からかは知りませんが、Linux(CentOSとか)をインストールするとデフォルトでSELinuxが有効(Enfocing)になっていました。 GUIインストーラ作業時にDisabledにするか、あるいは/etc/selinux/configでSELINUX=disabledにしておけばいいのですが、そのままにしておくと/etc/init.dからのmysqlの起動に失敗します。 こんな感じ。 [root@centos52 ~]# service mysql start Starting MySQL..Manager of pid-file quit without updating f[失敗]mysqld_safeを直接叩くと起動できたり、 [root@centos52 ~]# which mysqld_safe /usr/bin/mysqld_safe [root@centos5
日本語版のPlanet MySQLが立ち上がりました。 http://jp.planetmysql.org/ Planet MySQLというのはMySQLに関連するブログを集めたアグリゲーションサイトで、Sun Microsystems(MySQL開発元)が運営しています。英語版は以前からありましたが、今回新しく日本語版が登場し、当ブログも登録しましたのでそれを記念してエントリを書いてみたいと思います。 公式マニュアルによるエラーログの解説 MySQLのエラーログについては以下の公式リファレンスマニュアルに説明がありますが、 http://dev.mysql.com/doc/refman/5.0/en/error-log.html http://dev.mysql.com/doc/refman/5.1/ja/error-log.html ログのレベルの話だとか、どんなエラーが出力されるのか
明けましておめでとうございます。今年も宜しくお願いします。 というわけで昨年末に調べていたJNIプログラムデバッグ方法のまとめ。 これが一番参考になった。Debugging integrated Java and C/C++ code やりたい事 JNIプログラムのデバッグをしたい(javaからJNI経由で呼ばれたC/C++プログラムのデバッグをしたい) CUI環境で完結したい(対象マシンはサーバで遠隔地にありGUIは使用不可) まとめ こんな感じ。 javac -g gcc -g JPDA(java) jdb -attach gdb --pid= ※JPDAはJava Platform Debugger Architectureの略、JVMの機能の一つ。jdbはJDK付属のJava用デバッガ。gdbはいつものGNU Debugger。 senna-javaでの例 JavaプログラムとC/
ここ数日「MySQL + Connector/J(JDBCドライバ) + プリペアードステートメント」の話題がちらほら出ています。正確に把握はしていないですがSQLインジェクション対策→PreparedStatementという流れできた話のようです。 徳丸浩の日記 - JavaとMySQLの組み合わせでUnicodeのU+00A5を用いたSQLインジェクションの可能性 へぼへぼCTO日記 - useServerPrepStmtsを使うのが根本解決だとはおもう。けど…? id:kazuhookuのメモ置き場 - MySQL+Java でサーバサイドプリペアードステートメントを使うべきで「ない」理由 自分は元Connector/J開発メンバ(※インターン生として)でもありとても気になる話題なので、Connector/Jのソース解析も含めた説明をここで行いたいと思う。 プリペアードステートメント
スロークエリログはどのように計測され、出力されているのかをまとめてみました。 測定方法 THDクラスのset_time関数で計測開始、end_time関数で計測終了。 計測開始ポイント mysqld --bootstrapを使用している場合はmysql_parse関数の直前 ネットワーク経由の場合はネットワークコマンド(COM_XXX)の種別判定直前 ただしQUERYコマンド(COM_QUERY、SQLCOM_XXX)の場合はmysql_parse関数の直前で再設定 というわけでまとめるとSQL文のparse直前に計測を開始 計測終了ポイント thd->end_time関数自体はlog_slow_statement関数の中で呼ばれるのみ log_slow_statement関数はSQL文の結果返却を含む全ての処理が終わった後、終了処理(お掃除)が走る直前で呼ばれる。 セミコロンによる複数行
共著として執筆に参加させていただいた『MySQLデータベース構築バイブル』が7/19に発売になります。 MySQLデータベース構築バイブル 作者: 志村和彦,松信嘉範,池田徹郎出版社/メーカー: 毎日コミュニケーションズ発売日: 2008/07/19メディア: 単行本(ソフトカバー)購入: 5人 クリック: 30回この商品を含むブログ (14件) を見る 内容紹介 本書は、MySQLサーバーの基本的な概念や構造、そして構築や運用に関する部分について書かれています。 運用や構築に関しては、基礎をしっかり理解していれば、今後のバージョンアップにも対応できます。仮に大きな変更があったとしても応用が利きます。そういう意味で、本書では基礎的なものをメインにしています。 とはいえ、取り上げているトピックには、少しだけマニアックに振っている部分もあります。これは、近年のMySQLの機能追加もさることなが
Yahoo!MailをPOP利用可能な状態にして自宅サーバから某所へのメール送信時にSMTPサーバとしてプログラムから利用できないかどうか調べました. 今のところ問題なく利用できます.Yahoo!Mailは"POP before SMTP"つまりSMTPサーバへメールを送るためには事前にPOP認証を済ませたセッションである必要があるタイプ(最近はどこもそうでしょう)ですが,Javaのコード的にはPOP認証コードを単にSMTPでメールを送るコードのちょい先に書くだけ. private void sendMailToYahoo() throws Exception { String smptHost = "smtp.mail.yahoo.co.jp"; String pop3Host = "pop.mail.yahoo.co.jp"; String userId ="あなたのYahooID";
MySQL日本ユーザ会日本MySQLユーザ会から許可をいただいて"MoSQL"の名前でストレージエンジン開発を始めました。 現行のTritonn(MySQL本体+patch+libsenna+libmecab、MyISAM + Senna Index APIベース)をPluggable Storage Engine化したものを目指します。 リリース予定日は未定です。 最新のソースは以下にあります。 http://tritonn.svn.sourceforge.net/svnroot/tritonn/mosql-engine 一応、ビルド&インストールはできます。(INSTALL PLUGIN と SHOW ENGINE だけしかできないっす) svn checkout autoreconf -i その先はYASEと同じ Wassrで開発の進捗をかいていきます。 http://wassr.j
Brianが作った"Skeleton Storage Engine"というのが既に存在するので車輪の再発明なのですが、勉強がてらスクラッチで作ってみました。 Yet Another hogehoge ってのに何となく憧れがあっただけだったりもするのですがw 一応、BrianのSkeleton Engineよりもコード量が少なくシンプルなので(必要最小限のことのみを書きました)、Pluggable Storage Engineの仕組みをより理解しやすくなっているかと思います。 ここからダウンロードできます。 http://sourceforge.net/project/showfiles.php?group_id=232736&package_id=282554 使い方は簡単。--with-mysqlでソースディレクトリ、libdirでインストール先のpluginディレクトリを指定するだけで
いまSkeleton Engineみたいなのを0から独自に作っているのですが、嵌ったのでメモ。 C++にはRTTI(Run Time Type Information、実行時型情報)という便利な機能があるそうなのですが、これを有効(G++ではデフォルト)にしたままビルドすると、Pluggable Storage Engineの場合には問題がでます。 INSTALL PLUGINの時にこんなメッセージが出る。 [test]> install plugin yase soname 'ha_yase.so'; ERROR 1126 (HY000): Can't open shared library '/usr/local/mysql-5.1.25-rc/lib/mysql/plugin/ha_yase.so' (errno: 22 undefined symbol: _ZTI7handler)
Apacheを既にどこかで使っている場合、httpd.confを弄るだけでforward proxyができたのでメモ。 Apacheが入っていないけどインストールしてもOKならyumとかでいれればよろし。 sudo yum -y install httpdhttpd.confを開き、コメントアウトを外して以下を有効化する。 # # Proxy Server directives. Uncomment the following lines to # enable the proxy server: # <IfModule mod_proxy.c> ProxyRequests On再起動するだけ。 sudo service httpd restartProxyの利用制限をする場合には以下を使う。 <Proxy *> Order deny,allow Deny from all Allow f
MySQL 5.0.60で--with-libeditでビルドした場合のmysqlクライアントにおけるマルチバイト文字入力不具合が解消されたようです。 このChangeSetが取り込まれている模様。 http://mysql.bkbits.net:8080/mysql-5.0/?PAGE=cset&REV=47cd3cd4ZuTuAVELOv-2mljdCeXG_w editlineをMySQLの開発者(Bar氏)が独自修正するという方法によって対処となったわけですね。Good Job!! 背景を少し説明しておくと、、、 この"--with-libedit"というのはMySQLをソースからビルドする際に指定するconfigureオプションのひとつで、BSDライセンスであるため商用版MySQLのビルドには欠かせないものでした。商用版ではライセンス的にGPLであるGNU readlineは使え
ノード(domU)を追加していった場合のスケーラビリティに関する性能評価を行うような場合など、同じ中身のdomUを大量に作成することがあると思います。 やってみたらすごく手軽にできたのでまとめておきます。 ディスクイメージファイルをコピーする まずディスクイメージファイルをコピーしましょう。 このとき、domUのディスクイメージがsparseファイルになっていると(デフォルトでそうなる)、物理的なディスクの消費を抑えることができてGoodです。 Xenの設定ファイルを書き換える。 /etc/xenにある各domUの設定ファイルを書き換えます。 ポイントは以下。これらが重複すると駄目なので。 nameを一意に uuidを一意に diskをコピーしたファイルのパスに vifのMACアドレスを一意に 各domUのネットワーク設定を書き換える イメージファイルをmountしてdom0から書き換えて
次のページ
このページを最初にブックマークしてみませんか?
『mir the notebook 〜 mir の落書き帳 〜』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く