Ubuntu の仮想マシンをぽんぽん立ち上げられる "Multipass" というものがあると知り、興味を持ちました。 例えば MySQL のレプリケーションの例を示す時にも、MySQLサーバがどのように動作しているかを理解している人向けには「ポートを変えて立ち上げています」で通じますが、多くの人は「別々のサーバ上で動作している …
[さらに読む]The latest from the MySQL community
Ideas, releases, practical guides, and perspectives from the people building with MySQL.
ST_GeoHashで得たハッシュ文字列を ST_PointFromGeoHashでPOINTに変換する際に選ばれる点は、どこの点なのかという疑問が、先日発生しました。
失礼しました。。
確かに、一旦POINTに変換していましたね。
(POINTに変換される時の座標の決め方は私も気になりました)
— Yoshiaki Yamasaki (@yyamasaki1) 2020年3月5日
MySQL の GeoHash系関数に、当該GeoHashの範囲を得られる何か(ST_PolyFromGeoHashとかST_MaxLatFromGeoHashとかのようなもの)があれば簡単にこの問いには答えられるのですが、あいにくそれらの関数はないため、とりあえず状況証拠から想像する作戦を採ることにしました。
…
[さらに読む]
緯度と経度それぞれが別々のカラムに格納されているデータに対して、生成列を使ってGEOMETRY型のカラムとして扱えるようにする方法を考えてみました。速度面で何かディスアドバンテージがあるのか否かは未知数ですが、こんな方法もあるのだというヒントになればと思い、書いてみました。
元データの用意
まず、緯度、経度それぞれが別々のカラムに格納されているテーブル spot1 を作成し、データを投入します。
DROP TABLE IF EXISTS spot1;
CREATE TABLE spot1 (
id integer auto_increment,
name varchar(256) ,
lat double ,
lng double ,
PRIMARY KEY (id)
);
INSERT INTO spot1 (name, lat, lng) VALUES ('サークルハッピー寺院', 35.16110304 ,136.87678426);
INSERT INTO spot1 (name, lat, lng) VALUES ('旋法学園螺旋', 35.16814112 ,136.88577498);
INSERT INTO spot1 …[さらに読む]
TL;DR
- グループレプリケーションが他のノードから受け取ったクエリーは
hostname-relay-bin-group_replication_applier*というリレーログに保管される- グループレプリケーションといえどリレーログなので再起動とかで勝手に消えはしない
-
RESET SLAVEで消せる。 - 【2020/03/09 16:34】relay_log_recovery = ON でも消せる
-
- グループレプリケーションといえどリレーログなので再起動とかで勝手に消えはしない
- グループレプリケーションの復旧はかなり面倒なので、一回クラスター破棄して作り直した方が楽かも
日々の覚書: MultiPrimaryModeのGroup Replication環境を崩壊させるテスト …
[さらに読む]
MySQL 8.0.19が来た! その2:
mysqlコマンドラインツールのbinary-as-hexがデフォルトでオンに。
2020-01-13にMySQL 8.0.xのメンテナンスリリースである8.0.19が出ました。
多くの機能が追加されましたが、本ブログではあまり他の人が取り上げなさそうなものをご紹介します。
今回はmysqlコマンドラインツールのbinary-as-hexについて。
いきなり顛末はこちら。
MySQL8でCHAR関数がドキュメントどおりになってない(41から始めました)
# 私は40くらいからMySQLはじめてたみたいです。
ちなみにドキュメントではもともと「デフォルトでは、CHAR() …
TL;DR
- Certificationのタイミングで綺麗に連番(GNO)を払い出しているのかとか思ったら全然そんなことはなかった
- 各サーバー内ではちゃんと直列化して、サーバーまたいだ部分は100万番ずつズラしてユニークになるようにしているらしい。
- 99万9999まで本物のトランザクションが来たら更にオフセットするのかしらん
取り敢えず構築してマルチマスターモードに変更したところ。
MySQL localhost:33060+ ssl JS > cluster.status()
{
"clusterName": "myfabric",
"defaultReplicaSet": {
"name": "default",
"ssl": "REQUIRED",
"status": "OK",
"statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
"topology": {
"node1:3306": {
…[さらに読む]
MySQL8でCHAR関数がドキュメントどおりになってない
https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_char
を読むと、こう書いてある。
- CHAR(N,... [USING charset_name])
CHAR() は各 N 引数を整数として解釈し、それらの整数のコード値で指定された文字を構成している文字列を返します。NULL 値はスキップされます。
mysql> SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> SELECT CHAR(77,77.3,'77.3');
-> 'MMM'
MySQL5.7.29の場合
mysql [localhost:5729] {msandbox} ((none)) > SELECT …[さらに読む]
TL;DR
- epelのsysbenchがcaching_sha2_passwordに対応してないので、root@localhostのパスワードを空のまま認証プラグインだけmysql_native_passwordに変更しようとした
- プライマリーノード以外ではパスワードがEXPIREされて再変更を促された
- プライマリーノードで
SET PASSWORD = ''を実行したらセカンダリーノードでもEXPIRE状態じゃなくなった
パスワードが空っぽの時だけ再現するので、現用環境で問題になる可能性は低い。 再現手順。
mysql> CREATE USER yoku0825 IDENTIFIED BY '';
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT user, host, plugin, password_expired FROM mysql.user WHERE user = 'yoku0825';
+----------+------+-----------------------+------------------+
| user | host | plugin | password_expired | …[さらに読む]
お題
- エラーになったクエリはスロークエリログに記録されるのか?
- されるとしたら、エラーになったクエリであることは判別可能なのか?
試してみます
1. 文法エラー
まずは、文法エラー。
mysql> UPDATE t.tx1 SET c1 100; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '100' at line 1
文法エラーでも、ログに落ちました。文法エラーでログが落ちるということは、どんなエラーでも、スロークエリログにクエリが書かれる予感がします(早速、答えが出てしまった)。
# Time: 2020-02-25T21:13:22.700729+09:00 # User@Host: root[root] @ localhost [] Id: 15 # Query_time: 0.000100 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 …[さらに読む]