イベントログのようなデータをRDBSに保存しており、1時間ごとのイベントの発生数をグラフにしたいとします。 GROUP BY句とCOUNT関数による集約処理を行えばよいのですが、 値が0となる場合、その値を含む行はデータとして取得できません。 そのためRなどでグラフを描画する際に不都合が生じます。 以下に例を示します。 MySQLに以下のようなテーブルがありデータがあるとします。
デフォルトだと複数行INSERTによって高速にINSERT可能なのだが、場合によっては一行一行INSERTさせたいときがある。 mysqldump -c --skip-extended-insert > dump.sql --extended-insert 複数のVALUESリストを含む、複数行INSERT構文を使用してください。これにより、ダンプファイルサイズを小さくし、ファイルが再ロードされる際の挿入スピードがあがります。 skipを付けると反転する。これで一行一行INSERTしてくれるが、カラム名のないINSERT文が出来上がる。カラム名まで出して欲しい場合には、下記のオプションを利用する。 --complete-insert, -c カラム名を含んだ、完全なINSERTステートメントを使用します。 参考: http://ymotoba.blogspot.com/2008/07/my
データベースを弄っていまして、テーブルが死ぬほどあるんです。 例えば200個くらいテーブルあって、そのうち piyo_ みたいなプリフィックスがついているのが60個くらいあって、それを除外して、mysqldumpしたい、なんて願望があります。 2、3個のテーブル除外であれば、--ignore-tableを使えばよいのです。で複数なので、--ignore-table="piyo%"とかでいけないかと思ったのですが、ダメ。 結果、以下のアプローチで、なんとかできました。 まずは、除外ではない簡単なパターンから。 特定のプリフィックスがあるテーブルのみダンプする方法 例えば、hoge_ プリフィックスがついているテーブルが20個あって、それをダンプしたいという場合であれば、以下でいけます。(めんどうなので、-u rootで書いておきます。。) mysql -u root [db_name] -N
mysql運用しているとmysqldumpをとって、別環境だったり過去とテーブル定義のdiffを見る時って結構あると思う。 うちの環境では、mysqldumpをgitで管理して差分を見たりしている。 その時に困るのが、オートインクリメントしているカラムがあると下記のように、環境毎のインクリメント値を出力する為にその部分で差分が出てdiffが汚れてしまう。。 diff汚れると、みるのつらい。。。 例えば下記のようなコマンドでdump取ってdiff取ると、オートインクリメントを使っているカラムでの当然環境毎にdiffが出るので、意味のないdiffが発生する。 #a環境のaaaDBのdump $ mysqldump -u[ユーザ] -d aaa > a_aaa.sql #b環境のaaaDBのdump $ mysqldump -u[ユーザ] -d bbb > b_aaa.sql $ diff a_
主にバグの再現確認に使う用途。yumでもいいからクリーンな状態のCentOS 6.6にMySQL 5.7を入れたいときの。 TL;DR コマンドはこれ。 $ sudo yum install -y https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm $ sudo yum install -y --enablerepo=mysql57-community-dmr mysql-community-server $ sudo service mysqld start $ sudo grep password /var/log/mysqld.log $ mysql -uroot -p 【2015/11/05 10:05】 MySQL 5.7のGAリリースに伴い、mysql-community-releaseが新しくな
ちょっと感動したMySQL 5.7.1 クライアント(mysqldではない)の新機能。 まずは取り敢えずこのBugs。 MySQL Bugs: #66583: Ctrl-C behavior violates principle of least astonishment http://bugs.mysql.com/bug.php?id=66583 mysqlコマンドラインクライアントに向かってCtrl+Cを叩くとmysqlコマンドラインクライアントが落ちるという、 ごくごく馴染みの動作に対するFeature Request。 MySQL 4.1.6からは--sigint-ignoreというオプションで(そんな昔からあったのか) SIGINTそのものを無効化してmysqlコマンドラインクライアントが終了しないようにできるものの、 これだとクエリを止めようと思ってもCtrl+Cで止まらなくな
パッケージのバージョンを指定してインストールする方法 1.homebrew/versionsリポジトリを追加 $ brew tap homebrew/versions Cloning into '/usr/local/Library/Taps/homebrew/homebrew-versions'... remote: Reusing existing pack: 2203, done. remote: Counting objects: 3, done. remote: Compressing objects: 100% (3/3), done. remote: Total 2206 (delta 0), reused 0 (delta 0) Receiving objects: 100% (2206/2206), 709.18 KiB | 463.00 KiB/s, done. Res
※このエントリはMySQL Casual Advent Calendar 2015の5日目のエントリです。 openark-kit というものについて ここまで読んでわかった方は、この先を読む必要はありません。 openark-kitとは、mysqlの運用に便利なツールキットを14個あつめたソフトウェアパッケージです。 Shlomi Noachという方がPythonで開発しており、少なくとも2009年に発表されているようです。 2015-12-05時点での最新版は196.1となっており、.tar.gz および .deb で配布されております。 このエントリを書いた背景事情 そもそも僕自身、50を超えるクラスタ化されたmysqlノードと一緒に業務生活を送っております。 ところが、システムが非常に古くさい構成のため、合計レコード数が2億から3億程度ある垂直分割されたテーブルに対しALTERを投
追記: rehash(auto-rehashも含む)すると、SQL文の補完(seleでタブ打鍵とか)が効かなくなるよと、はす向かいの人に教えてもらいました。 個人的には、SQLは「mysql> help select」とかでオンラインヘルプがびょっと出るので、スキーマの補完ができるんならSQLの補完はとりあえずあきらめてもいいかなと思っています。 常々、テーブル名とか補完できるといいなーと思っていたので、ボロっときいてみたら教えてもらいました。あざーーーーっす! id:mikihoshi++ id:tokuhirom++ id:precuredaisuki++ おかげで効率が300%上がりました。(Benchmark::Stopwatchで計測) http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html#option
TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > SQLで任意の順番でソートする ORDER BY メモ。SQLで、任意の順番でソートしたい時がある。 CASE式 CASE式を使う。以下のSQLはとりあえずemployeeというテーブルがあって、「3,9,1,8」の順に並べたいとしている。 SELECT id, name FROM employee WHERE id IN (3, 9, 1, 8) ORDER BY CASE id WHEN 3 THEN 1 WHEN 9 THEN 2 WHEN 1 THEN 3 WHEN 8 THEN 4 END ASC; なぜWHEREがあるのか、以下のようにLIMITで絞ればいいじゃないかと考えることもあった。 SELECT id, name FROM employee ORDER BY CASE id WHEN 3 THEN 1
問題 こんなテーブル a があります。 create table a (id int, flag int); こんなふうにデータを入れて、 insert into a (id, flag) values (1, 1), (2, 1), (3, 0), (4, 0), (5, 1); こんなふうになっているとします。 select * from a; +----+------+ | id | flag | +----+------+ | 1 | 1 | | 2 | 1 | | 3 | 0 | | 4 | 0 | | 5 | 1 | +----+------+ なるべく単純な1つのSQLで、すべてのレコード数と、flag=1のレコード数と、flag=0のレコード数を取得せよ。 なお、サブクエリは使わないこと。 ヒント 集計を3つしたいので、こうなる? select count(????), c
まず、ROW_NUMBERを使う場合には、特に悩む必要はありません。ORDER BYのキーに追加しましょう(リスト3)。実行結果は図2です。 リスト3 主キーが複数列の場合(ROW_NUMBER) SELECT class, student_id, ROW_NUMBER() OVER (ORDER BY class, student_id) AS seq FROM Weights2; 図2 リスト3、4の実行結果 class student_id seq ----- ------------ --- 1 100 1 1 101 2 1 102 3 2 100 4 2 101 5 2 102 6 2 103 7 一方、相関サブクエリの場合はどうでしょう。いくつか方法があるのですが、私が最もシンプルと思うのは、複合キーを文字列とみなして連結し、強引に1列のキーに作り変えてしまうことです。そ
MySQL 5.6が登場してからかなりの月日が過ぎたが、他のことで多忙だったせいか、MySQL 5.6についてはあまりブログで情報を発信していないことに気がついた。これはイカン!!と思い、MySQL Casual Advent Calendar 2014に合わせて、MySQL 5.6を使用する上で最もオススメしたい機能であるクラッシュセーフなレプリケーションについて解説しようと思う。この記事は16日目の記事である。 レプリケーションがクラッシュセーフとはどういうことかクラッシュセーフとは、何らかの事情により、プロセスがダウンしたりマシンが電源ごと落ちたり(つまりクラッシュ)しても、再起動後に以前の状態に戻って処理を再開できるということだ。データのクラッシュリカバリであればみなさん既によくご存知であろう。(REDOやUNDOするアレのことだ。本稿では面倒臭い・・・ではなかった、本題ではないた
タイトルのまんまのプチトリビアを紹介しようと思う。mysqlの--one-databaseオプションを使えば「mysqldumpで--all-databasesとか--databasesオプションを使って作成したダンプファイルに含まれる複数のデータベースから、一つのデータベースだけを選択してリストアする」という操作ができるけど、毎回ダンプファイル全体を読み込むのは無駄じゃないか?と思われることもあるだろう。だったら事前にダンプファイルを分けちゃいたい!と考えるのが人情というもの。そんなときはawkコマンドを使うといい。 #!/usr/bin/awk -f BEGIN { dump_current_db = 0; num_db = split(databases, db_arr, ",") for (i = 1; i <= num_db; i++) { db_arr[i] = "`" db_
MySQLのバイナリログは、いろいろと使い道がある。たとえば、レプリケーションするためには必ずださないといけないし、差分バックアップファイルとしてのリストアなどがある。というか、他の利用方法をよく知らない。 差分バックアップとしてバイナリログだとすると、そのままインポートはできないので、1度通常のSQL文に直す必要がある。そのためのコマンド、mysqlbinlog。 mysqlbinlog mysql-bin.000100 > /tmp/statement.sql基本構文的には、こんな感じ。どのバイナリログファイルを読める形式にするかと、出力するファイルを指定するだけ。 バイナリログのままだと、大体の発行されたSQL文は分かるのだけど、発行された時刻が分からない。なので、差分をリストアするときでも、どの時刻からのSQLをリストアする必要があるのか、どの時刻までのSQLまでをリストアする必要
MySQLには、様々なシステム変数が存在します。 これらは、my.cnfなどの設定ファイルやMySQLの起動時オプションで 制御することが可能です。 システム変数は、以下のSQL文で参照できます。 SHOW VARIABLES; SHOW VARIABLES like 'charset%'; また、以下のSQL文で更新できます。 SET GLOBAL sort_buffer_size = 10 * 1024 * 1024; SET SESSION sort_buffer_size = 10 * 1024 * 1024; システム変数には、サーバ共通の値と セッション(接続)共通の値とがあります。 前者を変更すると、その後開かれる全てのセッションに影響があります。 後者を変更すると、現在のセッションでのみ影響があります。 以下、MySQL5.0.16に対応したシステム変数一覧です。 自動イン
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く