タグ

mysqlに関するhisaichi5518のブックマーク (80)

  • IDEA * IDEA

    ドットインストール代表のライフハックブログ

    IDEA * IDEA
  • MySQLの4と5で、NOTの優先順位が違う。 - こせきの技術日記

    久しぶりにMySQL4を使ってて冷や汗が出た。 MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.1.3 論理演算子 MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 7.2.1 演算子の優先順位 MySQL5 mysql> select not 1 = 2; +-----------+ | not 1 = 2 | +-----------+ | 1 | +-----------+ 1 row in set (0.00 sec)1は2じゃないですよねー ^^ MySQL4 mysql> select not 1 = 2; +-----------+ | not 1 = 2 | +-----------+ | 0 | +-----------+ 1 row in set (0.00 sec)えー…… いや昔は知ってたんだきっと

    MySQLの4と5で、NOTの優先順位が違う。 - こせきの技術日記
  • SET NAMESは禁止

    (Last Updated On: 2018年8月13日)MySQLには文字エンコーディングを変更する「SET NAMES」SQL文が用意されています。(PostgreSQLも同様のSQL文、SET CLIENT_ENCODINGがあります)この機能はSQLコンソールからは使ってよい機能ですが、アプリケーションからは使ってはならない機能です。SQLインジェクションに脆弱になる場合があります。 Ruby on Railsを読んでいて、ActiveRecordを説明している部分にMySQLの文字エンコーディングを変更する場合の例としてSET NAMESが利用されていました。アプリケーションからはSET NAMESは使ってはならない事を周知させるのは結構時間が必要かなと思いました。 PHPも5.2の途中からMySQLモジュールにlibmysqlの文字エンコーディング設定APIのラッパー関数が

    SET NAMESは禁止
  • MySQLのインデックスの効果を理解する - すぎゃーんメモ

    CREATE TABLE `fuga` ( `id` int(10) unsigned NOT NULL auto_increment, `category` int(11) NOT NULL, `name` varchar(40) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; のようなテーブルを用意して、0〜9999までのランダムなcategoryで適当なnameを含むデータを30万件ほど突っ込んでみる。1つのcategoryあたり30件くらい取れる計算。 普通にwhereでcategoryを指定して取ると結構遅い。はかってみる。 #!/usr/bin/perl use strict; use warnings; use DBI; use Benchmark 'timethis'; my $dbh =

    MySQLのインデックスの効果を理解する - すぎゃーんメモ
  • HandlerSocketソースコード公開しました | BLOG - DeNA Engineering

    はじめまして、樋口と申します。 先日のDeNA Technology Seminar #2でお話させていただきました HandlerSocket Plugin for MySQL のソースコードを公開しました。 HandlerSocketとは? 簡単に言うと、MySQLデータベースへのアクセスを高速化するためのプラグインです。MySQLSQLパーザをすっ飛ばし、ネットワーク通信とマルチスレッド処理周辺を置き換えることによって、InnoDB等のデータベースエンジンの性能を限界まで引き出します。 このHandlerSocketですが、すでにモバゲータウンにて実際に運用しています。従来MySQLとmemcachedの構成で運用していた箇所を、HanderSocketを組み込んだMySQLだけの構成に置き換えました。その結果、MySQLサーバの負荷軽減、memcachedの負荷軽減、ネットワーク

    HandlerSocketソースコード公開しました | BLOG - DeNA Engineering
  • ウノウラボ Unoh Labs: MySQLのチューニングのためのデータの集め方

    いつの間にか会社で古株になったyamaokaです。 webアプリケーションのバックエンドにMySQLを使っている場合、 クエリ(SQL)のチューニングをする必要がありますよね。 皆さんはチューニングの計画をどのように立てていますか。 もちろん、既に明らかに重いことが想定されているページがあれば、 その処理で使われているクエリを中心にEXPLAINなどを使って解析していけばいいと思います。 でもそうではなく、全体的にクエリの見直しやチューニングを行いたい場合は 実際に実行されているクエリを確認していくという作業が必要です。 そこで使うことができる3つの方法について書きたいと思います。 遅いクエリを記録する MySQLにはスロークエリログといって、 実行に時間がかかったクエリを記録する機能が最初から付いています。 /etc/my.cnfに次のように設定を書けば実行時間が1秒を超えたクエリが出力

  • 漢(オトコ)のコンピュータ道: モダンなMySQLの開発環境の構築方法

    遅ればせながら モダンな Perl の開発環境の構築方法 モダンなPHPの開発環境の構築方法 モダンなPythonの開発環境の構築方法 モダンな Java の開発環境の構築方法 に続いてみる。MySQLは言語じゃないけど。 コンパイラ等MySQLをソースからビルドするのでなければコンパイラ等は必要ないけど、どうせアプリ開発に必要なので「MySQLなんかいつでもハックしてやるぞ!」という意気込みを示すために入れておこう。OSXならXcode、LinuxならGCC。最新のソースコードじゃないとヤダ!という粋な人にはBazaarのインストールもお勧めしたい。Bazaarは言わずと知れた分散バージョン管理システムであり、MySQL開発チームも採用している。最新のソースコードは次のコマンドでゲット可能だ。 shell> bzr branch lp:mysql-server/5.1 mysql-5.1

    漢(オトコ)のコンピュータ道: モダンなMySQLの開発環境の構築方法
  • MyISAMでテーブルが巨大すぎるとDELETEできなくなる件(MERGEテーブル解説) - 昼メシ物語

    MySQL4.1でMyISAMを使っていて、ふと気づいたら1つのテーブルに4千万件のレコードを挿入してしまいました。 MyISAMで4千万行のテーブルを作るとどうなるかというと、 INSERT -> やや重いけどいける UPDATE -> やや重いけどいける TRUNCATE/DROP -> 一瞬 DELETE -> 破滅 という感じになることが分かりました。 このテーブルには、挿入日を示すカラムがあって、挿入から時間の経った古いレコードを削除したかったんです。 DELETE FROM large_table WHERE created_at > :expire_date この large_table が4千万行あるのですが、このDELETE文を実行したら7日間くらい返ってきませんでしたし、その間ずっと disk busy になったりしてサーバの調子が悪くなりました。 created_at

    MyISAMでテーブルが巨大すぎるとDELETEできなくなる件(MERGEテーブル解説) - 昼メシ物語
  • MySQL Practice Wiki

  • MySQLでサービス停止のないALTER TABLEの検討 - SH2の日記

    MySQLでテーブルへのカラム追加、インデックス追加やテーブルの再編成などを行うと、その間テーブルに共有ロックがかかってしまいます。そのためこれらのメンテナンス処理は、通常利用者の少ない深夜早朝帯にサービスを止めて実施する必要があります。日はそれを無停止、オンラインのままでできないかという話題です。 基的なアイデア メンテナンス対象の元テーブルをコピーして、作業用の仮テーブルを作ります 仮テーブルに対して、カラム追加などの変更を加えます その間、元テーブルに対して行われる更新処理について差分を記録しておきます 仮テーブルの変更が終わったら、記録しておいた差分データを仮テーブルに反映します 差分データの反映が終わったら、元テーブルと仮テーブルを入れ替えます これと似たようなことを考えた方は結構いらっしゃるのではないでしょうか。ただ、言うは易し、行うは難しです。整合性がきちんと取れるかどう

    MySQLでサービス停止のないALTER TABLEの検討 - SH2の日記
    hisaichi5518
    hisaichi5518 2010/07/04
    メンテナンス
  • MySQLハックの最前線が垣間見えた 「DeNA Technology Seminar #2」

    ディー・エヌ・エーは29日、技術セミナー「DeNA Technology Seminar #2」を開催した。ソーシャルプラットフォームの裏側にフォーカスして3 月に開催されたセミナーに続き、2回目の開催となる。今回のテーマは「MySQL」。社外の講師も交え、モバゲータウンの膨大なトラフィックを支えるディー・エヌ・エーならではの実践的なチューニングネタ、ハックネタが紹介された。 ディー・エヌ・エーは29日、技術セミナー「DeNA Technology Seminar #2」を開催した。ソーシャルプラットフォームの裏側にフォーカスして3月に開催されたセミナーに続き、2回目の開催となる。今回のテーマは「MySQL」。社外の講師も交え、モバゲータウンの膨大なトラフィックを支えるディー・エヌ・エーならではの実践的なチューニングネタ、ハックネタが紹介された。 アプリに変更を加えずにDBの分散管理を実現

    MySQLハックの最前線が垣間見えた 「DeNA Technology Seminar #2」
  • ウノウラボ Unoh Labs: 国産MySQLストレージエンジン「Spider」の作者、斯波健徳氏に聞く

    こんにちは。中村です。 MySQLにはMyISAM、InnoDBCSVなどのいくつかストレージエンジンがありますが、皆さんはSpiderというストレージエンジンを聞いたことはありますでしょうか。Spider Storage Engineは斯波健徳さんにより作成されたDatabase Shardingを可能にするストレージエンジンでMySQL 5.1で利用可能です。 先日、某集まりで斯波さんとお会いしたときにSpiderを作っているということを教えてもらったので、早速詳しい内容を教えてもらうことにしました。 ※Spiderについての説明資料はMySQLカンファレンス 2009にて斯波さんが発表されたときのスライドがあります。スライドの直リンク(zip) Spider Storage Engine について posted by (C)フォト蔵 Spider Storage Engineとは?

  • Yahoo!オークションでのMySQL 冗長化技術

    ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちはオークション事業部プラットホーム技術のチャックです。 オークションでは一部サービスに RDBMSMySQL を使ってサービスをご提供させていただいております。 オークションでは多くのお客様よりアクセスを頂いておりますので、大量の更新、参照の処理速度に優れた MySQL を選択し、お客様にストレスなくサービスをご利用いただけるよう 日々業務に取り組まさせていただいております。 しかし、精密機器には故障がつきもので、サービス運用の観点からは 「機器が故障するのはしかたない、しかしそれをいかに早く復旧させるか」 といったことを念頭に入れております。 実際には、障害が起こってから復旧させるのではなく、障害が発生した場合に

    Yahoo!オークションでのMySQL 冗長化技術
  • MySQL :: MySQL 8.0 リファレンスマニュアル :: 16.6 BLACKHOLE ストレージエンジン

    BLACKHOLE ストレージエンジンは、データを受け取るけれども破棄して格納しない「ブラックホール」として機能します。 検索は、常に空の結果を返します。 mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE; Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM test; Empty set (0.00 sec) ソースから MySQL を構築する場合に BLACKHOLE ストレ

  • MySQL の複合 DELETE 構文 - 日向夏特殊応援部隊

    1ヶ月半ぶりのエントリです。皆さんお元気ですか? 何故か最近 Eclipse ばっかり使ってる zigorou でございます。 12.2.1 DELETE 構文 を見ていたら複合 DELETE 構文ってのが有ったので試してみました。 前提としてレコードがうんざりする程多いテーブル、、、と言う背景があります。 解説 とりあえず次のようなテーブルがあるとしましょう。 CREATE TABLE `diary` ( `id` int(11) NOT NULL AUTO_INCREMENT, `guid` int(11) NOT NULL, `subject` varchar(32) DEFAULT NULL, `body` text, `created_on` datetime DEFAULT NULL, `updated_on` datetime DEFAULT NULL, PRIMARY KE

    MySQL の複合 DELETE 構文 - 日向夏特殊応援部隊
    hisaichi5518
    hisaichi5518 2010/05/19
    今度試す
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • MySQLで、指定したときだけクエリキャッシュする - (ひ)メモ

    今までMySQLのクエリキャッシュはは有効にしてたんですが、Webサービスだとキャッシュヒットするようなクエリはそんなに多くないし、どこかで見かけたんですが(失念…)クエリキャッシュをオフにしたら(逆に)パフォーマンスが上がっただか負荷が下がっただかというのも目にしたので、今度クエリキャッシュはオフにしようと思ってました。(どのみちヒット率悪いし) そんなとき、同僚に query_cache_type を教えてもらいました。(4.0からあるオプションなのに今まで知りませんでした。。。><) http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type てっきりクエリキャッシュはオンかオフかしかできないと思い込んでたんですが、"DEMAND" を指定すると、「原則キャッシ

    MySQLで、指定したときだけクエリキャッシュする - (ひ)メモ
  • MySQL Replication with Test::mysqld - 日向夏特殊応援部隊

    やってみたかったからついやってみた。 #!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); use DBI; use Test::More; use Test::Exception; use Test::mysqld; use Test::TCP; sub setup_master { # http://dev.mysql.com/doc/refman/5.1/en/replication-howto-masterbaseconfig.html my $mysqld = Test::mysqld->new( auto_start => 2, mysqld => '/usr/sbin/mysqld', my_cnf => +{ 'port' => empty_port(), 'log-bin' => 'mysql

    MySQL Replication with Test::mysqld - 日向夏特殊応援部隊
  • MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary

    MySQL に限らず、SQL のNULL の仕様には何回か「えっ」と驚くことがあったのでメモしておこうと思います。5.1 版の日語マニュアルがなかったものについては、4.1 のマニュアルを参照しました。 そもそもNULL は何を意味するか NULL は未定義または、不明を意味する。「電話番号を持たない」ということを表現する場合は、NULL ではなく、空の文字列を使う。 NULL 値というものを SQL 初心者はよく混乱します。SQL 初心者は、多くの場合、NULL が空文字 "" と同じであると考えてしまいます。これは違います。たとえば、以下のステートメントは完全に別のものです。 mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (""); どちらのス

    MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary
  • たった3秒でInnoDBのデータローディングが快適になるライフハック

    MySQLに限った話ではないが、データベース管理システムに大量のデータを投入するのは時間が掛かり大変苦痛を伴う作業である。劇的に効能があるわけではないが、MySQLを利用しているとき、特にInnoDBを使っている場合にはデータの投入を高速化するためにいくつかテクニックがあるので紹介しよう。皆さんの作業時間が短縮され、少しでも早く帰路に着いたりサービスインさせたりという形でお役に立てれば幸いである。ちなみに、タイトルはネタであるのだが、もし当に3秒で以下の全ての設定を行えた人が居たら教えて頂きたい! ログファイルサイズの調整データ投入時に限った話ではないが、ログファイルサイズを調整するのは更新性能にとって非常に重要なファクターである。バッファプールのサイズが重要なことに代わりはないが、同じぐらいログファイルのサイズも重要である。InnoDBはログファイルを使い切ってしまうと、バッファプール

    たった3秒でInnoDBのデータローディングが快適になるライフハック