AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

MySQL

MySQL のユーザー許可に CIDR は利用できる

donbulinux.hatenablog.jp GRANT からはじまるワンライナー時代で暗記したので毎回調べていたが、ネットマスク指定なんだよな〜、と昔から思っていた。 ら、現代では CIDR で指定できるようになっていた様子だった。 MySQL 8.0.23 では、IPv4 アドレスとして…

稼働中の MySQL データベースからデータベース定義書を作る

運用されている環境は存在するけど、改めて言われるとドキュメンテーションが全然されていない、みたいな環境へのお話。

Illegal mix of collations

collation が異なる同士で参照しようとしてオワ、というエラーらしい。 like 検索で死んでいた 観測した環境では (utf8_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,COERCIBLE) for operation 'like' ということでまあう〜ん、という感じだった。 雑に治…

SHOW INDEX と重複レコード検索

SHOW INDEX いつも内容を忘れる。 blog.mothule.com Duplicate entry これ発生すると id がズレてる (auto increment など挿入時の予期せぬアレ) みたいな感じなんだけど、根本的な対策はあるんすかねえ。 qiita.com qiita.com tech.mobilefactory.jp

現代において my.cnf に default-authentication-plugin は指定できない

事情があって古い環境を保守している人が MySQL 8.0 -> 8.4 などにアップグレードすると、mysql_native_password から caching_sha2_password に変更されているのでパスワード認証が通らない事がある。 ググると my,cnf に default-authentication-plugin=my…

AWS RDS の MySQL 5.7 とかで、延長サポートが切れたら (期限日を迎えたら) どうなるのか

強制的に次のメジャーバージョンに強制アップグレードされるらしい。 MySQL 5.7 -> 8.0 世代、という具合。 詳しくは参考先を見てもらったほうがいい。 注意点 アップグレード後、延長サポートのオプションがオンのままになるらしく、余計な課金が生まれるっ…

MySQL で特定データベースの定義一覧を取得する

ある特定の環境の間で diff チェックが必要になったので。 mysql> USE information_schema; mysql> SELECT table_name, column_name FROM columns WHERE table_schema="対象のデータベース名"; +--------------------+-------------------+ | TABLE_NAME | C…

MySQL 8.0 世代の数十 GB 単位のデータベースバックアップ方法を考えている

AWS RDS (MySQL) で本番運用している環境のうち、データベース全体でそろそろ 50GB を超えそうな環境があってそのバックアップ、というかテスト環境への転用などをどうしよう、と考えている。 デカめのデータベースの運用経験、 PostgreSQL 8.0.1x あたりま…

AmazonLinux2023 に MySQL (Community) をインストールするには RHEL9 向けを使えばいいらしい

dev.classmethod.jp とのことだったので、 RHEL9 向けの dnf(yum) リポジトリ設定を突っ込んでみたらたしかに普通に動いた。

UTF8MB3 の廃止される未来

speakerdeck.com 読んでて気付いたんだけど、確かに UTF8MB3 が廃止される未来はあるんだよな、という感じだった。 dev.mysql.com MySQL v5.6/5.7 から v8.0 にアップグレードした環境と、生え抜きで v8.0 の環境が混在していて、特に charset や collation …

MySQL 8.3/8.4 と mysql2 0.5.6

qiita.com あーなるほどね! となっていた。 日本語での解説は以下の記事がよさそうかな? gihyo.jp 実際に変更、というか削除されたのは以下。 dev.mysql.com とりあえず雑に MySQL 8.3 以降を使う場合は mysql2 0.5.6 を使いましょう! という話。 そうで…

行き先を失ったプロセスを kill して平和を取り戻す

アプリケーション側で実行流量の制御をしておらず、人力で大量にアクセスすると死ぬ機能がリリースされてしまい、無事に死亡する事案に遭遇していた。 タイムアウト時間を超えた MySQL 内プロセスを kill する 対象を抽出する 以下のようにすると、カンマ区…

docker(-compose) で MySQL を組み込む時の注意

久しぶりにゼロから docker-compose.yml 書いててハマったので。 常日頃から触ってないとわすれがちなの、トシを感じる。 ホスト側から MySQL CLI でコンテナ側の MySQL server へログインするとき ホスト名は localhost を使用せずに 127.0.0.1 を指定する…

HomeBrew のアップデートで MySQL 8.1.0 がインストールされて俺の Rails が壊れた

俺の、って書いておかないとマサカリ飛んできそうなので。

MySQL のリリースが変わるらしい

https://blogs.oracle.com/mysql/post/introducing-mysql-innovation-and-longterm-support-lts-versions Innovation Release と LTS Release がメインになって、 Major は単純に二年ごとに増える、みたいな気持ちでよさそう。 Innovation Release の最終バ…

ERROR 1038 (HY001): Out of sort memory, consider increasing server sort buffer size

