うまいぼうぶろぐ

linuxとhttpdとperlのメモ

mysql

memo MySQL互換 のマルチマスタ - Percona XtraDB Cluster

あとでまじめに調べる http://qiita.com/mita2/items/70ca2dbe8f08e943c747 perconaはMySQL互換で独自機能を加えたRDBサーバ Slowログに拡張がされてたりするのは良い感じ。http://qiita.com/nownabe/items/7d4420f8a657aafe85f6 http://qiita.com/nownabe/i…

MySQLの公式yum リポジトリ

RHELのyumのmysqlはバージョン低いから今までdev.mysql.domからbinary取ってきてたんだけど、これだと構成管理上めんどくせーなーと思っていた。 が、いつのまにかyum/rpmが用意されてた。ありがたや http://dev.mysql.com/downloads/repo/yum/ # wget http:…

mysql MyISAM の同時insert (concurrent_insert) の条件

http://www.kinusati.net/2011/01/27/mysql%E3%81%8A%E5%8B%89%E5%BC%B7%E3%83%A1%E3%83%A2myisam%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3/ http://dev.mysql.com/doc/refman/5.1/ja/concurrent-inserts.html ht…

flush status でmysqlの(一部の)統計情報(show statusの結果)をreset する

show global status で取得できる値のうち、いくつかはflush status でreset できる(Uptime、Questions などresetできないのもある) ということを知った。Growthforecast のMySQL pluginをカスタマイズしてMax_used_connections をグラフに描いてるんだけど…

mysql コマンドのpagerとtee

show global status が一気に表示されすぎて困るのでless使いたい、grepしたい、sqlの記録とかをログを残したい等を思ってたけど(mysqlに入る前にscript叩けばできるけど) mysql内で出来るの初めて知った。 mysql> \h (略) pager (\P) Set PAGER [to_pager]…

percona toolkit (旧maatkit)でmysql クエリ解析

http://www.percona.com/doc/percona-toolkit/2.1/ percsona toolkit には色んなブツがあるけど、そのなかでもpt-query-digest が良いですね。tcpdump でパケットをキャプチャしてそのまま食わせられるので、mysql 5.0未満で細かい分解能でslowログを出せな…

mysqldump --tab を使う場合、ディレクトリにはmysql ユーザの書き込み権限が必要

mysqldumpコマンドを叩いているユーザの権限かと思っていたけど、mysqlプロセス上からSELECT ... OUTFILE で書き出すからmysqlの権限が必要ということ?テーブルのschemaの.sql は実行したユーザで作成されていたけどデータの.txt はmysqlユーザだった。 $ c…

mysql リストア時のチューニング

巨大なデータをimportで少しでもリストア時間を短縮したいとき。 my.cnf restore時は堅牢性は必要ないので、binlogやinnodbの二重書き込み等を無効にする。 # log-bin の項目をコメントして起動 # bin_logを無効にできない場合は、せめてsync_binlog = 0 ski…

mysql の複合インデックス復習

mysqlは1つのSQLで、1つのテーブルには1つのインデックスしか利用されない。 なので、whereで2つのカラムを条件に指定する場合それぞれのカラムにインデックスを張っていたとしても、(where id = 0 and name = 'hoge' のような) どちらか1つしか利用されない…

innodbのinnodb_log_file_size を大きくする

mysql停止後ib_logfile* を削除した後、innodb_log_file_size を変更しmysqlを起動する。が、停止する際にログの内容をデータに確実に反映させるために mysql> set global innodb_fast_shutdown = 0;を実行してから停止したほうが良いとのこと。出典忘れた。…

mysqltunerでmysqlの設定値を診断してチューニングする

https://github.com/rackerhacker/MySQLTuner-perl/ mysqltuner.pl を実行するだけ。 $ git clone git://github.com/rackerhacker/MySQLTuner-perl.git $ cd MySQLTuner-perl $ perl mysqltuner.pl"!!"の項目が改善すべき項目。 $ perl mysqltuner.pl >> MyS…

