MySQL binlog バイナリログ削除

MySQL は binlogという バイナリログを ファイルで 貯めている

わたしの macOS 環境では、 「binlog.000***」というファイルが

/usr/local/var/mysql/ に貯まる。

私の MacBookは、 この バイナリログ が ストレージ を占領してしまった。

ログなので rmコマンドで ログファイル を削除してみたが

下記のように MySQL 起動時に エラーが出た

> mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/mohmac.local.pid).

バイナリログ は消してはいけないらしい。

mysql 接続後、 下記の SQLコマンドで ログ一覧 が表示される。

show master logs;

上記で出てきたリストの 名前を 指定して 下記 SQL コマンドを実行する。

purge master logs to 'binlog.000220';

「binlog.000220」を指定しているが 環境によって値は違うので注意してください。

「binlog.000220」の場合、 220は残るが それより 連番数値の小さいログは削除されます。

purge master logs to

※ バイナリログ の貯まる ファイル場所は 環境で異なるようです。

ユーザー権限から バイナリログを Purge

ユーザー側から バッチ処理などで バイナリログを削除を実行すると下記のエラーが出ます

> show master logs;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation

userの Super_privが 「N」になっているので 「Y」に変更し再起動すれば

Purge master log コマンド実行できました。

UPDATE mysql.user SET Super_priv='Y'
UPDATE mysql.user SET Super_priv='Y' WHERE user='ユーザー';

MySQL テーブル varchar 最大値(max length)を確認

MySQL テーブル varchar 最大値(max length)を確認

MySQL で テーブルを作成 varchar length size 大きすぎると

下記のメッセージが 出る場合があります。

> create table test_table(s varchar(99999));
ERROR 1074 (42000): Column length too big for column 's' (max = 16383); use BLOB or TEXT instead

エラーを確認すると わたしの環境では 16383 が最大のようでした。

> create table test_table(s varchar(16383));

↑ varchar の長さを 16383に変更した 上記 SQL では テーブル作成が 成功しました

テーブルのカラムを 「s1, s2」2つ同じvarchar 16383にして実行すると↓

> create table test_table(s1 varchar(16383), s2 varchar(16383));
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

上記のエラーが出ました。翻訳してみると

エラー 1118 (42000): 行サイズが大きすぎます。
使用されるテーブル タイプの最大行サイズ (BLOB をカウントしない) は 65535 です。
これには ストレージの オーバーヘッドが含まれます。 マニュアルを確認してください。
いくつかの列を TEXT または BLOB に変更する必要があります

テーブルの最大長が 65535 (16ビット) ということでした

ということは varchar(1) = 4Byte確保しているということですね

> create table test_table(s1 varchar(8191), s2 varchar(8191));

「s1, s2」の2つvarchar最大の場合 8191文字 で テーブル作成 成功しました。

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED