なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

MySQL

SELECT文をタイムアウト強制終了させる「MAX_EXECUTION_TIME」使ってる?

この記事はMySQL Casual Advent Calendar 2017 - Qiitaの9日目のエントリとなります。 実行が長引いたSELECT文を強制終了させるヤーツ MySQL5.6まで、正常に処理が進んでいて遅いSELECTをタイムアウトさせるシステム変数はありませんでした。 正常に処理が進…

MySQLの「Communications link failure...」の解決方法を調べていて、よく見つけるヤツ

この記事はMySQL Casual Advent Calendar 2017 - Qiitaの5日目のエントリとなります。 みんなだいすきお困りの、アレです。 Oracleだと「ORA-03113:通信チャネルでファイルの終わりが検出されました。」っていう、酷い日本語*1で有名なヤツがあるけど、MySQL…

MySQL 8.0をカジュアルに立ちあげる

この記事はMySQL Casual Advent Calendar 2017 - Qiitaの2日目のエントリとなります。 きっかけ、前提 MySQL8.0、まだRCの状態だけど、色々な機能追加の話題が盛り上がっている中でのAdvent Calendarでもあるので、MySQL 8.0新機能検証なネタを投下してくれ…

MySQLのGLOBAL_STATUSとGLOBAL_VARIABLES

今更MySQL5.7を扱うにあたって MySQL5.6とMySQL5.7のパラメータ差分をあらためて見直してたら、「show_compatibility_56」という、プロダクトのアーキ移行期間にありがちな「いかにも」な名前のパラメータがありまして。 これは何? 「SHOW [GLOBAL] STATUS…

MySQLの「CREATE TABLE .. SELECT/LIKE」の挙動の違い

テーブルの複製のとき、お世話になります。 ちょっとしたバックアップ目的や、検証作業用にテーブルを複製するシーンはよくあります。 MySQLでは、テーブルの複製のためのコマンドが大きく2種類あるので、その違いを確かめた結果のお話です。 CREATE TABLE …

MySQLのサーバーステータス変数の監視の話

mysqlクライアントから定期実行してたし、計算は別途やってた。 SHOW [GLOBAL ]STATUSで取れるのは、「サーバー起動からの累積値」または「コマンド発行時の瞬間値」という仕様のため、前者について推移を知りたいときは、 ・定間隔でコマンド発行してファイ…

MySQLでmetadata lockにハマりやすいパターン

しばらくブログエントリあげてませんでしたが、引き続きMySQL関係のお仕事していたので、復活弾もやっぱりMySQLネタです。 そもそも 「metadata lockって何よ?」 とか 「Waiting for Table metadata lockでハマったらどうしたら良いの?」 って話は、過去に…

MySQLのセッションタイムアウトの制御

timeout系パラメータはいくつかあるけれど 新規接続時のタイムアウト(connect_timeout)ではなく、一度確立した接続がタイムアウトで切断される現象に影響するタイムアウト設定のお話。 ERROR 2013 (HY000): Lost connection to MySQL server during query…

MySQLの文字列型の扱い

先日、この記事が公開されていたので gihyo.jp アレ?って思ってドキュメント見直して、手元の環境でも実行してみました。 確かに「その通り」だったのだけど、ドキュメントに書いてあるとおりのこと、かつ、「その一部」の話だなーとおもったので、もうちょ…

MySQLでキャラクタセットを変更する

キャラクタセットはカラムレベルで持っている Oracleの場合はデータベースレベルで持っているキャラクタセット定義ですが、MySQLの場合、キャラクタセットはカラムレベルで持っています。ですので、同じデータベース、テーブルの中で、カラムによって別々の…

MySQLで幸せになれるヤツの続き-列名の行は都度いらなくない?

atsuizo.hatenadiary.jp で挙げたワンライナーを見て、タイトルのような疑問を持った人もいるかと思いますので、そのへんの補足です。 お好みでどうぞ 「-N」オプションを付与すると、SQL実行毎に表示される列名の行を除外して出力させることができます。 な…

MySQLで幸せになれるヤツの続き-パスワードを隠蔽する方法

パスワードをゴニョゴニョする前に atsuizo.hatenadiary.jpで パスワードを生テキストで書くなって人はゴニョゴニョしてください。 って書いた話の件ですが、なんでこんな話になるの、ってところをまず押さえましょう。 mysqlクライアントでのログイン方法あ…

MySQLに対して定期的に実行して結果を保存しておくと幸せになれるアレ

ワンライナー mysql -u ユーザ -pパスワード -h 接続先 -e "SQL文" | sed -e 's/\t/\" \"/g' | sed -e 's/^/\"/g' | sed -e 's/$/\"/g' | sed -e "s/^/$(date '+%Y%m%d %H:%M:%S') /g" >> ファイル パスワードを生テキストで書くなって人はゴニョゴニョして…

お兄さんとの約束は守ろう!(MySQLのtx_isolationとbinlogの話)

