MySQL 8.0 で GIS の機能が本格的になった(測地系の概念が入った)ことをきっかけに、位置情報的なものに興味を持った私です。最近はもう、MySQLの機能とは関係ないところで*1、緯度経度がどうやって決められているかとか、地図作るのにどうやって正確に場所を特定したり写真を上手に補正したりするんだろうという所に興味を持ったり、蘊蓄を語りたくなるポイント(地図学の聖地と呼んでいます)を訪問して密かに感動してみたり、勝手に盛り上がっています。 …
[さらに読む]TL;DR
-
information_schema.tables
(SHOW TABLE STATUS
はここから値を持って生きている)の値は information_schema_stats_expiry 秒間更新されない - なので
SET SESSION information_schema_stats_expiry = 0
とかするとほぼ今まで通りの挙動になる - See also, MySQL Bugs: #91038: AUTO_INCREMENT does not increase automatically
空っぽのテーブルを用意する。
mysql80 111566> SHOW TABLE STATUS\G
*************************** 1. row ***************************
Name: t1
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0 …
[さらに読む]
TL;DR
- MySQL 8.0.16 についに CHECK制約 が実装された
-
NOT ENFORCED
なんてオプションが “MySQLっぽい” - ちなみにCHECK制約の追加はオンラインDDL不可、引っぺがすのはできる
最初のFeature Requestから15年、ついにMySQL 8.0.16にCHECK制約が実装された。
アルファベットしか入ってほしくない val
カラムに対して、ひらがなの “さん”
とかが入力されるのを制限できる、みたいなヤーツ。 …
TL;DR
- 手を出さない方がいいのはSET PERSIST_ONLYの話で、SET PERSISTは手を出してもいいと思う
-
SET GLOBAL
,SET PERSIST
には値をセットするためのバリデーター(各サーバー変数ごとにある)が用意されているが、SET PERSIST_ONLY
はそのバリデーターを通らないため、不正な値を突っ込んでもエラーになってくれない -
mysqld
を再起動しようとした時に、mysqld-auto.cnf
(SET PERSIST
,SET PERSIST_ONLY
の保管先)に不正な値が突っ込んであるとそれを適用できなくてmysqld
が起動してくれない - MySQL :: MySQL 8.0 Reference Manual :: 13.7.5.1 SET …
TL;DR
-
--postpone-cut-over-flag-file
でテキトーなファイルを指定する -
RENAME TABLE ..
(gh-ostのcut-over
フェーズ)をしても良いタイミングになったら、「指定したファイルを消す」または 「 Interactive commands のunpostpone
コマンドを放り込む」
gh-ost …
[さらに読む]
とある原稿を書いていて、トランザクションまわりをチト調べている私です。
あまり深みに入らなければ、4つのトランザクション分離レベルと、それぞれのアノーマリを説明して、はい、終わり、ということにしたいのですが、私には以前気づいてしまった以下の記事があり「あれ、四つ多くない?」を細かく調べることなく放置していたのでした。
Web開発者が知っておくべき八つの分離レベル
しかし、ここで調べなければもやもやは晴れないですし、
神林さんがシリアライズでもパフォーマンスに問題のないRDBMSの実装が終わり、
…
gh-ost には interactive-command なるものが用意されている。 これは
gh-ost
を 起動しちゃった後
、後からオプションを変更したりする機能を提供しているっぽい。 デフォルトではソケットファイルのみオープンする。デフォルトのパスは
/tmp/gh-ost.<スキーマ名>.<テーブル名>.sock
。
パスを変えたかったりTCP経由も受け付けてほしい時は gh-ost
--serve-socket-file=/tmp/hoge
や gh-ost
--serve-tcp-port=9999
とかで設定できる。
$ gh-ost --database=mysqlslap --table=t1 --alter="ADD KEY (intcol1)" --host=127.0.0.1 --port=21801 --user=msandbox …
[さらに読む]
TL;DR
- マスターに接続する(
--allow-on-master
)場合、--throttle-control-replicas myhost1.com:3306,myhost2.com:3306
で遅延監視対象を指定する- スレーブからbinlogを吸い上げてマスターに当て込む場合は、接続先のスレーブで遅延監視をする
- 閾値は
gh-ost --max-lag-millis 1000
で指定する (デフォルト1500ミリ秒) -
SHOW SLAVE STATUS
は叩かず、*_ghc
テーブルに書き込んだハートビートの行と現在時刻の差分で計算する-
--test-on-replica
か--migrate-on-replica
の時だけSHOW SLAVE STATUS
するっぽい
-
-
SHOW SLAVE STATUS
…
キープアライブはしばらく前から存在していましたが、それでも多くの人にとって謎です。
したがって、これはkeepalivedがMySQLでどのように機能するかを示す非常に単純な例です。
うまくいけば、これは質問がある人を助けることができます。
Simple master to slaveをセットアップします。
意味..あるイベントで2番目にフェイルオーバーしない限り、1つに書き込みます。
1日 - インストールkeepalived
#yum検索キープアライブ keepalived .x86_64:ロードバランサと高可用性サービス
名前と要約の一致のみ 。すべてを "search all"で検索してください。 #yum -y
install keepalived
これで設定ファイルができました
#ls -ltr /etc/keepalived/keepalived.conf
…