mysql innodbの行ロック/テーブルロック

http://dev.mysql.com/doc/refman/5.1/ja/innodb-next-key-locking.html innodbは行ロックできるstorage engine という認識だったけど、適当に作ったテーブルで適当に遊んでたら、どうも行ロックになっちゃってるぞ。。。?と思ってドキュメント読んだ。この…

mysqlのトランザクション分離レベル おさらい

http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%86%E9%9B%A2%E3%83%AC%E3%83%99%E3%83%AB http://dev.mysql.com/doc/refman/5.1/ja/innodb-transaction-isolation.html http://dev.mysql.co…

mysqlbinlog で指定した時刻のログだけ表示する

man mysqlbinlogこの辺のオプションを使う。 --start-position --start-datetime --stop-position --stop-datetime $ mysqlbinlog --start-datetime="2011-12-25 11:25:56" binlog.000003

mysqlbinlog unknown variable 'default-character-set=utf8'

$ mysqlbinlog mysqlbinlog: unknown variable 'default-character-set=utf8'oops!! you must add '--no-defaults' option. $ mysqlbinlog --no-defaults mysql-bin.000001

MySQLのストアドプロシージャとファンクションの違い

http://dev.mysql.com/doc/refman/5.1/ja/stored-procedure-logging.html http://www.klab.jp/media/mysql/index5.html ストアドプロシージャ callで呼び出す。 戻り値がないストアドファンクションみたいなもの ストアドファンクション selectなどのSQLに組…

mysql の table size確認

次のどっちかでいけそ? mysql> SHOW TABLE STATUS; mysql> USE information_schema; mysql> SELECT table_schema,SUM(data_length) FROM information_schema.tables Group By table_schema ORDER BY SUM(data_length);

64bitOSでphpとmysqlをsourceからinstallする

phpのconfigureで --with-libdir=lib64 \ --with-mysql=/usr/local/mysql \をつけると/usr/local/mysql/lib64 に libmysqlclient_r を探しに行く。 だけどmysqlをsourceから入れても/usr/local/mysql/lib しかできないので # ln -s /usr/local/mysql/lib /us…

mysql プロシージャ作成

http://dev.mysql.com/doc/refman/5.1/ja/stored-procedures.html とりあえず中身はNOW() を呼び出すだけの関数を作る。 作成 mysql> CREATE PROCEDURE hogehoge -> SELECT NOW(); プロシージャ一覧確認 mysql> SHOW PROCEDURE STATUS; プロシージャ詳細確認…

mysqldump の option 復習

mysql 5.5 GA が年内にreleaseされるとかいう噂を聞いていて、ふとdumpについて知りたくなったので調べた。主にlock関連で。 http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html --opt defaultで有効。 "--add-drop-table --add-locks --create-options…

mysqlのprofiling

http://nippondanji.blogspot.com/2009/02/mysql.html 正式に利用可能になったのはmysql 5.1から。 > SET profiling=1; ## 何かSQLを実行 > SHOW PROFILE;

mysql 5.1.49 で mmeasureのinnodb statusが表示されない

元々mmeasureがmysql 5.0までしか対応してないんだけど http://d.hatena.ne.jp/hogem/20090827/1251381817 この辺で一応対応できてた。で、最新のmysql 5.1.49にすると"InnoDBステータスを表示"をクリックしても InnoDB と表示されるだけでステータスが出な…

mMeasureのinstall

久々にinstallしてみたら、公式通りにやっても一部動作しなかったので復習メモ。(昔はどうやってinstallしたんだろ。。。。) mmeasure mysql(主にMyISAM)のパラメータ、ステータスを見てアドバイスしてくれるsoftware。 http://mmeasure.sourceforge.jp/inst…

MySQL 5.1.46のInnodb plugin

5.1.46から正式版になった。 http://d.hatena.ne.jp/sh2/20100427 http://nippondanji.blogspot.com/2010/03/innodb-plugin.html innodb pluginを有効にする ignore-builtin-innodb plugin-load = innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.s…

