そういえば先日はハロウィンだったね。んで、今日スタバに行ってみたら早くもクリスマス仕様。残念ながら年末の予定は無え。 そんなこんなでオンラインスキーマチェンジを本番のオペレーションで使い始めたのでそのメモ。 0. online-schema-change オンラインスキーマチェンジは、percona社が出しているpercona-toolkitに梱包されている。その他有用なツールも入っているのでお世話になっている人も多いだろう。で、オンラインスキーマチェンジはその名のとおり、スキーマの変更、alter文をブロックなしで実行してくれるという代物。 私事なんだけど、今までは「ちょっと更新をブロックしちゃうけどアクセスの少ない時間帯にオンラインでalterを流す」みたいな運用をしてた。実行内容にもよるけどalter tableは意外と早いので、「更新をブロックされる時間がSLA的に許可できるならO
(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のほうがオプティマイザ
Oracle傘下になりオープンソース界から非難を浴びる行為が多くなっているMySQLだが、今度はMySQLのmanページのライセンスがプロプライエタリなものに変更されていたことが発覚した(本家/.)。 MySQLからフォークした「MariaDB」の開発団体であるMariaDB Foundationのブログによると、この変更はMySQL 5.5.30と5.5.31の間で行われたもので、man/ディレクトリ以下の全ソースコードに影響するという。 従来これらのドキュメントはGPL 2でリリースされていたのだが、5.5.31以降ではそれまでGPLであることが明示されていたCOPYRIGHTの項に「知的所有権関連法に基づいて利用と公開が制限されるライセンス合意の元でリリースされる」、「ライセンスで合意して許可された場合を除き、利用やコピー、派生物の作成、翻訳、放送、修正、ライセンス許諾、伝送、配布、
TheSchwartz のような RDBMS をつかった job queue は、新規に daemon をたてたりする必要がないので楽でいいのですが、一方で job の追加の timing が storage から push でおくられてこないので、若干の delay が生じてしまうのが難点でした。 この問題を解決するために、mysql の binlog API を用いて、処理してみるハックを考えてみました。 binlog API を利用すると更新クエリを streaming で処理できるので、こういったハックも簡単にできちゃいます。おもしろい。 use 5.016000; use MySQL::BinLog; use TheSchwartz; my $sch = TheSchwartz->new(...) or die; $sch->can_do($_) for ...; $sch->w
MySQL製品 MySQL は世界でもっとも多く使用されているオープンソース・データベースです。MySQL は、大規模な Web サイト、ISV、OEM、VAR のお客様、大企業など様々な環境において、ハイパフォーマンスでスケーラブルなデータベース・アプリケーションの、コスト効率のよい構築をお手伝いします。 MySQL Database Serviceは、MySQL Enterprise Editionで構築されたフルマネージド・データベースサービスです。 MySQL Database Serviceの詳細はこちら 商用版の MySQL は、ビジネスおよび技術要件に合わせて、複数の MySQL Edition でご利用いただけます。 MySQL Standard Edition MySQL Enterprise Edition MySQL Cluster Carrier Grade Edi
ロック読み取り (SELECT ... FOR UPDATE および SELECT ... LOCK IN SHARE MODE)
MySQLはとても気ぃつかい屋さんである。我々が投げる多少あいまいな指示も頑張って解釈し、なんとか文句を言わずに実行してみようと挑戦してみてくれる。 今日はそんなMySQLがケナゲに解釈してくれる自動変換について紹介しようと思う。この自動変換、ケナゲなMySQLの奥ゆかしさ故、出した指示と異なる動作をされたことに気がつかないことがある。ここで紹介する6つの自動変換をしっかり脳ミソにたたき込んでおけば、無用なトラブルにハマる時間も減るかもしれない。 1.[数値] 範囲外の数値は頭を押さえつけられる intやsmallint、bigintなどの数値型には、扱える範囲が決まっている。例えばint型なら最大21億ちょっとだ(unsignedの場合は43億弱)。これより大きい数字を登録するよう指示を出すとMySQLはどうするか。そう、頑張って入れられるところまで入れてくれるのである。「入れられるとこ
このセクションでは、MyISAM テーブルへの myisamchk の使用方法について説明します。(拡張子: .MYI、.MYD) MyISAM テーブルのチェックと修復には、CHECK TABLE や REPAIR TABLE などのステートメントを使用します (推奨)。詳細は、項12.5.2.3. 「CHECK TABLE 構文」 を参照してください。 テーブル破損の症状としては、クエリが予期せず中断したり、次のようなエラーが発生します。 tbl_name.frm is locked against change Can't find file tbl_name.MYI (Errcode: nnn) Unexpected end of file Record file is crashed Got error nnn from table handler perror nnn を実行す
MySQLの文字化けを直したい! 発端はSequelを使ってMySQLのデータを操作するRubyスクリプトを書いていたときでした。 UTF-8で保存したはずの文字列が、妙に文字化けしています。 mysqlコマンドでエンコーディングの確認をしてみると、 $ mysql -h host -u user -p database ...(略)... Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> \s -------------- mysql Ver 14.14 Distrib 5.1.30, for portbld-freebsd7.1 (i386) using 5.2 ...(略)... Server characterset: ujis Db characterset: utf8 Client char
.frm、.MYI、および .MYD ファイルを MyISAM テーブルに同じフローティング ポイント フォーマットをサポートしている異なるアーキテクチャ間でコピーでします。(MySQL はバイト スワッピング問題を処理します。.)項13.4. 「MyISAM ストレージエンジン」 参照。 データベースを異なるアーキテクチャ間で移動する場合、mysqldump を使用して SQL ステートメントを含むファイルを作成します。次にそのファイルを別のマシンに転送して mysql クライアントの入力として扱います。 利用できるオプションを表示するには mysqldump --help を使用します。データを新しいバージョンの MySQL に移動するには mysqldump --opt を使用して最適化を活用することによってさらに小さくて迅速に処理が可能なダンプ ファイルを作成します。 データベース
MySQL テーブルはファイルとして保存されるため、バックアップが簡単です。一貫したバックアップを行うには、そのテーブルに対して LOCK TABLES を実行してから、FLUSH TABLES を実行します。 See 項6.7.5. 「LOCK TABLES および UNLOCK TABLES 構文」。 See 項4.6.4. 「FLUSH 構文」。 読み取りロックだけが必要なので、データベースディレクトリのファイルをコピーしている間も、他のスレッドはテーブルに対してクエリを続行できます。FLUSH TABLE は、バックアップを開始する前に、キャッシュされているページをすべてディスクに書き込むために必要です。 3.23.56 から 4.0.12 では、セキュリティ上のリスクがあるため、BACKUP TABLE で既存ファイルの上書きはできないようになっています。 テーブルを SQL レ
SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント
以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ
MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN NATURAL LANGUAGE MODE | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION | IN BOOLEAN MODE | WITH QUERY EXPANSION } MySQL では、次のような全文インデックス設定および検索がサポートされています。 MySQL の全文インデックスは、型 FULLTEXT のインデックスです。 全文インデックスは、InnoDB または MyISAM テーブルでのみ使用でき、CHAR、VARCHAR、または TEXT カラムにのみ作成できます。 MySQL には、中国語、日本語および韓国語 (CJK) をサポートする組込みの全文 ngram パーサー
概要 これは MySQL リファレンスマニュアルです。 MySQL 8.0 から 8.0.25、および NDB のバージョン 8.0 から 8.0.25-ndb-8.0.25 に基づく NDB Cluster リリースについてそれぞれ説明します。 まだリリースされていない MySQL バージョンの機能のドキュメントが含まれている場合があります。 リリースされたバージョンの詳細は、「MySQL 8.0 リリースノート」を参照してください。 MySQL 8.0 の機能. このマニュアルでは、MySQL 8.0 のエディションによっては含まれていない機能について説明します。このような機能は、ご自身にライセンス付与されている MySQL 8.0 のエディションに含まれていない場合があります。 MySQL 8.0 の使用しているエディションに含まれる機能に関する質問がある場合は、MySQL 8.0
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く