MySQL 8 のデフォルト文字セット系をすべて utf8mb4 にする cnf の書き方メモ

スポンサードリンク


まとめ

[mysql]
default-character-set=utf8mb4

[mysqld]
character_set_server=utf8mb4
collation-server=utf8mb4_bin
  • [mysql] の default-character-set=utf8mb4 で変更される項目
    • character_set_client: latin1 -> utf8mb4
    • character_set_connection: latin1 -> utf8mb4
    • character_set_results: latin1 -> utf8mb4
  • [mysqld] の character_set_server=utf8mb4 で変更される項目
    • character_set_database: utf8mb4 -> utf8mb4
    • character_set_server: utf8mb4 -> utf8mb4
  • [mysqld] の collation-server=utf8mb4_bin で変更される項目
    • collation_database: utf8mb4_0900_ai_ci -> utf8mb4_bin

“MySQL 8 のデフォルト文字セット系をすべて utf8mb4 にする cnf の書き方メモ” の続きを読む

ローカル開発環境の古い MySQL、バージョン 5.5 を Docker で再現できるかやってみましたらできました♪

はじめに

  • 開発のために MySQL 5.5 を手元の Windows にインストールしなければならない。
  • はっきりいって嫌だ。
    • Windows 起動時に自動的に MySQL も起動してしまったり。
    • Windows のポートも使用されてしまったり。
  • Docker で再現できるのでは?
    • Nginx を Docker で使ったとき、http://localhost でウェブページにアクセスできた。
    • Nginx を Docker で使ったとき、docker run 時、-p 8080:80 などとすれば、http://localhost:8080 でアクセスできた。
    • つまり、ホスト (Docker をインストールしたマシン) からコンテナに対して、localhost と指定したポート番号でアクセスできるということ。
  • A5:SQL Mk-2 – フリーの汎用SQL開発ツール/ER図ツール .. 松原正和 からアクセスできるか、やってみる。

“ローカル開発環境の古い MySQL、バージョン 5.5 を Docker で再現できるかやってみましたらできました♪” の続きを読む

【Docker】volumes で永続化した場合、コンテナが消えようがイメージが消えようが、永続化したファイルは残る

永続化関連のまとめと遭遇したトラブル

  • コンテナを削除 (docker rm や docker-compose down など) しても、volumes のホスト側のファイルは残る。
  • MySQL の /docker-entrypoint-initdb.d/ に置いた SQL ファイルは、コンテナを作成 (1回目) してコンテナを削除して、コンテナを作成 (2回目) した場合、1 回目しか実行されない。
    • 1 回目で永続化されたファイルが出来上がり、これは削除されない。すると 2 回目では永続化された DB ファイルがあるため、実行されないのであろう。
    • したがって、開発中などの場合、永続化の設定をした状態で 2 回目のコンテナを作成する前に /docker-entrypoint-initdb.d/ の SQL を編集してもその内容はコンテナに反映されない。
    • 永続化したファイルを消せば、コンテナに反映される。

“【Docker】volumes で永続化した場合、コンテナが消えようがイメージが消えようが、永続化したファイルは残る” の続きを読む

【WordPress】BackWPup から別のサーバへ復元、リストアした記録

はじめに。

  • ドメインはそのままで、サーバを引っ越す。1つのVPSに Nginx も PHP も MariaDB も全部入っている。データベースが MySQL から MariaDB へ変更する以外、引越し元と引越し先でサーバ内容は全く同じ。
  • WordPress のファイル、DB はプラグイン BackWPup で作成したものを使用して復元する。
  • 引越し先のサーバは構築済みで、後は現在の引越し元の WordPress ファイルと DB を引越し先サーバへ持っていくだけ。
    • 構築時にサンプルの WordPress を作成している。
    • 構築時に引っ越し元と同じ内容で DB を作成している。

今回、上記のことを行った記録を取りたいと思います。

“【WordPress】BackWPup から別のサーバへ復元、リストアした記録” の続きを読む

【phpmig】【MySQL】マイグレーション時に文字化けする時の修正方法

ポイント

  • PDO をインスタンス化する際に、文字コードを指定する。
  • PHP バージョンによって指定方法が異なることに注意

環境

  • PHP 5.3.3 (cli) (built: Aug 11 2016 20:33:53)
  • mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

“【phpmig】【MySQL】マイグレーション時に文字化けする時の修正方法” の続きを読む

【PHP】phpmig で MySQL のマイグレーションをするまでの導入手順

ポイント

  • Pimple もインストールすること。さもないと、phpmig migrate 時に Fatal error: Class ‘Pimpli¥Container’ not found in … とエラーになった。
  • Pimple インストール方法については、phpmig の README には記載されていないので注意。

“【PHP】phpmig で MySQL のマイグレーションをするまでの導入手順” の続きを読む

【MySQL】全クエリをログ出力し、ログローテート設定を行う

環境

  • mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

設定を行うコマンド

  • /etc/my.cnf の [mysqld] に記述することで全クエリをログ出力する。
  • general_log でオンにし、general_log_file でログファイルパスを指定する。
  • ログローテートは、もともとある /etc/logrotate.d/mysqld をほぼそのまま使用した。

“【MySQL】全クエリをログ出力し、ログローテート設定を行う” の続きを読む

【MySQL】指定年月の初日から最終日までのリストを取得する SQL、その2

SQL

# @target に yyyymm を指定することで、その月の月初から月末までの日にちリストを返す。
SET @target = STR_TO_DATE('201601', '%Y%m');
SET @firdt_day = DATE_FORMAT(@target, '%Y-%m-01');
SET @last_day = DATE_FORMAT(LAST_DAY(@firdt_day),  '%Y-%m-%d');
SELECT DATE_FORMAT(day, '%Y-%m-%d')
FROM
(
    SELECT (@dt := @firdt_day) AS day FROM DUAL UNION ALL
    SELECT @dt := DATE_ADD(@dt, INTERVAL 1 DAY) FROM `information_schema`.COLUMNS WHERE @dt < @last_day
) AS tmp;

“【MySQL】指定年月の初日から最終日までのリストを取得する SQL、その2” の続きを読む

【MySQL】指定年月の初日から最終日までのリストを取得する SQL

SQL で存在するレコードが取得できます。存在しないレコードは穴埋めされません。

そうしますと、とある年月の一日から月末までレコードを取得したいのに、存在しないために歯抜けになってしまった、そんなケースに遭遇しました><。

歯抜けをなくして、存在しないレコードも埋めたいのです。

今回は、指定年月の一日から末日までのリストを返す MySQL をノートいたします。

2016年8月14日18時00分追記。シンプル・日付特化版を投稿いたしました♪

一日から末日までのリストを返す MySQL

SET @target = STR_TO_DATE('201601', '%Y%m');
SET @firdt_day = DATE_FORMAT(@target, '%Y-%m-01');
SELECT DATE_FORMAT(DATE_ADD(@firdt_day, INTERVAL tmp.generate_series DAY), '%Y-%m-%d') AS day
FROM
(
    SELECT 0 generate_series FROM DUAL WHERE (@num:=-1)*0 UNION ALL
    SELECT @num:=@num+1 FROM `information_schema`.COLUMNS
) AS tmp
HAVING DATE_FORMAT(day, '%Y%m') = DATE_FORMAT(@target, '%Y%m');

“【MySQL】指定年月の初日から最終日までのリストを取得する SQL” の続きを読む