茶トラ猫エンジニア

フリーランスとして働く、先が見えないエンジニアのメモ帳

MySQL

AmazonLinuxにMySQLクライアントをインストールする

AWS でデータベースを使う際、MySQL サーバを立てるよりも RDS(MySQL)を使う方が楽です。 ただし、データベースのメンテナンスには MySQL クライアントがあると便利なので、EC2 で実行できるようにしておきます。 RDS は MySQL5.7 ベースのエンジンで構築し…

AWSでパラメータグループを設定してからRDS(MySQL5.7)のインスタンス作成をする

RDS のインスタンスを作成する際、いきなりデータベースを構築すると後々パラメータグループを変更する手間が発生します。 それは、デフォルトのパラメータグループの文字コードが「utf8」や「utf8mb4」になってないからで、それらを使いたい場合は先にパラ…

MySQLで日付の差を求める方法

MySQL には日付関数が多く存在しますが、今回はプロテニス大会の開催日程データの中から、7 日以内に終了したデータを取得したかったので DATEDIFF() を使いました。 DATEDIFF(expr1, expr2) DATEDIFF() は、ある日付から別の日付までの日数の値として表現さ…

MySQLでテーブル名を変更する方法

MySQL で別名のテーブルを作成する際、これまでは以下の運用をするケースが多くありました。 CREATE文を書き換えて実行 「CREATE TABLE ... LIKE ...」で作成 ダンプしてテーブル名を変更してリストア 元のテーブルを残す場合や、移行先のテーブルの状態によ…

MySQLで「Row size too large」のエラーが出た時の対策

text 型のカラムが多いテーブルを更新しようとした際に、以下のエラーメッセージが表示されました。 Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row …

MySQLで1から100までのランダムな数値を登録する

テストデータを作成する際に、特定のカラムに対してランダムな数値を設定しておきたいケースがあります。 テストデータ自体をプログラムで作成する場合もあるかと思いますが、今回は MySQL でランダムな数値を一括アップデートする方法を紹介します。 プログ…

【MySQL】別テーブルのカラムの値でテーブルのカラムをUPDATEする

サイトを運用していると、仕様変更やメンテナンスの影響で、テーブルのデータ移行が発生するケースがあります。 簡単なものであれば SQL で更新したり、ダンプしたデータをシェルで加工してリストアする程度で済みますが、複雑なものになればバッチプログラ…

MySQLで作成済のテーブルからテーブル定義を取得する

似たような構成のテーブルを作る時に、今までは mysqldump コマンドで -d オプションを付けてテーブル定義だけを取得するコマンドを実行していました。 これでも十分に要件は満たせるのですが、MySQL のコンソールからサクっと出したい場合もあるので、SHOW …

MySQLで日付単位に分割したテーブルを作成するシェルスクリプト

一般ユーザ相手のサービスをする場合、ユーザ数がどこまで増えるか読みにくいので 1 つのテーブルに格納されるレコード数が気になるところです。 そこで、パーティショニングやシャーディングなどの手法が候補としてあがるわけですが、どちらも運用面でメリ…

MySQLのdatetime型のカラムから日付部分のみを取得する

MySQL の日付フォーマットを使いたい時によく忘れてそうな関数。 日付関数 日付フォーマット備忘録 日付関数 PHP でアプリ側を書いている時の date() 関数の引数とフォーマット指定の順番が違うので間違えがちです。 もちろん、データベースからそのまま dat…

Windows版MySQL5.5のmy.ini設定

久しぶりに Windows 環境に MySQL を入れて使っていたら、文字コードのところで問題発生。 今回は純粋に MySQL の設定の問題でした。 文字コードの設定が変わっている my.iniの設定例 MySQLとPHPでの文字化け(mysql_set_charset) 文字コードの設定が変わって…

MySQLのインデックスを最適化するコマンド

PostgreSQL の運用には散々悩まされた記憶がありますが、MySQL にも最適化の運用コマンドは用意されています。 しかし PostgreSQL ほど頻繁にメンテナンスする必要もなく、変更が多いテーブルでもそこまでシビアにならなくて良さそうです。 MySQLの最適化 My…

MySQLのコマンドからの標準出力で列名(カラム名)を表示させないオプション

シェルから MySQL を使う時によく遭遇しますが、SELECT した値を変数に代入する際に、無意識に列名まで取得してしまう場合があります。 そこで列名を除外(非表示)するオプションを思い出そうとするのですが、忘れてしまっていることが多いのですよね・・・。…

PHPとMySQLで画像をBLOB型で管理する

ショップや病院など、タウン情報やグルメ情報などの紹介サイトには写真が使われることが多いです。 写真の画像はフォームからアップロードしてファイルとして保管することが多いですが、データベースでバイナリを管理することもできます。 データベース管理…