mysql 5.1のmysql_install_db

試験でデータをめちゃくちゃにしたので再構築しようとしたんだけど、my.cnfをカスタマイズしているとmysql_install_dbで失敗する? わけないですよねー。logの場所とかを変更してたせいかな? とりあえず一旦mvしてmysql_instalL_db再挑戦していけた。

mysqlのUSER消すときはDROP USER

http://dev.mysql.com/doc/refman/5.1/ja/drop-user.html 今更なんだけどすごい初歩的なことメモ。mysql.userからdeleteしてたけど、それだと権限は残っちゃってるんだなー。権限が残っててもuserからは削除されてて、接続できないからたぶん問題ないんだろ…

mysqlのログローテート

今さらだけど。FLUSH LOGSすればいいんだろうけど、定期的にローテートするにはlogrotateでmysqladmin flush-logsでいい? /etc/logrotate.d/mysql /var/log/mysql/*.log { notifempty sharedscripts postrotate /usr/local/mysql/bin/mysqladmin flush-logs…

mysql 5.1で変更になったログ関連のmy.cnfの設定

変更になったというか正確には、mysql 7.0deprecatedになるよというwarningが出るようになった。もちろん、warningなだけなので5.0以前の設定でも動くけど。せっかくなので新しい書式になおそう。5.0前まではログファイル名のみをmy.cnfに記述していたのに対…

mysqlでinnodbのデータ領域をテーブルごとに分割する

デフォルトだとinnodbのテーブル領域はibdata1とかにまとめられるけど、innodb_file_per_tableを設定するとテーブルごとにわかれる。 http://dev.mysql.com/doc/refman/5.1/ja/multiple-tablespaces.html- http://nippondanji.blogspot.com/2009/01/innodb_1…

mysqlでindex再構築

http://dev.mysql.com/doc/refman/5.1/ja/alter-table.html http://dev.mysql.com/doc/refman/5.1/ja/create-index.html sennaを使ってるとoptimizeしたときにindex再構築する必要があるらしいのでお勉強。 index 削除/再作成 indexの名前を確認 show indexe…

mmeasure 1.0.7を無理矢理mysql 5.1に対応させる

mmeasure http://mmeasure.sourceforge.jp/ mysqlの統計情報を監視してグラフ化、警告するソフト。要rrdtool。 mysql 5.1への対応 mysql 5.1でmmeasureが動かない〜〜と悩んでいたけど、対応version見たら5.1は載っていなかった。 http://mmeasure.sourcefor…

innodbのauto_increment

optimize時/再起動にauto_incrementの最大値がresetされる。どうやら、max関数で取得した値(の次の値)を使うらしい。myisamでは起きない。知らなかった。

mysqlの接続タイムアウト

2種類ある?いまいち良くわかんね。 http://dev.mysql.com/doc/refman/4.1/ja/show-variables.html デフォルトで8時間になっているので、サーバによっては増減させたほうが良いかもっていう。 wait_timeout 対話式ではない接続を終了する前に、サーバがアク…

mysql/postgresqlでユーザごとの同時/最大接続数制限

共有サーバでは真面目に考えたほうが良くね?という話になったので調べた。 mysql http://dev.mysql.com/doc/refman/5.1/ja/user-resources.html http://dev.mysql.com/doc/refman/4.1/ja/user-resources.html 各バージョンのmysql見てると、ユーザ個別の値…

mysqlでデータベース、テーブルごとのサイズを取得する

(innodbを使用している場合でも)innodb_file_per_table を設定している場合、 du -sh /path/to/data/* などとすればさくっと取れる。 データベースごとのサイズ http://dqn.sakusakutto.jp/2012/04/mysql-database-size-sql.html SELECT table_schema , SUM(…

mysql 5.1のmysql_install_dbがこける

mysql_install_dbで失敗する。 $ mysql_install_db --user=mysql Installing MySQL system tables... 090510 17:09:34 [ERROR] /usr/local/mysql/libexec/mysqld: unknown option '--skip-federated' 090510 17:09:34 [ERROR] Aborting 090510 17:09:34 [War…

mysqlのレプリケーション設定はmaster.infoがmy.cnfより優先される?

/etc/my.cnfのmaster-hostの値を書き換えて再起動してもshow slave stautsの結果が古い値のままで何故?と悩んだ。どうもmaster.infoに古い情報が残ったままだから、そっちが優先されてたぽい。master.infoを消して再起動したら変更された。

MySQLユーザコンファレンス2008 2日目(10/31)メモ

1日目のメモはこちらです。-> MySQLユーザコンファレンス2008 1日目(10/30)メモ MySQL Performance Tuning 1 (10:00 ~ 10:50) queryのスループットについて ボトルネックはどこかを探る ハードウェアの問題かもしれない slow query logを調査 インデックスを…

MySQLユーザコンファレンス2008 1日目(10/30)メモ

MySQL ユーザコンファレンス - 10/30 - サン・マイクロシステムズ 場所はJR東京駅からすぐの東京ステーションコンファレンスの5F。受付のロゴはMySQLじゃなくてSUNでした。主催だから当然か。会場の規模の割りには参加者が大勢きていて、一部のセッションで…

MySQLユーザカンファレンス2008参加します

MySQL ユーザコンファレンス - 開催概要 - サン・マイクロシステムズ ただいま秋葉原に潜伏中。 23:30 追記 1日目行ってきました。とりあえず戦利品をうp。 マグカップめちゃでかいす。 おまけ。 飾られてた巨大マスコットのイルカ。ぐぐったら名前は"Sakil…

mysqlで既存の状態からレプリケーション構築 - innodb編

webの情報を見てると、まずデータディレクトリをtarで固めて・・・というのを良くみかける。MyISAMのみならそれでもいいと思うけど、InnoDBを使用してるとちょっと不都合かなと思って調べた。 というのもInnoDBのデータ領域は設定した分だけ最初にディスクに…

mysqlのエラーログの場所メモ

default DATADIR/hostname.err my.cnfで設定 log-err=/path/to/logただ、my.cnfのlog-errを指定してもDATADIR/hostname.errは相変わらず出来てしまう。 起動時のオプションで指定 /etc/init.d/mysqlとか。 "--log-error=/path/to/log"を追加。 こうしとけばD…

prrorでエラーコードの詳細表示

MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 7.18 perror ― エラーコードの説明 http://dev.mysql.com/doc/refman/5.1/ja/perror.html へぇ。こんなのあったんだ。 # mysql -u root ERROR 2002 (HY000): Can't connect to local MySQL server through …

mysqlのデータベース、テーブル名をcase insensitiveにする

http://dev.mysql.com/doc/refman/4.1/ja/name-case-sensitivity.html lower_case_table_names = 1 へこーっとマニュアル眺めてたらあった。insensitiveにするというより、mysql側で小文字に変換して処理するらしい。

SQLで正規表現使えるんですね

久しぶりにsql触ったらwhereの使い方すら忘れていた。それはさておき正規表現も使えるのかー。でも今んとこあんま使う機会ないかも :-) postgresql-8.2.3 POSIX正規表現らしい。 select * from table where column ~ '^hoge'; mysql-5.0.45 拡張正規表現らし…

mysqlでインデックスの作成/削除/確認する

ref. http://www.thinkit.co.jp/free/article/0707/2/5/index.html?fr=rdf http://www.cgis.biz/mysql/12.htm 作成 create table時に指定 create table hoge ( id int, name char(8), hoge varchar(32), primary key (id), unique index uniq_idx_name (name…

mysqladmin、pg_ctlのreload

mysql mysqladmin reloadはグラントテーブルをreloadするだけ。my.cnfの値は読み直されない。 postgresql SIGHUP送って、posgresql.confを読み直す。サービス無停止。