タグ

mysqlに関するn314のブックマーク (34)

  • 排他制御のためだけに Redis 渋々使ってませんか?データベース単独でアドバイザリーロックできるよ!

    トランザクション分離レベルについての教養があったほうがこの記事の内容を理解しやすいため,必要に応じてまず以下を参照されたい。 背景 以前, Qiita で以下の記事を投稿した。今回の議題に直接的な関係はないが,関連している部分があるため引用する。 MySQL/Postgres とも, MVCC アーキテクチャの恩恵で, SELECT と UPDATE は基的には競合しない。 単一レコードのシンプルな UPDATE でも排他ロックされ,排他ロック中のレコードへの UPDATE での変更操作は トランザクション分離レベルによらず ブロックされる。UPDATE 文に含まれる WHERE 句での検索もブロックされ,これはブロックされない SELECT による検索とは別扱いになる。 但し UPDATE 文の WHERE 句上で,更新対象をサブクエリの SELECT から自己参照している場合は例外。

    排他制御のためだけに Redis 渋々使ってませんか?データベース単独でアドバイザリーロックできるよ!
  • MySQL 5.7 にて STRAIGHT_JOIN を使って JOIN する順番を指定してチューニングした話 - Qiita

    n314
    n314 2022/07/05
    へ〜。自分だったらwhereとlimitを最後に書くんじゃなくて、t0を絞り込んでlimitした後にjoinするかな。
  • Node.jsのMySQLパッケージにおけるエスケープ処理だけでは防げない「隠れた」SQLインジェクション - Flatt Security Blog

    記事は筆者styprが英語で執筆した記事を株式会社Flatt Security社内で日語に翻訳したものになります。 TL;DR Node.jsのエコシステムで最も人気のあるMySQLパッケージの一つである mysqljs/mysql (https://github.com/mysqljs/mysql)において、クエリのエスケープ関数の予期せぬ動作がSQLインジェクションを引き起こす可能性があることが判明しました。 通常、クエリのエスケープ関数やプレースホルダはSQLインジェクションを防ぐことが知られています。しかし、mysqljs/mysql は、値の種類によってエスケープ方法が異なることが知られており、攻撃者が異なる値の種類でパラメータを渡すと、最終的に予期せぬ動作を引き起こす可能性があります。予期せぬ動作とは、バグのような動作やSQLインジェクションなどです。 ほぼすべてのオンラ

    Node.jsのMySQLパッケージにおけるエスケープ処理だけでは防げない「隠れた」SQLインジェクション - Flatt Security Blog
    n314
    n314 2022/02/16
    プリペアドステートメントじゃなくて言葉通りエスケープなのね。PHPerなので15年ぐらい前に(有名ライブラリを使ったとしても)自前でエスケープするなって散々言われてた気がするが。
  • MySQL (MariaDB) でハマった仕様 - kamocyc’s blog

    以前,MySQL (正確にはMariaDB) を使った際,いろいろはまったので記載します. 使ったバージョンが古い(MariaDB 10.1.37, MySQL 5.7くらいに相当)なので,最新版では治っているところもいくつかあります. sql_modeをデフォルトの設定で使わない これはよく言われていることですが,sql_modeがデフォルトでは変な値が入ったりエラーになって欲しいところがスルーされたりしてまずいので,適切なsql_modeを設定します. 第18回 MySQL5.7のデフォルトのSQLモードを確認してみる:MySQL道普請便り|gihyo.jp … 技術評論社 MySQLSQLモードをstrictモードで設定する。 - Qiita ただ,MySQL 5.7以降はデフォルト設定が改善されたようです.(でも確認すべきですが) MySQL :: MySQL 8.0 Refer

    MySQL (MariaDB) でハマった仕様 - kamocyc’s blog
    n314
    n314 2020/02/18
    長時間ハマってもメモしなかったらすぐ忘れてしまう。
  • MySQLでGrant文でユーザを作成するのに違和感を感じる · DQNEO日記

    MySQLの入門記事で、「GRANT文でユーザを作成します」という説明をよく見かけます。 こんなやつ。 GRANT ALL PRIVILEGES ON *.* TO 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード'; 確かにこれでユーザ作成できますが、なんか違和感を感じるんですよね。 その英文からユーザが作成されるようには見えない 英語的になんかおかしい。 英語のGrant = 「許可する」でしょ?「指定したユーザに権限を与える」みたいな英文なのに、ユーザを作っちゃってる。おまけにパスワードも設定しちゃってる。 MySQLはユーザを作る別の方法として CREATE USER というのもある。GRANTでユーザ作れるとしたら、CREATE USERは何のためにあるの?とMySQL初心者の私は混乱してしまうわけです。 そこで公式マニュアルを読んで整理してみまし

    MySQLでGrant文でユーザを作成するのに違和感を感じる · DQNEO日記
    n314
    n314 2019/07/13
    今更だけど
  • Webシステムにおけるデータベース接続アーキテクチャ概論 - ゆううきブログ

    先月投稿した2015年Webサーバアーキテクチャ序論では、Webサーバアーキテクチャを学ぶ道のりと代表的な実装モデルの概要を紹介しました。 今回は、前回同様、主に新卒Webエンジニア向けに、Webアプリケーションサーバとデータベースサーバ間の接続管理モデルと運用事情について紹介します。 データベース接続の永続化やコネクションプーリングとは何なのか、なぜ必要なのかといったことが主な話題です。 背景 データベース接続の永続化とはなにか データベース接続のオーバヘッド データベース接続の永続化手法 コネクションプーリングとはなにか コネクションプーリング: ドライバ型 コネクションプーリング: プロキシ型 コネクションプーリング全体について PostgreSQLMySQL 参考資料 まとめ 背景 2015年Webサーバアーキテクチャ序論では、Webサーバアーキテクチャの話とWebアプリケーショ

    Webシステムにおけるデータベース接続アーキテクチャ概論 - ゆううきブログ
  • SQLで羃等にDBスキーマ管理ができるツール「sqldef」を作った - k0kubun's blog

    sqldefのリポジトリ github.com これは何か Ridgepoleというツールをご存じでしょうか。 これはRubyのDSLでcreate_tableやadd_index等を書いてスキーマ定義をしておくとそれと実際のスキーマの差異を埋めるために必要なDDLを自動で生成・適用できる便利なツールです。一方、 で言われているように、Ridgepoleを動作させるためにはRubyやActiveRecordといった依存をインストールする必要があり、Railsアプリケーション以外で使う場合には少々面倒なことになります。*1 *2 そこで、Pure Goで書くことでワンバイナリにし、また別言語圏の人でも使いやすいよう、RubyのDSLのかわりに、誰でも知ってるSQLCREATE TABLEやALTER TABLEを書いて同じことができるようにしたのがsqldefです。 使用例 現時点ではMy

    SQLで羃等にDBスキーマ管理ができるツール「sqldef」を作った - k0kubun's blog
    n314
    n314 2018/08/25
    気になる。追加はいいとして削除とかリネームとかが自動だと取り返しつかないことになったりもしそうだが、そういうのどうするんだろう。
  • MySQLでSQLのみを使用してランダム取得を劇的に早くする方法 - 僕のススメ。

    MySQLでランダムに20行をとるためには以下のようにやればいい。 SELECT * FROM table_name ORDER BY RAND() LIMIT 0, 20; 簡単に取得できるのはいいんだけど、行数が増えると劇的に遅い。どれくらい違うかって言うと10万行のデータベースでも↓ぐらい違う。 表示中の列 0 - 19 (20 合計, クエリの実行時間 0.0070 秒) SELECT * FROM table_name LIMIT 0 , 20 表示中の列 0 - 19 (20 合計, クエリの実行時間 1.1884 秒) SELECT * FROM table_name ORDER BY RAND() LIMIT 0, 20; なんでこんなに時間がかかるのかと調べてみると、どうも*を使うから遅いらしい。ということで、列名に主キーを指定して試してみる。 表示中の列 0 - 19

    MySQLでSQLのみを使用してランダム取得を劇的に早くする方法 - 僕のススメ。
    n314
    n314 2018/06/11
  • MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。

    ゴールデンウィークはいかがお過ごしされただろうか。今年は天気も良く、行楽日和が続いたように思う。 さて、先日MySQL 8.0が正式にリリースされた。少し時間が経ってしまったが、今回はMySQL 8.0の新機能について紹介したい。コミュニティ版のダウンロードはこちらから可能だ。 ひとつ前の正式バージョンはMySQL 5.7だったのだが、MySQL 8.0は非常に大きなリファクタリングが含まれており、5.x台のバージョン番号を捨て去ろうという話があった。そこで、次のメジャーバージョンは最初の桁を増やすということになったのだが、MySQL 6.0は過去に既に存在し、買収などの騒ぎで開発が頓挫してしまった経緯がある。7.xはMySQL NDB Clusterと被っている。というわけで、5.7の7の部分の次という意味合いもあって、8.0というバージョン番号を引っさげ、満を持しての登場となった。その

    MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。
    n314
    n314 2018/05/07
  • MySQLのFLOAT型を使う理由が見つからない件 - hnwの日記

    MySQLのデータ型としてFLOAT型という型があるのですが、これを採用するのは混乱の元ではないか?と感じたので、その詳細を紹介します。 そもそもこの話のきっかけは「MySQLで6桁までの小数点を丸めずに扱うならFLOAT型を使うべき理由」という記事が目に止まったことです。それなりに人気を集めている記事のようですが、私の読んだ限りではFLOAT型を使うだけの根拠が文中から読み取れず、さらに類似する一次情報や英語記事が全く見つからなかったので、真偽が怪しい情報だと感じました。 その後、MySQL上で実験したりCソースコードを読んでみたりした結果、私の得た結論は真逆のものになりました。MySQL警察の方や浮動小数点数警察の方、追試や反論など頂けると助かります。 MySQLのFLOAT型とは MySQLのFLOAT型は原則としてIEEE754浮動小数点数単精度型(32bit)で実現されます*1。

    MySQLのFLOAT型を使う理由が見つからない件 - hnwの日記
    n314
    n314 2017/12/22
    この前ハマった。四捨五入がうまくいかず、計算の前にキャストするようなSQLを書いた記憶が。
  • MySQLを割と一人で300台管理する技術

    2017/09/05 db tech showcase Tokyo 2017 http://www.db-tech-showcase.com/dbts/tokyo

    MySQLを割と一人で300台管理する技術
    n314
    n314 2017/09/06
  • PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! - エンジニアHub|Webエンジニアのキャリアを考える!

    PostgreSQLMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! オープンソースのデータベースとしてよく比較されるPostgreSQLMySQL。どんな長所・短所があるのでしょう? それぞれの専門家による対談で明らかにします。 エンジニアとして働いていると必ず直面する悩み。それは、「どのリレーショナル・データベース(以下、RDB)を選ぶのが最善なのか?」です。 RDBごとに長所と短所は異なっています。そのため自社サービスにマッチしないRDBを選んでしまうと、それがボトルネックとなり開発・運用にトラブルが生じるケースは少なくありません。 なかでもよく比較検討されるのが、PostgreSQLMySQL。ともにオープンソースRDBのデファクトスタンダードであり、高い性能と数多くの機能を持っています。 では、両者は具体的にどのような長所・短所があるのでしょうか。そ

    PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! - エンジニアHub|Webエンジニアのキャリアを考える!
    n314
    n314 2017/09/05
    軽いインタビューじゃなくてもっと深掘りしてほしかった。
  • trdsqlというコマンドラインツールを作った - Qiita

    trdsqlというコマンドラインツールを作りました。 Goで作ってます。 githubの trdsqlからダウンロード出来ます。 またLinux/Windows/macOSのバイナリもあります。 以下は、古くなっている内容もいくつかあります。 最新版に対応した、より詳細な内容は trdsql 目次 | Noboru Saito's page を参照して下さい。 これは何? 簡単に言えばCSV(TSV含む)やLTSVに対してSQLを実行できるツールです。 同様のツールが q や textql 等いくつかあります。 trdsqlはPostgreSQLドライバとMySQLドライバを含んでいて実際にDBに接続することでSQLite以上の機能を使用できるようにしています。 PostgreSQLMySQLの構文が使えるだけではなく、CSVファイルと実テーブルでJOINしたり、CSVファイルからテーブ

    trdsqlというコマンドラインツールを作った - Qiita
    n314
    n314 2017/08/18
    ちょっとしたツールかと思ったら連携がすごい。ここから更に、例えばPHPのPDOドライバ作ったりしたらDBのリアルなユニットテストが超楽にならない?夢がある。
  • MySQL のサブクエリって、ほんとに遅いの? | DevelopersIO

    こんにちは、みかみです。 今日のクラスメソッドのAWSおみくじ、RDS(t1.micro)でしたー!(昨日は Aurora!@@v はじめに 前職@アプリ開発時、MySQL のクエリチューニングをさせていただく機会がありました。 ユーザー入力のキーワードで全文検索 → 見つかったレコードを返すのですが、所要時間、約3分。。 Apache タイムアウトして画面真っ白。。。(泣きそうでした><。 EXPLAINで実行計画を調べた際に、select_typeにはクエリの種類が表示されるのだが、代表的なサブクエリには次の3つのパターンがある。 SUBQUERY DEPENDENT SUBQUERY DERIVED 結論から言おう。遅いのは2番目、DEPENDENT SUBQUERYである。DEPENDENT SUBQUERYとはいわゆる相関サブクエリに相当するもので、サブクエリにおいて外部クエリの

    MySQL のサブクエリって、ほんとに遅いの? | DevelopersIO
  • MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ

    こんにちは、サービス開発部の荒引 (@a_bicky) です。 突然ですが、RDBMS の既存のテーブルを見てみたら「何でこんなにインデックスだらけなの?」みたいな経験はありませんか?不要なインデックスは容量を圧迫したり、挿入が遅くなったりと良いことがありません。 そんなわけで、今回はレコードを検索するために必要なインデックスの基礎知識と、よく見かける不適切なインデックスについて解説します。クックパッドでは Rails のデータベースとして主に MySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説します。 InnoDB のインデックスに関する基礎知識 インデックスの構造 (B+ 木) InnoDB では B+ 木が使われています。B+ 木は次のような特徴を持った木構造です。 次数を b とすると、

    MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ
    n314
    n314 2017/04/19
    これが理解できるだけでは運用までいけないような。使われてない画像とか無駄なCSSとか見直したら残ってたりするよねえ…。
  • mysqldiff を使って継続的に MySQL のデータベーススキーマの差分をチェックする - kakakakakku blog

    最近,環境ごとのデータベーススキーマの差分をチェックする機会があった.プロダクション環境とステージング環境ならまだしも,開発環境だと検証のために追加したインデックスがそのままになっていたり,開発が途中で止まってしまって日の目を見ることがなかったテーブルが残っていたり,そういうことって比較的あるのではないかなと思う.特に今の環境だと,マイグレーションの仕組みが整っていないという課題もあり,より一層,データベーススキーマに差分が出やすくなってしまっている. 今回は MySQL から公式に提供されている mysqldiff というツールを使ってデータベーススキーマの差分をチェックした. mysqldiff をインストールする mysqldiff は MySQL Utilities という MySQL の管理ツールパッケージの中に同梱されている.現在だと v1.6 が最新になっている. MySQL

    mysqldiff を使って継続的に MySQL のデータベーススキーマの差分をチェックする - kakakakakku blog
    n314
    n314 2017/04/03
  • Laravel + MySQL5.7 で日本語全文検索をする方法とちょっとした注意点 - Qiita

    皆さんこんにちは ちょっとしたアプリケーションを作っていると、キーワードやフリーワードを利用した検索が必要になったりします。 でも、そのときにLIKE検索なんてやっていると、全データを走査する可能性があり、あまり気分の良いものではありません。 そこで、適当な全文検索エンジンを使ってインデックスを張っておきたいなと思うわけですが...MySQLの場合、5.6まではデフォルトで(InnoDBに)日語全文検索エンジンを入れていなかったりと、少々ハードルが高かったのです。 今回はMySQL5.7でデフォルトでNgramが搭載されているようなので、Laravelで全文検索を実装してみましょう。 例によって今回もLaradockを使用して即席環境を構築しています。 MySQLに全文検索が来た! 大昔のtritton, ちょい昔のgroongaのように、外部のプラグインを導入することなく、裸のMySQ

    Laravel + MySQL5.7 で日本語全文検索をする方法とちょっとした注意点 - Qiita
    n314
    n314 2017/01/31
    日本語全文検索が標準搭載されるのか。なんかOS標準がMariaDBに変わったりしていて最近の動向がよくわからない…。
  • UberのPostgresqlからNoSQL on MySQLへの移行を読んでざっくりまとめた

    Uber-migrated-pg-to-mysql.md Why Uber Engineering Switched from Postgres to MySQL - Uber Engineering Blog のまとめ Posgresqlだと pgは追記型なので少しの更新でも多くのdiskへのwriteがおきる カラムを一つ更新しただけで多くのindexの書き換えが起こる よって、replicationはWALを送るので更新が多いとWALが大量に送られる repcliationでは物理的なdiskの変更を送る DC間でレプリするときつい bugがあってreplica間でMVCCの不整合が起きる masterとreplica同じdisk上のデータ構成を共有するのでupgradeがつらい cache readはsyscallとosのpage cache経由なので重い 1コネクション1プロセス

    UberのPostgresqlからNoSQL on MySQLへの移行を読んでざっくりまとめた
  • MySQL5.1にMeCabのfull-text parser pluginを入れてみた - Lism.in * blog - nekoya (id:studio-m)

    MySQL5.0で全文検索というと、Tritonn入れたりしてSennaを使うのが常套手段。そういうところはプラグインで解決するのが5.1のやり方らしい。 http://www.slideshare.net/hiroaki.kawai/mysqlftppc http://sourceforge.net/apps/mediawiki/mysqlftppc/index.php?title=Main_Page というわけで、MySQL5.1でfull-text indexを作成出来るようになる、mysqlftppcことMySQL full-text parser plugin collectionを入れてみました。環境はCentOS5.4(x86_64)。 MySQL体は公式のRPMを使用。 http://dev.mysql.com/downloads/mysql/5.1.html#linux

    MySQL5.1にMeCabのfull-text parser pluginを入れてみた - Lism.in * blog - nekoya (id:studio-m)
  • よく使うmysqldumpのオプションと使用例 - Qiita

    mysqldumpのオプションはすぐ忘れてしまうので、よく使うものをここに書いておきます。 大抵の場合ここに書いたものだけで十分事足りると思います。 よく使うmysqldumpコマンドの例 細かい解説は後回しにして、まずは使用例をどうぞ。 InnoDBテーブルしかないDBを1つダンプする場合 mysqldump --quote-names --skip-lock-tables --single-transaction --flush-logs --master-data=2 <database> > dump.sql

    よく使うmysqldumpのオプションと使用例 - Qiita
    n314
    n314 2016/01/05