追記:記事の文中で5.6のsql_modeデフォルト値について若干実際の挙動と異なる表記をしていました。rpmでinstallすると/usr/my.cnfというのがひょっこりいて、この中に [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES という記述があり、これを/etc/my.cnfと合わせて設定している様です。で、デフォルト値については5.6.6以降はデフォルト値が「The default SQL mode in MySQL 5.6.6 and later is NO_ENGINE_SUBSTITUTION;」でそれ以前のデフォルト値は「MySQL 5.6.5 and earlier, it was empty (no modes set)」となっているようですね。 詳しくは http://yoku0825.blo
ポイント&クリックだけでDB からREST API を作成できるCData API Server で、MySQL のデータからREST API を作ります。 CData API Server をインストール http://www.cdata.com/jp/apiserver/ 今回は、Windows 版で説明しています。 インストーラに従って、インストールを行ってください。 Windows 版もしくはJava/Linux 版を選択します。 インストール完了後にブラウザでAPI Server の管理コンソール画面が立ち上がります。インストール時に設定したadmin パスワードを入力してログインします。 管理コンソールで「情報」タブをクリックし、「30日の評価版をアクティベートする」をクリックします。 これで30日間の使用ライセンスが製品に設定されます。 MySQL とAPI Server の
MySQL ユーザのホストをワイルドカードで指定してもlocalhostは含まれない 2012-02-04 MySQLをインストールしたので、とりあえずワイルドカードでホスト名を指定してテスト用のユーザを作成。 mysql> show databases; +-------+ | Database | +-------+ | information_schema | | hoge | | mysql | | performance_schema | | test | +-------+ 5 rows in set (0.00 sec) mysql> grant select on hoge.* to testuser@'%' identified by 'password'; Query OK, 0 rows affected (0.07 sec) mysql> select host,u
今日は仕事納めだったので、一年の締めくくりとしてMySQLにおけるソートの話でもしようと思う。 インデックスを利用しないクエリで最もよく見かけるもののひとつは、ORDER BYを用いたソート処理だろう。もし、ソート処理においてインデックスを用いることが出来れば、MySQLは結果を抽出してから結果行をソートするのではなく、インデックス順に行を取り出せば良いので高速にソート処理することが可能になる。特に、LIMIT句やWHERE句を用いて行の絞り込みを行う場合は効果が絶大である。しかし、ひとたびインデックスを利用できない状況に直面すると、たちまちテーブルスキャンが発生して性能が劣化してしまう。 例えば、100万行のレコードを格納したt1というテーブルがあるとする。そのテーブルに対して以下のようなクエリを実行した場合を考えよう。 mysql> SELECT col1, col2 ... colx
MySQL 5.1のmysqldumpslowを使うとチューニングが楽になる!という話題です。 mysqldumpslowはもともとMySQLに付属しているツールで、スロークエリログを集計してくれるものです。これ自体はMySQL 5.1で特に変わったところはありませんが、スロークエリログ本体の方が機能強化されているため、組み合わせるとなかなか便利になっています。MySQL 5.1におけるスロークエリログの主な機能強化は以下の三点です。 long_query_timeに1秒未満の値を設定できるようになった。 出力先を設定できるようになった。 これらの設定をオンラインで変更できるようになった。 これでどうなるかというと、MySQLの性能分析をしたいと思ったときに、サーバを止めずにその場で mysql> set global slow_query_log = 1; mysql> set glob
MySQL Performance Blogの翻訳。インストール後に必ず設定を確認しなければならない設定パラメータ10つを挙げ、その意味を解説する。MySQLの設定変更時の、一般的な注意点も合わせて。 January 28, 2014 By Stephane Combaudon 我々がパフォーマンス監査の仕事をする時には、MySQLの設定のレビューと改善提案を求められる。大抵の場合、たくさんのオプションがある中でほんのいくつかの設定しか変更するように提案しないことに、多くの顧客は驚く。この記事のゴールは、もっとも重要な設定をいくつか挙げてみることにある。 既にこういった提案は過去にもしているが数年前のもので、それ以来MySQLの世界ではたくさんの変化があったのだ。 話の前に 熟練した人でも、重大なトラブルを引き起こすミスをしでかすことがある。従って、ここに挙げたものを盲目的に適用する前に、
Dockerでデーモンを動かそうとするとinitctlがうまく動かないので、service start mysqlとか出来ないんです。だから直接mysqld_safeを起動するのですが、baseイメージからDockerfileでインストールすと、簡単にインストールできない。というのも、apt-get install mysql-serverしたときにいろいろオプションを対話的に入力しろといわれるので、Dockerfileで素直には出来ないんです。 いろいろ調べてみると、そういったパラメタをあらかじめ設定してインストールする方法があって、debconf-set-selectionsというコマンドがそれに相当するみたいです。もっと簡単にできる方法を id:nkwhr さんに教えてもらいました。DEBIAN_FRONTEND=noninteractiveと環境変数に設定すればいいみたいです。下記
How do I write a script to install MySQL server on Ubuntu? sudo apt-get install mysql will install, but it will also ask for a password to be entered in the console. How do I do this in a non-interactive way? That is, write a script that can provide the password? #!/bin/bash sudo apt-get install mysql # To install MySQL server # How to write script for assigning password to MySQL root user # End
概要MySQLで文字列を検索対象にした場合、一般的なデフォルト設定では大文字・小文字を区別しない。この問題にしっかりハマってしまったので、調査と対策を行ったメモを晒すことにした。 基本的なことがらなのにものすごく長いので「ダイジェスト」を読んでいただければおおむねOKにしてある。検証過程に興味のある方はその続きをどうぞ。 ダイジェストMySQLはデフォルトで運用すると文字列の比較 / 並び替えで大文字 / 小文字を区別しない。 大文字小文字を区別して検索するには… テーブル単位カラム単位クエリ単位…での対応が可能。 データ定義テーブル単位 -- CREATE TABLE時にテーブルのデフォルト文字コードと照合順序を指定する CREATE TABLE hoge1 ( id INTEGER PRIMARY KEY AUTO_INCREMENT, str VARCHAR(16) ) ENGINE
よくMySQLはサブクエリが弱いと言われるが、これは本当だろうか?半分は本当で半分は嘘である。MySQLのサブクエリだってなんでもかんでも遅いわけではない。落とし穴をしっかり避け、使いどころを間違えなければサブクエリも高速に実行できるのである。今日はMySQLがどんな風にサブクエリを実行し、どのような場合に遅いのかということについて説明しよう。 EXPLAINで実行計画を調べた際に、select_typeにはクエリの種類が表示されるのだが、代表的なサブクエリには次の3つのパターンがある。 SUBQUERY DEPENDENT SUBQUERY DERIVED 結論から言おう。遅いのは2番目、DEPENDENT SUBQUERYである。DEPENDENT SUBQUERYとはいわゆる相関サブクエリに相当するもので、サブクエリにおいて外部クエリのカラムを参照しているサブクエリのことである。そし
BigData-JAWS 勉強会#11 発表資料 https://jawsug-bigdata.connpass.com/event/77463/ ■概要 AWS re:Invent2017でSnowflake Computingがプラチナスポンサーをしていましたが、その会社が提供しているクラウドネイティブDWHであるSnowflakeを紹介します。GartnerやForresterの2017年のレポートで何度もみたので実際に検証してみました。 ■コンテンツ ・Snowflakeがどのようなサービスか ・設計/管理/運用を行う上で必要となるアーキテクチャ ・ベンダがUnlimited Concurrencyと謳っているクエリの同時実行性能を確保するための仕組みや DataSharingというユニークなデータ共有機能 ・実際に使っていく中で見えてきた製品の設計思想 ・Snowflake/Re
(2014.12.3追記:このblogの内容は、以下の書籍にも反映させた。) SQLレベルの差異 MariaDB5.5とMySQL5.5ではSQLレベルでの違いはほとんどなかった。autoincrementの最大値の扱いくらい。 ただし、MariaDB10.0でREGEXPがマルチバイト対応になったので、アプリ側は注意。 項目 MySQL MariaDB Autoincrement 最大値に達すると、以降は最大値を繰り返す。Warningのみ。エラーにならない。tinyintなら…,125,126,127,127,127… 最大値-1まで。以降はエラーを返す。tinyintなら…,125,126,ERROR,ERROR,… EXPLAIN文 JSON形式 バージョン5.6から 未対応 Optimizer Trace バージョン5.6から 未対応(ただし、MariaDBのほうがオプティマイザ
SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント
opscodeのリポジトリにあるMySQLのcookbookでは、rootユーザやレプリケーション用のユーザのパスワードをランダムに生成して設定している。 opscode の recipe の特徴 このランダムという点をカバーするべく、うまい仕組みが組み込まれている。 パスワードを設定するところは node.set_unless['mysql']['server_root_password'] = secure_password といった形で、attributeに設定されていない場合はランダムに生成するという事をして、2度目以降も同じパスワードとなるようになっている。 2回目以降も同じパスワードを保証するために、もうひとつの技が unless Chef::Config[:solo] ruby_block "save node data" do block do node.save end
はじめに Djangoを使ったアプリケーションで、2つのバッチ処理用プロセスA、Bを同時に立ち上げたときに、Aのトランザクションでsave & commitした値をBでは読み取れないという問題に直面しました。 問題の箇所のソースコードはこのような感じです。 実行順 プロセスA プロセスB 1 with commit_on_success(): p = Post(id=1) p.save() 2 # saveしたデータが見える Post.objects.get(id=1) 3 with commit_on_success(): p = Post(id=2) p.save() 4 # saveしたデータが見えず例外発生 Post.objects.get(id=2) Djangoではデフォルトで自動コミットが有効なので、Aでコミットした値をBで読み取れるはずと思っていたのですが、これは間違いでし
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く