掲題のエラーで悩んでいるチームがあったので、ヒュッと「MySQL のバグじゃねっすかね?」とだけ Slack で投げていたんだけど、ちゃんと確認することにした。

MySQL の AUTO INCREMENT の値を改ざんする

データ全部消したので 1 から始めてぇ!って時にやる。 ALTER TABLE ${TABLE_NAME} AUTO_INCREMENT = 1; 参考 notepad-blog.com

RDS で mysqldump すると FLUSH TABLES WITH READ LOCK

単体で動作させている RDS だと、以前書いたような以下のようなお作法で一貫性のある SQL ダンプが取得できる。 donbulinux.hatenablog.jp これをこのままマルチ AZ な RDS 環境で実行すると以下のエラーになる。 mysqldump: Couldn't execute 'FLUSH TABLES…

MySQL にタイムゾーンを追加する

ロケ地 MySQL 8.0.31 macOS Ventura 先日の Unbale ... の記事でも書いた通り、インストール直後の MySQL は Asia/Tokyo をタイムゾーンに指定するとエラーを返します。 ゆるせねえよ……、わからせてやる! しかしこの手の話題、 OS とか物理筐体移行する際に…

ERROR! The server quit without updating PID file

macOS が一番お目にかかるんじゃないすかねー、 brew でインストールしていざ起動したらこれ。 よく言われている pid ファイルの不在と MySQL の data-dir 権限を対応しても動かない時は。 一度 mysql 系のプロセスを全部消すか、OS ごと再起動する mysql --…

MySQL の予約語

groups というテーブルがあるんだけど、SELECT を投げようとして syntax error になった。 mysql> SELECT * FROM groups; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for …

MySQL8 時代の GRANT

GRANT ALL PRIVILEGES ON example_database.* TO example_user@localhost IDENTIFIED BY 'password'; FLUSH PRIVILEGES; 長らくこの MySQL 5.x 世代の「ユーザ作成と同時に権限も設定する」というヤツになれすぎて、 MySQL8 世代のユーザ作ってから GRANT し…

RDS で MySQL 5.7.3x を動かしている環境で日本語入力ができない

タイトルのとおり。 RDS で MySQL 5.7.3x 系エンジンの環境で、年次更新みたいな処理でデータベースメンテナンスをしていたのだけど、 mysql コマンドで RDS に接続時 SELECT や UPDATE 発行時に日本語入力しても消える (コピペしても消える) 状態だった。 m…

ERROR 3678 (HY000): Schema directory './example_development' already exists. This must be resolved manually (e.g. by moving the schema directory to another location).

タイトルの通り。 DROP DATABASE example_development; したらなんか残ってしまい、 rails db: 系コマンドも通らなくなった。 原因は、 mysql_data 以下のディレクトリにデータベース名のディレクトリが残ってしまっているので。 削除する /usr/local/var/my…

いい加減 8 に以降しろ! と言われそうだけど、メンテナンスが必要な環境でまだ動いているので。 GPG キー yum update を実行したところ、 MySQL Community 版のリポジトリ読み込みでエラーが出た。 The GPG keys listed for the "MySQL 5.7 Community Serve…

令和最新型の MySQL 5.7 インストール方法

RHEL 7 系の環境にちょっと古い Rails 環境を作る必要が出てきて、確認したら Rails 5.0.x かつ mysql2 0.4.5 だった。 ので、これは MySQL 8.0.x 使えないなと、 5.7.x を調達することになったのだけど、ちょっと悩んだのでメモしておく。 yum 経由でインス…

mysql-shell を入れてみる

浅学にして mysql-shell なるものを知らなかった (mysql-client についてくる CLI のことだと思ってた) ので入れてみた。 brew install MySQL って Cask 扱いでしたっけ? もう覚えてないワ。MySQL 利用している brew 環境下ならそのままインストールできる…

MySQL の用語置き換え

8.0.26 のお知らせ見てたら出てたので。 どう変わった とりあえずここだけ抑えておけば良さそう。 dev.mysql.com Incompatible Change: From MySQL 8.0.26, new aliases or replacement names are provided for most remaining identifiers that contain the…

MySQL 8 でのバイナリログの無効化

MySQL 8.0.x ではバイナリログが標準で有効化されている。 ので、無効化する。 [mysqld] disable-log-bin これでヨイ。 本当はローテートするようにして、ログを無効化しない方が良いのだけれど、開発環境だったり、定点バックアップ毎にしかデータ保証しな…

mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

なん……何? (ここ数年 RDS ばかり使っていたので、生 MySQL を久しぶりに使った顔 ロケ地 CentOS7 MySQL 8.0.22 community edition 該当ユーザの権限 GRANT ALL PRIVILEGES ${データベース名}.* ON ${ユーザ名}@localhost; PROCESS 権限が足りない mysqldump…