mysql

ridgepole で MySQL の TEXT 型を後から Not Null にするとエラーになる #Rails #MySQL #ridgepole

概要 Rails で DB の構成管理に ridgepole を使っているんだけれど、 MySQL の TEXT 型に後から Not Null 制約を付けるとエラーになってしまう。 github.com 原因 例えば下記の用に定義していたとする。 # 最初は null: true で作成 t.text "my_text", null:…

GitHub Actions 上で MySQL のシステム変数をカスタマイズする #GitHub #Actions #MySQL

概要 GitHub Actions の Workflow では、 Services として MySQL が利用できる。 character_set_server などのシステム変数を変更する方法についてまとめる。 採用した方法: SQL ファイルでグローバル変数を書き換える Workflow で使う MySQL は基本使い捨て…

DataGrip で sql_mode に STRICT_TRANS_TABLES が適用される #mysql

概要 DataGrip で MySQL に接続すると、 sql_mode を別途設定しているにも関わらず、STRICT_TRANS_TABLES が勝手に適用されていた。 グローバルの設定を確認すると、意図したものが設定されているが、セッションの設定は STRICT_TRANS_TABLES になってしまう…

MySQL コンテナの起動を待つ #mysql #docker

概要 Docker で MySQL コンテナの起動を待つ方法まとめ nc で待つ nc コマンドで待つ。 CircleCI の Example にあった。 for i in `seq 1 10`; do nc -z 127.0.0.1 3306 && echo Success && exit 0 echo -n . sleep 1 done echo Failed waiting for MySQL &&…

MySQL で日付の疑似表を作る #mysql

概要 MySQL で日付の疑似表を作るクエリ。 集計分析等で、データがない日付も一覧としては出したいようなケースでの利用を想定。 TL;DR 色々試してみたけど、以下に落ち着いた。 SELECT @seq := 0 AS seq , DATE('2020-01-01') AS ymd FROM dual UNION ALL S…

mysqlコマンドのエラー出力をログに吐く #mysql

mysqlコマンドは問題発生時はエラー出力にメッセージを吐くので、標準エラーをファイルにリダイレクトしてやればよい。 mysql -u root sample_db < test.sql >> result.log 2>> error.log この場合だと、test.sqlを実行した結果、result.logに標準出力が、er…

MySQLのConnector/J (JDBC)のconnectTimeoutとsocketTimeout #MySQL

MySQLのConnector/J (JDBC)にはconnectTimeoutとsocketTimeoutのパラメータがあり、JDBCの接続文字列に追加することで設定できる。 MySQL :: MySQL Connector/J 5.1 Developer Guide :: 5.1 Driver/Datasource Class Names, URL Syntax and Configuration Pr…

mysqlのdockerイメージを使ってみた #MySQL #docker

概要 DockerHubにあるMySQLの公式イメージを使ってみた。 ※Docker for Mac使用 https://hub.docker.com/_/mysql/ イメージを持ってくる 5.6のイメージを使ってみることにする。 $ docker pull mysql:5.6 ダウンロードを確認 $ docker images 起動する とりあ…

すでに存在するデータベースにFlywayを適用する(その2) #flyway

概要 下記記事の続き。 今度はbaselineの設定を活用して、SQLとFlywayの足並みを調整する。 su-kun1899.hatenablog.com テスト用のデータベースを作る create database if not exists flyway_sample character set utf8 flyway管理外のテーブルを追加する my…

すでに存在するデータベースにFlywayを適用する #flyway

概要 Baselineを使って、MySQL+Mavenで、FlywayによるDB構成管理を既に存在するデータベースに適用する。 Flyway by Boxfuse • Database Migrations Made Easy. テスト用のデータベースを作る create database if not exists flyway_sample character set ut…

mysqldumpでROW_FORMATが出力されなくなった #mysql

現象 MySQLを5.5から5.6にしたら、mysqldumpした際のDDL( CREATE TABLE とか)に、ROW_FORMATが出力されなくなった。 importでこけたので調査してみたらCompactで作成されており、追いかけてみるとdumpした時点のDDLにROW_FORMATの出力がなかった。 エラーメ…

MySQL、localhostだとポート指定オプション効かないってマジですか。。

検証用のMySQLデータベースをせっかくなのでDockerコンテナで作ったら、接続できないという事態。 docker run -d -p 13306:3306 --name mysql-for-local mysql-for-local こんな感じでコンテナを起動して mysql -u root -D my_db -h localhost -P 13306 -A …

オプティマイザが吐き出したクエリを確認する #mysql

概要 オプティマイザが実際に組み立てたクエリを確認する方法です。 実行結果や取得結果が期待通りにならない時など、ヒントが隠されているかもしれません。 手順 EXPLAINの後ろにEXTENDEDを追加するとWARNINGとして、オプティマイザが吐き出したクエリが出…

mysqlのパスワード忘れた #mysql

ローカルのmysqlつなごうとしたら、rootのパスワード設定したのにパスワードを忘れた。 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.11 Homebrew mysqlを停止 mysql.server stop safeモー…

MySQL5.7にしたら今まで動いていたSQLがエラーになった #mysql

原因 デフォルトのSQLモードが違うための模様 http://qiita.com/nagi244/items/04747f8e4ec351b22311 Expression #n of SELECT list is not in GROUP BY clause and contains nonaggregated column 'dbname.b.name' which is not functionally dependent on …

MySQLでカラムの値から一部を取り出す

こんなテーブルと値があるとする。 id(number) profile(varchar) 1 sex:male, name:yamada, age:30 2 sex:female, name:sato, age:20 ここから、nameの値だけを取り出すことを目的にする。 name yamada sato SQL select LEFT( SUBSTRING( profile, LOCATE('n…

MySQLではIN句とサブクエリの組み合わせはインデックスが効かない #mysql

概要 タイトルそのまま。 MySQLは仕様として * サブクエリを含むSQLは外側から先に実行される * IN句とサブクエリの組み合わせは内部的にEXISTSに変換する 対策 サブクエリの使用を避ける JOINに書き換える サブクエリを切り出してSQLを組み立てる(2回SQL…