マスター・スレーブ構成ではマスター障害時、保持しているバイナリログが最も進んでいるスレーブから新マスターを選出する。
MySQLでは、どのスレーブが最新のログを持っているかはコントロールできない。 準同期レプリケーションを利用していたとしても、非同期スレーブのほうが先に進んでいるということがあり得る。
複数のデータセンターを利用する場合に、プライマリ側のデータセンターにマスターを固定する運用をするとしたら、 どのような構成パターンが良さそうか考えてみる。 …
[さらに読む]Ideas, releases, practical guides, and perspectives from the people building with MySQL.
11年ほど前に書いた日記がふと目にとまりました。CHAR(0)という列を定義できるというお話。
sakaik.hateblo.jp
当時のバージョンが明記されていないため、よくわからないのですが、最新の 8.0.20では挙動が変わっているようです。
mysql> CREATE TABLE t1 ( a CHAR(0), b VARCHAR(0));
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t1 VALUES ("ABCDE", "FGHI");
ERROR 1406 (22001): Data too long for column 'a' at row 1
ちゃんとエラーとして動作するようになりました!(というか勝手に切り捨てるのをやめただけとも言う)
当時の実行結果で、WARNING …
slack
とかを使っていると、新たに部屋に参加した人は挨拶するじゃないですか。「こんにちは!」って。そしたら、既に部屋にいる人は「こんにちはこんにちは!」って返しますよね。その後に入ってきた人は、これを見て「こんにちはこんにちはこんにちは!」って挨拶したり、次の人は「こんにちはこんにちはこんにちはこんにちは!」って書き込んだり、しますよね。
これを SQL でさくっと書けないか、と、とある チャンネルに @yoku0825
さんが書いた疑似SQLがこれ。
WITH RECURSIVE t AS
(SELECT 1 AS c, 'こんにちは' AS str
UNION ALL
SELECT c + 1, CONCAT(str, str) FROM t WHERE c < ?)
SELECT CONCAT(str, '!') FROM t;
…
[さらに読む]TL;DR
--output=slowlog と --no-report でできる
書き出しが全てなのでそれは置いておいてハマったこと。
pt-query-digest --type=tcpdump の2020年問題
MySQL 8.0で、「デュアルパスワード」がサポートされました。 1つのユーザに対して、新旧2つのパスワード(プライマリとセカンダリ)を設けることができます。
# どっちのパスワードでもログインできる $ mysql -uapp -h$HOSTNAME -pPassw0rd@init -e 'SELECT CURRENT_USER()' +----------------+ | CURRENT_USER() | +----------------+ | app@% | +----------------+ $ mysql -uapp -h$HOSTNAME -pPassw0rd@2nd -e 'SELECT CURRENT_USER()' +----------------+ | CURRENT_USER() | +----------------+ | app@% | +----------------+
DB上でのパスワード変更のオペレーション と アプリケーション側に設定されているパスワードの変更 をまったく同時に行うことは困難です。 …
[さらに読む]MySQLのMECABによる最近つぶやかれている単語の解析
MySQLのMecabプラグインを利用して集計したデータを解析する過程で、INNODB_FT_INDEX_TABLEにて含まれている単語を確認し集計しようとしたが、
サーバーのスペックが低く集計中にハングしてしまったので、メモリーのINNODB_FT_INDEX_TABLEの内容をInnoDBテーブルに落として集計してみた。
もし、同様に形態素解析で解析されたワードを集計したいけれども、メモリー量が不足していて単語を集計出来ない場合の回避策として。参考までに。
root@localhost [(none)]> desc INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +--------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+-------+ | WORD …[さらに読む]
これは、こちらの記事の続編です。
MySQL 8.0.20 で強化されたハッシュジョイン(Hash Join)を試してみる
MySQL 8.0.18 で実装された時点で INDEX があるテーブルでは(普通に使うと)無効だったハッシュジョインですが、MySQL 8.0.20 で変化があったのかを確認してみます。
【参考】
MySQL 8.0.18のHASH JOINを試した(tom__bo’s Blog)
準備
先の記事で使った環境で、各テーブルに INDEX をADDします。
ADD_INDEX mysql> USE hashjoin_test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed mysql> ALTER TABLE t1 ADD INDEX (col1); Query OK, 0 rows affected (0.46 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE t2 ADD INDEX (col1); Query OK, 0 rows …
[さらに読む]はじめに
MySQL8.0.20で追加・変更されたパラメータをなんとなく眺めてみました。
パラメータの説明については基本的にはドキュメントからの引用です。
変更されたパラメータ一覧
例によってとみたさんのパラメータ比較ツールをお借りしました。
| Parameter | 8.0.20 | 説明 |
|---|---|---|
| binlog-transaction-compression | FALSE | バイナリログファイルに書き込まれる … |
こちらに引き続き、以前サポートされた機能の再発掘です。MySQL 8.0.1 でサポートされた機能なので CHECK 制約よりも古いです(笑)。
※配布開始 1 周年を迎えた「MySQL 8.0 の薄い本」を、8.0.20 対応版改訂を機にリニューアルし、実行例を増やすための記事です。はい。
「MySQL 8.0 の薄い本」を作って配っている話
NOWAIT / SKIP LOCKEDの使いどころ
トランザクション内で、
テーブルにある行の情報を取得する その行に対して更新を掛ける
場合には、
SELECT ... FOR UPDATEでロックを獲得する (取得した情報を加工するなどして)UPDATEする
という流れになりますが、他のトランザクションが先に当該行のロックを獲得していた場合、
…
[さらに読む]