MySQL Casual Advent Calendar 2016 - Qiita 21日目の記事です。 穴があったら埋めたいタイプの人です。5回目。。。 なお、大トリの25日が空いているみたいですが、3年連続であの方でしょうか?(・_|襖| ある日、MySQLおじさんお兄さんに、、、 って言われた…

MySQLのChar型のデータサイズについて小ネタ

MySQL Casual Advent Calendar 2016 - Qiita の 18日目です。がんばった。もう小ネタしか出てこない。 MySQLのchar型宣言時の数字は「データサイズ」ではなくて、「文字数」 っていうのは、ワリと有名。 Oracleからやってくると戸惑うところではあるけど、ワ…

JOIN ON で絞り込み条件を入れるのと、JOIN ONの後WHERE句で絞り込み条件を入れるのとでは、結果が違う件

MySQL Casual Advent Calendar 2016 - Qiita 12日目の記事です。 まさかの3回目。もうムリ。。。 JOIN ON句で結合条件ではなく絞込条件を書くことができることを、知らなかったのです。 具体的な名称がわからない&検索にもヒットしにくいので、勝手に名前を…

MySQLのトランザクション制御がキモい話

MySQL Casual Advent Calendar 2016 - Qiitaの5日目の記事です。AdventCalendar自体初参加でドキドキ。 トランザクションの開始は、BEGINしたときじゃない! MySQLでは、BEGIN(START TRANSACTION。長いので、以下、特筆すべき場合以外は「BEGIN」で)を宣言…

MySQLで複合列PKなテーブルに対するWHERE条件でINを使うと、実行計画が変わる?

何言っているかわかんねえよ。 と思うので、事例で語る。なお、この事象が出たのは、MySQL5.6.23です。 実験1:PK列が1つのケース 準備 こんな感じでテーブルとデータを用意します。 mysql > create table test_in_exp_tbl( -> col1 int(11) not null, -> co…

MySQLで接続(use)しているDB(スキーマ)が、他セッションからDROPされたときって、どうなるんだっけ?

タイトルの通りなんですが USE文って、所詮デフォルトデータベースの宣言(データベース名無宣言でオブジェクト名を扱うときに、どこを指しているとみなすか)にすぎないと思っていて、「じゃあ、その状態で指している先がDROP DATABASEされたらどうなるんよ…

詳解MySQL5.7出版記念イベント参加してきた

久しぶりのイベント参加 この手のイベント参加、久々だなー。 この手のイベント参加レポ書くの、久々だなー。 イベント、勉強会の類は、勉強会ブームを経て、毎日色々な所で開催されるようになっているわけだけど、自分も参加してなかったし、観測範囲で見て…

MySQL5.6以前でmetadata lock発生の犯人を後追いする

大事な機構「metadata lock」 MySQL5.5.3から導入された「metadata lock」。 その目的は、 「トランザクション実行中に触ったテーブルについて、DDLによるテーブル構成情報の変更から守る」 ということ。 そうしないと、ロールバックしようとしたら「テーブ…

RDS MySQLで、パラメータグループ指定したCollationでデータベースが作られないバグを踏んだ件

公式ドキュメント通りに操作しても、その通りに作られません MySQLのCollationはどのように決まるか。そして、3つの落とし穴。 - なからなLifeの「3:Amazon RDSのデフォルトデータベースは、さらにルールを破る」のところで書いたとおりなんですが、大事な…

MySQL WorkbenchでData Exportするとエラーになるのが直ってた

MySQL Workbench、便利だよね MySQL Workbench、色々な作業をGUIで操作できるので、MySQLベースで開発している人はかなりの確率で利用しているんじゃないかと思います。 標準的なSQLなら覚えている人でも、Export/Importユーティリティ系のコマンドまでは覚…

MySQLで、SQLレベルでCollationを指定する

Collation、色々な所で指定できる Oracle脳には馴染みの薄い、MySQLの「Collation」にまつわる挙動の話 - なからなLife MySQLのCollationはどのように決まるか。そして、3つの落とし穴。 - なからなLife と、立て続けにMySQLのCollationの話をしています。 …

MySQLのCollationはどのように決まるか。そして、3つの落とし穴。

今回は、設定値(パラメータ)の話 Oracle脳には馴染みの薄い、MySQLの「Collation」にまつわる挙動の話atsuizo.hatenadiary.jp の続きです。 前回は、Collation設定についてMySQLのデフォルトで使用される「_general_ci」だと「大文字小文字を区別せず」と…

Oracle脳には馴染みの薄い、MySQLの「Collation」にまつわる挙動の話

Collationとは 直訳すると「照合」。 MySQL的には、「照合順序」と訳されます。 ただでさえ面倒くさい文字コードの問題ですが、データを保存する際の文字コードとは別に、データを照合するときの方法を指定することができます。 照合って何かっていうと、=…

ORDER BYで、単純な昇順降順「以外」で並べる!

いやー、知らないって怖いね。 なんだこのキモいSQLは、って思ってしまったけど、調べているウチに、これちゃんとSQL構文に則ってる!こちらが間違ってた!って事がわかっていきました。 あえて、知らなかった所から勢いで書いていたのを、そのままにしてみ…

RDSのフェイルオーバーとJDBCコネクションプーリングでハマった件

フェイルオーバー発生させたら、15分固まった。 Amazon RDS MySQL 5.6.23+Tomcat+JavaServlet+Connector/Jでコネクションプールを利用した環境で、RDSのフェイルオーバー試験をするべくManagement Consoleから「Reboot with Failover」を発生させたら、フ…

MySQLでPerformance_Schemaから過去に実行したSQLを把握する

MySQLに、OracleのSTATSPACK的なもの、ないの?というアレ。 Oracle文化が根強いSIerと一緒にMySQL案件に関わると質問される5つのこと - なからなLifeで触れた、アレのお話です。 「STATSPACK」に例えられる要件にもレベルがあって、私が質問を受ける文脈と…

MySQLでのNull、空文字、関連する関数など

先人はいるけれど、調べてみた。 比較演算子については、こちらにまとまってますね。 d.hatena.ne.jp 公式ドキュメントでは いきなり、ちょっとキツ目の表現でスタートします。 NULL 値の概念については、NULL が空の文字列 '' と同じであると考えがちな SQL…