タグ

MySQLとtipsに関するclavierのブックマーク (34)

  • SQLBoilerのちょっとしたTips集

    はじめに SQLBoilerは、スキーマに合わせたORMを生成するツールです。 READMEにも書かれていますが、意外と気づきづらい部分があったりするので、使い方から、ちょっとしたTips、ハマりポイントをまとめます。 少しでも参考になれば幸いです。 前提 MySQL SQLBoiler v4.16.1 生成したコードはmodelパッケージに配置されているとします テーブルは以下を想定 CREATE TABLE `teams` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_

    SQLBoilerのちょっとしたTips集
  • MySQL 5.6と5.7のInnoDBバッファプールウォームアップのおはなし | GMOメディア エンジニアブログ

    こんにちは、DBAです。 MySQL 5.6でInnoDBのバッファプールウォームアップが機能追加されました。みなさん使ってますか? MySQL 5.6では正常終了時のダンプも起動時のロードもオフ、対してMySQL 5.7では両方ともオンです。また、MySQL 5.7ではダンプするバッファプールのページ数は(デフォルトでバッファプール全体の25%だけ、となっています。 わたしのオススメ設定は↓です。MySQL 5.6, 5.7両方でも使えるように、loose-接頭辞付きでinnodb_buffer_pool_dump_pct(5.7にあって5.6にないパラメーター)を書いています。 [mysqld] loose-innodb_buffer_pool_dump_pct = 100 innodb_buffer_pool_dump_at_shutdown= 1 innodb_buffer_poo

  • MySQLのrootのパスワードを忘れてしまった…やその類似ケースを、mysqldを停止せずに何とかするメモ

    MySQLのrootのパスワードを忘れてしまった…やその類似ケースを、mysqldを停止せずに何とかするメモ MySQLのrootパスワード忘れた、をググると、--skip-grant-tables を有効にして再起動せよ、というのにぶち当たるのが普通なんですが、カジュアルに再起動する訳にいかないことってあるじゃないですか。 そんなときのTIPS。 まず、ダミーのデータディレクトリをmysql_install_dbで作ります。これはrpmで入れた環境なので、/usrはbasedirです。 $ cd /usr $ bin/mysql_install_db --no-defaults --datadir=/home/mysql/dummy ここに、パスワードを変えたいMySQLmysql.userテーブルをコピーします。少なくともMySQL 5.7.8現在、mysql.userはまだMyIS

  • MySQLのEXPLAINを徹底解説!!

    以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ

    MySQLのEXPLAINを徹底解説!!
  • MySQLによるオンラインバックアップで注意すること | SHINGO IRIE

    MySQLによるオンラインバックアップについて。バックアップにはmysqldumpコマンドを使いますが、単純にバックアップといえども、リストア(復元)する時のことも考えてないといけません。 バイナリログがどこまでかかれているかバックアップをとったとしても、実際にリストアする際には、時間差があります。例えば今日の朝バックアップをとったとして、夜にデータが壊れてリストアする場合、朝から夜までに保存されたデータは復旧できません。そこで、バイナリログが重要になります。バイナリログには実行されたSQL文が記録されていますので、バックアップデータ+このバイナリログで補填できます。 ですので、バックアップをとる際に、その時点でバイナリログがどこまでかかれているか記録しておきます。これは–mastar-data=2オプションをつけます。 共有ロックをかけるバックアップとっている際中に更新が行われないようロ

    MySQLによるオンラインバックアップで注意すること | SHINGO IRIE
  • MYSQLでWHERE句など条件を指定してmysqldumpする - Qiita

    $ mysqldump --opt -u root -p データベース名 テーブル名 "-w where id=1" > dump.sql # CREATE TABLEを書き込まない場合は-t,–no-create-infoオプション Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up

    MYSQLでWHERE句など条件を指定してmysqldumpする - Qiita
  • 【MySQL】大量データで LIMIT と OFFSET を使うと遅い - pospomeのプログラミング日記

    1000万件くらいのテーブルがあって、 そこから LIMIT OFFSET でデータを取得するんだけど、 OFFSET の値が大きければ大きいほど、遅くなる。 なぜ遅いのか? と思って EXPLAIN を実行したところ、 LIMIT OFFSET は テーブルフルスキャン(ALL) だった・・・。 なんとなくインデックスが効いているものだと思ってたが、 そうでもなかった。 --- 追記 2014/11/10 --- コメントにて 「ALLになるのは、何らかのキーでソートしないとALLになります」 とのご指摘をいただきました。 ---------------------- --- 追記 2014/06/13 --- なぜかこの記事の閲覧数が増えていたので内容を再確認してみました。 レコード数が多くなると LIMIT OFFSET が遅いというのは間違いないと思う。 ただ、上記の「LIMIT

    【MySQL】大量データで LIMIT と OFFSET を使うと遅い - pospomeのプログラミング日記
  • MySQL のJOIN に関するメモ - LukeSilvia’s diary

    内容 FROM 句のテーブルの順番と、MySQL がテーブルをJOIN する順番は別 STRAIGHT_JOIN と eq_ref, ref eq_ref になるようにするために JOIN 条件の書き方 STRAIGHT_JOIN をいつ使うか 今回の検証に用いたMySQL は4.0.26。また、例として、以下のテーブルを用いる。(テーブルは、「逆算式SQL教科書」のもの) [study]> SHOW FIELDS FROM uriage; +-------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------+------+-----+---------+---------------

    MySQL のJOIN に関するメモ - LukeSilvia’s diary
  • MySQLのクエリ集計手法いろいろ | Ore no homepage

    Webサービスを開発/運用してるモンとしては、いろんなWebサービスを触ってみなきゃアカンってことで、アメリカの若モンに大人気ってふれこみのsnapchatに登録してみた。これでリア充の仲間入りやと思ったが、snapchat友達が同僚二人しかいないうえに、利用シーンがあまり思い浮かばないww オジサン困っちゃいました。画像とか送信できるんだけど、数秒で消えるの。むしろそこがウリっていうね。どうやって遊ぼうか…。 2月はブログ書かなかったなーと思ったのでMySQL小ネタ。世間的にも自分的にも真新しくもなんともないTipsです。 innotopで集計 実は以前、Qiitaに書いたので↓をば。。。 http://qiita.com/la_luna_azul/items/505ca441b8c8e6a87aaa 流れるクエリ、ロックの状況、トランザクション(show engine innodb s

    MySQLのクエリ集計手法いろいろ | Ore no homepage
  • tree-tips: mysqldumpでロックせずオンラインバックアップする | MySQL

    mysqldumpのオンラインバックアップ mysqldumpのオプション mysqldump時にロックをかけないオプションは「--single-transaction」です。 --single-transaction このオプションはサーバからデータをダンプする前にBEGIN SQLステートメントを発行します。InnoDBといったトランザクションテーブルに対してのみ便利です。なぜなら、アプリケーションをブロックせずに、BEGINが発行された当時のデータベースの状態をダンプするからです。 このオプションを使用しているときは、一定の状態でダンプされるのはInnoDBテーブルのみだということを留意してください。例えば、このオプションを使用中にダンプされたMyISAMやMEMORYテーブルは状態が変化する可能性があります。 mysqldump — データベースバックアッププログラム リファレンス

  • MySQLの超遅いSELECTが劇的に早くなった | X->A->O

    CakePHPはよく触っていたものの、MySQLについてあまり知らなかったんですが、大規模なデータベースを扱ってみようと思い立ちいろいろ試行錯誤しています。 で、ついさっき感動したのが、40万件のレコードを扱ってるテーブルに簡単なSELECT分を投げて返ってくる時間がなんと5秒もかかっていて、なんじゃこりゃ?って首をかしげてたんですが、INDEXひとつで劇的に早くなったこと。 40万件が大規模かそうでないかはこの際おいておいて、INDEXのつけ方次第でこんなにも速度に変化があるのかと涙が出そうになった。 最初の激遅いテーブルは簡単に書くとこんな具合。 CREATE TABLE IF NOT EXISTS `shops` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `status

  • MySQL 容量確保のためのデータ削除方式 | Ore no homepage

    9月から異動になって別のサービスの担当になった。先月はさらに夏季休暇もとっていて、ちょっと旅行に行ってた(日記でも書こうかな…)。なので、最近はだいぶバタバタしてた。 で、まあその異動先のサービスでDBを見てみたらデータ容量があっぷあっぷだった。どうやら不要データを削除していないらしい。んで、早速大量のデータを削除することになったのでそのTipsといか小ネタ。 実際に作業したデータは何十倍も巨大なんだけど、手元の仮想マシンに用意した適当なデータで実験結果を示してみる。 1.  削除件数が少ない時 全件件数が下記の通り。

  • MySQLで複数行を一括でUPDATEする - Qiita

    FrogApps 技術ブログ始めました! RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps データベースを運用していると、一気にデータを投入したり、更新する必要が出てきます。 MySQLではINSERT文では複数行同時に更新できますが、UPDATEでは用意されていません。 そこで、UPDATEとJOINを組み合わせて、既存のテーブルを一気に更新してみます。 例) original_dataテーブルのbodyの値を複数行一気に更新する まずは元データを作ります。 CREATE TABLE tbl1(id INTEGER PRIMARY KEY, body VARCHAR(255)); INSERT INTO tbl1(id, body) VALUES(1, '001'); INSERT INTO tbl1(id, body)

    MySQLで複数行を一括でUPDATEする - Qiita
  • [Linux] yum コマンドを拡張するプラグインまとめ | バシャログ。

    先日、東京スカイツリーを見に行ってきました nakamura です!スカイツリーはもちろんすごかったんですけど、それ以上にすぐ近くにある 空飛ぶうんち にビックリしました。すごい時代になったな・・・。 さてさて今日は Redhat、CentOS、Fedora など rpm 系のディストリビューションを使っている人ならおさえておきたい yum コマンドを拡張するためのプラグインをいくつかご紹介したいと思います。プラグイン自体も yum でインストールできるので導入も楽チンですよ~。 プラグイン紹介 環境は CentOS-6.x 系です。 fastestmirror 接続速度の速いミラーサーバを自動で選択してくれるプラグインです。確か今はデフォルトで入ってるのかな? インストールは以下。 yum install yum-plugin-fastestmirror changelog --chan

    [Linux] yum コマンドを拡張するプラグインまとめ | バシャログ。
  • MySQLでデータ領域をシステムと別diskにするならtmpdirも設定した方がいい - 酒日記 はてな支店

    某所に300ホスト以上を2年ほど監視していたZabbixのMySQLがありまして、データが100GBぐらいになってメモリ8GBのホストではdisk IOが辛くなってきたので、移行することにしました。普段はそんなにでもないのですが、housekeeperが動作して古いデータを消しに行くとバッファプールに乗っていない部分に読みに行って重いのです。 この際折角なので Intel S3700 (サーバ用のSSD) をおごり、 Zabbix-1.8 から 2.0 にアップグレード MySQL-5.0.77 から MySQL-5.6.11 に変更 システムは HDD で /dev/sda1 データは SSD で /dev/sdb1 を /data にマウント という構成で移行の検証を行っていたところ… MySQLのバージョンが大きく上がるので mysqldump を取得して restore 後、pat

  • MySQL5.6のちょっとした話 - まめ畑

    最近、とあるサービスの番環境にMySQL5.6を導入していっています。社内だけの環境も含めて5システムに導入しました。 5.5からのアップデートや最初から5.6というものもあります。 今回、導入で変わった点いろいろありますが、メモ程度にまとめておきます。 間違いなどありましたら指摘していただけるとありがたいです。 Replicationエラー時 今までは、replicationのエラーが起こった場合は SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; とかでダメなクエリを確認しつつSKIP出来ればしていましたが、5.6でGTIDモードONの場合、これが使えなくなりました。 GTID便利なんですが、この点少し不便です。 以下のように直します。 まず、slaveでmaster server UUIDと最新のGTID、Retrieved_Gtid_Setを確認します

    MySQL5.6のちょっとした話 - まめ畑
  • MySQL の max_allowed_packet を設定 - satococoa's blog

    ActiveRecord で Mysql2::Error: MySQL server has gone away と言われて困ったのです。 さっぱり原因がわからずに同僚の @DianthuDia 先生に聞いてみたところ、どうやら大きなデータを MEDIUMTEXT 型のカラムに保存しようとしたときに、以下の MySQL の設定にひっかかって失敗していたらしいです。 1 2 3 4 5 6 7 > show variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+

  • ChefでCookbookを作成するときのちょっとしたコツ 9選 - インフラエンジニアway - powered by HEARTBEATS

    こんにちは。斎藤です。 Chefで構築の自動化ができる事はわかっていても、Cookbookをどう記述すればいいのかピンとこない場合があります。そんなときに使えそうなコツをピックアップしてみました。 「Chefを使ってみたいけどいまいちとっかかりがわかりづらい」「あれ、これはどうやるんだ?」、そんなときにご覧頂けたら幸いです。 ※Chef 10.16.2で確認しました。また、RHEL, CentOSで利用する事を前提に説明しています。 Cookbookに同梱したRPMファイルから直接インストールする cookbook_fileとpackageリソースを組み合わせて実行します。 下記の例は、MySQLサーバをRPMファイルを用いてインストールします。 "MySQL-server-5.5.29-1.el6.x86_64.rpm"ファイルをあらかじめ "files/default" 内に保存します

  • MySQL の便利機能をメモ | バシャログ。

    先日、台風が来てるというのに終電間際の電車で寝過ごし、どしゃ降りの中土地勘のない場所を 1 時間ほど歩いた kimoto です。ネタとして楽しんでいた iOS6 の地図をこんなに恨めしく思う事になるとは…。いまだに脚が痛い。 今回は MySQL で、頻繁に使うことはないものの便利なためちょいちょい使う。そして、その度にググっている…。 そんな機能達をまとめてメモっておこうと思います。 目次はこんな感じ。ではどうぞ。 GROUP で集計したデータの合計値を出力したい! 結果を結合した状態で取得したい! SELECT の結果を INSERT したい! 結果をランダムに取得したい! まずはこんなデータを用意してみました mysql> SELECT * FROM users; +----+-----------+-----+-----+------+ | id | name | sex | age

    MySQL の便利機能をメモ | バシャログ。
  • MyISAMとInnoDBのどちらを使うべきか

    Twitterで話題になってたので簡単にまとめました。 ●MyISAMにしか無い機能を使いたい場合はMyISAMを使うしかない ・全文検索 (TritonnやSphinx) ・GIS ●InnoDBの利点(MyISAMの欠点) ▲障害対応系 ・クラッシュしても再起動するだけでリカバリができる ・クラッシュリカバリにかかる時間はテーブルサイズに比例するようなことはなく、コミット済みのデータは修復できる (巨大なMyISAMテーブルのREPAIRには数日単位で時間がかかることがある) ・オンラインバックアップができる ・INSERTやLOAD DATAなどを実行している途中でCtrl+Cでその更新系SQL文を止めても、テーブルは壊れないし、中途半端な状態で更新されることも無いし、スレーブが止まることも無い ▲性能系 ・行レベルロックなので並列性が高い(MyISAMはテーブルロック)。またSEL