タグ

mysqlに関するdirablueのブックマーク (39)

  • mysqlのロック方法について一つ賢くなった

    @nqounetです。 mysqlで運用しているサービスで、1日に2,3回ほどDeadlockによってエラーが発生するという問題がありました。 その問題が解決したのでメモを残しておきます。 最初にまとめ mysqlのInnoDBでdeleteするのは、削除対象のレコードがある場合のみにする必要がある。 delete時に対象レコードがない場合、ギャップロックがかかりinsertが通らなくなる。 実装のちょっとした手抜きが頭を悩ます、という良い(悪い?)例になった。 参考 【MySQL】InnoDBのロック関連まとめ - Qiita まずかった実装 モデルケースとしてはupdateをdelete->insertにしていた感じの部分。 イメージはこんな感じ。 書き込む行数が変わる場合があるので毎回deleteしてからinsertしていた。 最初はinsertとupdate(delete->ins

    dirablue
    dirablue 2018/06/05
    gap lock, deadlock
  • Benchmarking single-row insert performance on Amazon EC2

  • MySQL管理ソフト「Sequel Pro」が本格的にヤバい | Mac教信仰中!!

    先日、MySQLの管理ソフトを探していたところ、まさしく神じゃないかというソフトを発見しました。以下のサイトで、紹介されていました。 高機能なMySQLフロントエンド「Sequel Pro」|オープンソース・ソフトウェア、ITニュースを毎日紹介するエンジニア、デザイナー向けブログ http://www.moongift.jp/2008/06/sequel_pro/ それが、「Sequel Pro」です。 Sequel Pro http://www.sequelpro.com/ 「Sequel Pro」は、Mac用に開発されたオープンソースのソフトウェアです。ただ、オープンソースと言っても、高機能すぎて、無料であることを疑ってしまいます。そんじょそこらのオープンソースのソフトウェアと同じように考えないでください。 ダウンロードしたら、まずは起動してみましょう。MySQLサーバの情報を入力して

    MySQL管理ソフト「Sequel Pro」が本格的にヤバい | Mac教信仰中!!
    dirablue
    dirablue 2014/07/23
    ツール
  • mysqld_multiの設定方法

    mysqld_multi 概要 mysqld_multiはmysqld ( MySQLサーバ ) プロセスを複数立ち上げる手法のひとつです。この方法を使用すれば、1つのOS上でbackupやreplicationの練習をする事ができます。このページではmysqld_multiの設定方法, 使い方について説明します。 複数プロセスのmysqld ( MySQLサーバ ) を立ち上げる方法は大きく分けて以下の3つがあります。 オプションを直接指定する方法 複数のmy.cnfを作成する方法 mysqld_multiを使用する方法 実務で使用するのは、”mysqld_multiを使用する方法”のみであると思います。しかし、MySQLの仕様理解のために、まずは”オプションを直接指定する方法”と”複数のmy.cnf”を作成する方法について説明します。 MySQL オプション直接指定 MySQL オプシ

    mysqld_multiの設定方法
    dirablue
    dirablue 2014/07/21
    設定ドキュメント
  • mysqld_multiで複数のインスタンスを立ち上げ - ngyukiの日記

    1つのサーバで複数のMySQLのインスタンスを立ち上げるために mysqld_multi を使ったときのメモです。 使用した版は 5.1.61-1.el6_2.1 (CentOS6) です。 設定ファイルを作成します。 vi /etc/my.cnfとりあえず以下の様に作成します、基的な設定のみです。 # クライアントの設定 [client] default-character-set = utf8 # mysqld_multiの設定 [mysqld_multi] mysqld = /usr/bin/mysqld_safe mysqladmin = /usr/bin/mysqladmin log = /var/log/mysql/multi.log # 全てのインスタンスで共通の設定 [mysqld] character-set-server = utf8 default-storage-

    mysqld_multiで複数のインスタンスを立ち上げ - ngyukiの日記
    dirablue
    dirablue 2014/07/21
    mysqlを複数プロセス立ち上げる
  • MySQL :: MySQL 4.1 リファレンスマニュアル :: 12.1 返されるエラー

    任意のホスト言語で MySQL を呼び出したときに発生する可能性があるエラーコードのリストを以下に示します。 名前およびエラーコードの列は、MySQL ソースコードファイル include/mysqld_error.h の定義に対応します。 SQLSTATE の列は、MySQL ソースコードファイル include/sql_state.h の定義に対応します。 SQLSTATE エラーコードは、MySQL バージョン 4.1 を使用する場合にのみ表示されます。SQLSTATE は、X/Open/ANSI/ODBC の動作と互換性を持たせるために追加されました。 各エラーコードに対する説明テキストは、エラーメッセージファイル share/english/errmsg.sys に記述されています。 更新は頻繁に行われるので、上記のソースにエラーコードが追加される可能性があります。 Error:

    dirablue
    dirablue 2014/02/05
    エラーコード
  • MySQL DATETIME型へのINDEX注意点 | perlとMysqlでCGI & サーバ管理 漏れ的メモ

    MySQLのDATETIME型へインデックスをつける場合注意が必要。 例えばこんなSQLではインデックスが使用されない。 SELECT * FROM table WHERE datetime LIKE '2009-05-17%' 検索結果は2009-05-17分全てが抽出されるが、フルスキャンがかかる。 この場合、以下のようなSQLが良い。 SELECT * FROM table WHERE date_time BETWEEN '2009-05-17' AND '2009-05-17' + INTERVAL 1 DAY 実行時間計測の例 行数:13,776行 データ:2,935KB インデックス:datetime SELECT SUM( col ) FROM table WHERE datetime LIKE '2009-05-17%' フルスキャン 実行時間:0.0235 秒 SELEC

    MySQL DATETIME型へのINDEX注意点 | perlとMysqlでCGI & サーバ管理 漏れ的メモ
    dirablue
    dirablue 2014/01/21
    日付の範囲検索でindexを使う
  • MySQL での日付の範囲指定

    select * from items where created_at between '2010-01-01' and '2010-01-01' + interval 30 day;

    MySQL での日付の範囲指定
    dirablue
    dirablue 2014/01/21
    日付の範囲検索でindexを有効にする
  • MySQLにおけるレプリケーション遅延の傾向と対策

    レプリケーションはMySQLで最もよく使われる機能のひとつだ。レプリケーションは基的に非同期でデータの複製を行う仕組みになっているのだが、非同期故にどうしても逃れられない問題がある。そのひとつが今回のテーマ、遅延である。というと、MySQLのレプリケーションはすぐに遅延が生じてしまうように感じてしまうかも知れないが、そのようなことはない。ほとんどの場合は即座にスレーブの更新が行われる。 なぜ遅延は発生するのか、どのように遅延が起きていることを調べるのか、どのように回避するのかということをエントリでは解説したい。うまく遅延と付き合って、MySQLのレプリケーションをより快適に運用してもらえればと思う。 そもそも遅延とは何かMySQLのレプリケーションは非同期で行われる。これは準同期でも同じであり、スレーブにおいて更新が起きるのはマスターよりも一瞬遅れてしまう。これは非同期であるが故に逃れ

    MySQLにおけるレプリケーション遅延の傾向と対策
  • spiderってなんじゃ?(spider自身の冗長化)

    いままではSpiderがひとつに対して、データノードが複数ある構成をとってきましたが、実戦ではSpiderが単一障害点になるため好ましくありません。ここではSpider自身の冗長化を行なってみます。 いままでのSpider x 1 + mroonga x 2 の構成に対してデータを入れ込むためのappノードを用意します。 SpoderのSPOF mroonga CREATE TABLE doc ( id INT PRIMARY KEY AUTO_INCREMENT, created_at datetime, content text, FULLTEXT INDEX (content) ) ENGINE = mroonga; spider CREATE TABLE doc ( id BIGINT PRIMARY KEY AUTO_INCREMENT, created_at datetime,

    spiderってなんじゃ?(spider自身の冗長化)
  • Spiderってなんじゃ?(SUBPARTITIONで負荷分散しながらストレージ容量を無限追加)

    Spiderシリーズです。Spiderではパーティションを使ってシャーディングしますが、パーティションの定義によって分散の特性が変わります。 1. サロゲートキーなどのHASHパーティション データは均等に分散 更新負荷は均等に分散 増設はデータ全体の再ハッシュが必要 2. 日付の年月などのHASHパーティション データは順次格納 更新負荷は常に1データノードにのみかかる 増設は新しい年月を追加 3. サロゲートキーなどのRANGEパーティション データは順次格納 更新負荷は常に1データノードにのみかかる 増設は新しいキー範囲を追加 理想は均等に負荷分散しながら、データ容量を後から増やせるのがベストですが、1,2,3とも負荷分散と容量追加のどちらかにしか親和性がありません。 そこで、作者の斯波さん(@kentokushiba)に伺ったところ、 SpiderでもSUBPARTITIONが使え

    Spiderってなんじゃ?(SUBPARTITIONで負荷分散しながらストレージ容量を無限追加)
  • 快適スケールアウト生活への第一歩。SPIDERストレージエンジンを使ってみよう!

    先月、Not Only NoSQL!! 驚異的なまでにWRITE性能をスケールさせるSPIDERストレージエンジンというエントリでSPIDERストレージエンジンによるスケールアウトが凄い!という話を書いた。SPIDERストレージエンジンは凄いヤツだが、ノウハウがあまりウェブ上で見つからない。唯一見つかる日語の記事は、ウノウラボによる「国産MySQLストレージエンジン「Spider」の作者、斯波健徳氏に聞く 」だけである。SPIDERストレージエンジンは斯波氏による単独の作品であるため、斯波氏は開発だけで手いっぱいであり、使い方の紹介記事を書くことまでは手が回らないのであろう。こんな凄いストレージエンジンをドキュメントが足りないせいで使って貰えないなんて勿体ない!! というわけで、今日はSPIDERストレージエンジンの基的な使い方について紹介する。少し長いエントリであるが、最後までお付き

    快適スケールアウト生活への第一歩。SPIDERストレージエンジンを使ってみよう!
  • RDS:MySQLのクエリログを取得する - サーバーワークスエンジニアブログ

    こんにちは、開発部の千葉です。 設計が悪いと言われてしまいそうですが、RDBを利用するプロジェクトにて ORMを使って複雑なSELECT文を書くことがあります。 そんな時は、ORMを『信じる気持ち』と『疑う気持ち』が葛藤して どうも実際に発行されているクエリが気になってしまいます。 また、クライアントから『ドコドコの処理が遅い』なんて言われると 経験則から、まずはWHERE句・ORDER句を確認します。 AWSを利用する前は、開発環境で発行されたクエリは全てログファイルへ出力して 同ファイルをtailしながらコーディングしていました。 しかし、RDSインスタンスではssh接続は許可されていない為、ファイルをtailすることはできません。 その代わり、ログファイルに出力していた内容を、あるテーブルに出力するパラメータが用意されていました。 設定手順は以下のとおりです。 ※{}内は、適切な値を

    RDS:MySQLのクエリログを取得する - サーバーワークスエンジニアブログ
  • MacからMySQLをアンインストールする方法 - マオの徒然日記

    MacMySQLを導入しようとしたのだけど、思った以上に苦戦。 皆が日記に書いている通りだぜ・・・。 ということで、MacMySQLを入れてみて、都合上他のVerにしたいと思い、 アンインストールしてみたつもりになったんだけど、 なんか再度インストールしようとすると詰まる。むむむ。 ということで、再インストール時にひっかからないような アンインストール方法を発見したのでメモメモ。 機会忍者 MySQLのアンインストール方法(MAC OS X) 感謝感謝! 以下のコマンドで以下のものを削除すればOKみたい。 # rm -rf /usr/local/mysqlmysql-5.1.0.・・・のような名前のものも一緒に削除) # rm -rf /Library/StartupItems/MYSQLCOM # rm -rf /Library/PreferencePanes/MySQL.pref

    MacからMySQLをアンインストールする方法 - マオの徒然日記
  • DeNAが社内利用しているMySQLの自動フェイルオーバーツール、オープンソースで公開開始

    MySQLがダウンしたときに自動的に別のMySQLへ処理を引き継ぐことで、高可用性を実現するフェイルオーバーツール「MySQL-MHA: MySQL Master High Availability manager and tools」がオープンソースとして公開されたことを、作者の松信嘉範(まつのぶよしのり)氏がブログで伝えています。 Yoshinori Matsunobu's blog: Announcing MySQL-MHA: "MySQL Master High Availability manager and tools" 松信氏はモバゲーなどで知られるDeNAに勤務しており、MySQL-MHAによる自動フェイルオーバー機能はDeNAのインフラ運用を支えているとのこと。同氏のブログから引用します。 Difficulties of master failover is one of

    DeNAが社内利用しているMySQLの自動フェイルオーバーツール、オープンソースで公開開始
  • [GDC 2012]Mobageのサービスを支えるデータベースシステムについて,ディー・エヌ・エー松信氏が解説

    [GDC 2012]Mobageのサービスを支えるデータベースシステムについて,ディー・エヌ・エー松信氏が解説 ライター:米田 聡 ディー・エヌ・エーの松信嘉範氏 GDC 2012では,日のディー・エヌ・エーもいくつかのセッションを持っていた。稿ではディー・エヌ・エーが展開するMobageのデータベースに関する「Scaling and Stabilizing Large Server Side Infrastructure」(大規模サーバーのスケーリングと安定化)と題されたセッションをレポートしてみたい。あまり派手な話題ではないので要点のみをお伝えするが,Mobageの裏にはこんな苦労があったのだ。 セッションを担当したのは,ディー・エヌ・エーの松信嘉範氏だ。松信氏の名はゲーム業界的には知られていないかもしれないが,Oracleエキスパートの称号を持ち,オラクルが手がけるデータベースサ

    [GDC 2012]Mobageのサービスを支えるデータベースシステムについて,ディー・エヌ・エー松信氏が解説
  • 大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック

    OSC 2011 Hokkaidoの発表で使用したスライド資料です。 弊社が「ブラウザ三国志」や「英雄クエスト」といったゲームを、PHPMySQLで構築してきた上で、身につけたノウハウや、注意すべき箇所、指針などをまとめた資料となっています。Read less

    大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
  • MySQLとオープンソースに捧げる毎日:MySQLの管理など - livedoor Blog(ブログ)

    今回も前回に引き続き、ただいま受講中のMySQLトレーニングの実況中継(4日目)。 いつも応援ありがとう! 【参考】 MySQL Certification Study Guide 今日のトレーニングは、MySQLのログ、トランザクション、バックアップ、レプリケーションについて。 実践に役立ちそうな技から、試験ぐらいでしか使わなそうな技まで、気になったものをトレーニングを受けながらリアルタイムに追記していくので、もし今日の分をまとめて見たいあなたは、18時以降にまたどうぞ。 一般クエリーログをオン(デフォルトはオフのまま)にすると、発行されたクエリーを記録できるが、パフォーマンスが10%ほど低下する。 スロークエリーログを使うと、実行の遅いクエリーやインデックスを使用していないクエリーを記録できる。 基的にMyISAMの方がselect、insertなどの動作がInnoDBよりも速い。

    dirablue
    dirablue 2011/05/28
    排他ロック ネクストキーロック
  • MySQLの基礎を学ぼう [準備編]

    MySQL5.0の追加機能 先ほど紹介したMySQLの操作に加え、MySQL5.0では新たな機能が追加されています。 ここでは、次回以降で使用する機能を中心に紹介します。MySQL5.0で追加された機能については「エンタープライズ市場に向かうMySQL 5.0」も参考にしてください。 テーブルタイプとキャラクターセットを指定 MySQL5.0では、CREATE TABLEクエリー実行時に「テーブルタイプ」と「キャラクターセット」を設定できます。MySQLでは、テーブルタイプごとに使用できる機能が限定されます。 例えば、トランザクションをサポートする「InnoDB」、高いパフォーマンスと高機能を兼ね備えた「MyISAM」、一時的な作業テーブルに使用される「MEMORY」など、数多くのテーブルタイプが選択できます。現在使用しているMySQLでサポートしているテーブルタイプを見る場合は、「SHO

    MySQLの基礎を学ぼう [準備編]
    dirablue
    dirablue 2011/05/23
    排他ロック トランザクション
  • MySQL レプリケーションの設定 - とみぞーノート

    1.2 レプリケーションの動作レプリケーションでは最初にDBの内容を同期させた後、Masterサーバーで実行された更新系のクエリ(UPDATEとか)をSlaveに渡してSlaveでも同じクエリを実行していくことで、DBを同期させている(図1)。 Master側で実行された更新系クエリはバイナリログに蓄えられており、Slave側が接続してきたら、前回の接続からの変更分をSlave側に送信する。Slave側は受け取ったクエリを一旦リレーログに蓄えて順次クエリを実行してDBを同期させていく。リプリケーション動作にはBinlogDump,I/O,SQLの3つのスレッドが連携して動作する。 2.設定手順 (Master-Slave構成) 2.1 Master側の設定の確認Master側ではバイナリログを採取しておく必要があるので、Master側のmy.cnfにlog-binの設定が入っていることを確