るいすのブログ

オタクエンジニアの雑記

mysql

InnoDB Cluster で過去のバイナリログが存在しない状況での復旧方法 missing transactions that were purged from all cluster members. (RuntimeError)

既存のクラスターのどれか一つに入る MySQL db02.luis.local:33060+ ssl JS > \c root@db01.luis.local Creating a session to 'root@db01.luis.local' Fetching schema names for autocompletion... Press ^C to stop. Closing old connection... Your MySQ…

InnoDB Cluster が Split-Brain で死んだ時

MySQL db03:33060+ ssl JS > c.status() { "clusterName": "main", "defaultReplicaSet": { "name": "default", "primary": "db03.luis.local:3306", "ssl": "REQUIRED", "status": "NO_QUORUM", "statusText": "Cluster has no quorum as visible from 'db0…

MySQL EXPLAIN の結果は良い感じなのに、何故か遅いクエリの原因を調べる

1回目は7秒かかるクエリが、2回目は速い。 実行計画を見ても、Slow Query を見てもインデックスは使われてそうなイキフンを感じる。 前置き クエリ テーブル EXPLAIN Slow Query 調べる Performance Schema file_summary_by_instance MySQL 5.7 で EXPLAI…

InnoDB Cluster のアップグレードをやる

8.0.19 -> 8.0.20 1. MySQL Shell を最新にする 2. MySQL Router を最新にする 3. メタデータを最新にする MySQL db01:33060+ ssl JS > dba.upgradeMetadata() NOTE: Installed metadata at 'db02.luis.local:3306' is up to date (version 2.0.0). Metadata…

MySQL innodb_buffer_pool_instances を調整したら幸せになれました

1 分間に約 23万クエリ流れる DB が全部で 4台な環境がある。 innodb_buffer_pool_size はだいたい 70 GB セマフォ innodb_buffer_pool_instances を調整することで、mutex への競合が減りパフォーマンスが向上する。 innodb_buffer_pool_instances = 1 OS W…

コンテナで動かしてる MySQL で innodb_dedicated_server = 1 にしたらどんどん死んでいった話

ある日 InnoDB Cluster をコンテナ上で動かしてたがメモリを期待していた以上に消費していたので調べていた。その時は innodb_dedicated_server を 1 にしてた。 innodb_dedicated_server ソースを覗いてみる buffer_pool_size が決まるところ メモリサイズ…

GTID で errant transaction に悩んだら

TL;DR flush slow logs のタイミングでバイナリログに書き込まれる それによって GTID がズレる = errant transaction このスクリプトを mackerel-agent で定期実行することで解決 事象 あるタイミングでスレーブの GTID が進んで errant gtid が起きる。 f…

Orchestrator を Mackerel と組み合わせて幸せを掴むスクリプト

なにしてるの errant transaction の検知 errant transaction の修正 can-replicate-from-gtid を叩く Mackerel で使う なにしてるの errant transaction の検知 errant transaction の修正 can-replicate-from-gtid を叩く errant transaction の検知 funct…

CentOS 8 で mysql-community-server 8.0.19 を入れる

dnf め... mysql repo を入れる # dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm -y mysql-community-server を探す # dnf list | grep mysql-community-server mysql-community-server-debug.x86_64 8.0.19-1.el8 mys…

InnoDB Cluster のフェイルオーバー時間を計測してみる

InnoDB Cluster クエリが少ないとき クエリが多いとき 最低5秒以上で MySQL Router は新プライマリへ切り替わる MySQL Router のメタデータが更新されるタイミング InnoDB Cluster 環境は MySQL 8.0.17 Single-Primaryパターンは下記2つ クエリが少ないと…

俺的 MySQL Group Replication まとめ

既存のテーブルが Group Replication に準拠してるか エンジンが InnoDB かどうか テーブル構造が Group Replication 準拠か 既存のテーブルが Group Replication に準拠してるか エンジンが InnoDB であることが必要 Primary Key が必須だよ エンジンが Inn…

俺的 MySQL 8 まとめ

俺的 MySQL 8 メモ 俺的 MySQL 8 メモ 1. MySQL 8 から SET PERSIST が使える 1. MySQL 8 から SET PERSIST が使える SET GLOBAL のグローバル変数の変更に加えて、再起動しても反映されるようになる。 mysql> SET PERSIST innodb_buffer_pool_size = 268435…

俺的 MySQL Router まとめ

1. MySQL Router はどこで動かすべきか 2. MySQL Router を挟むことでパフォーマンスに影響はあるか 2. bootstrap を実行したあとは気をつけろ 3. REST API で MySQL Router のメトリクスを取りたい REST API の有効化 1. MySQL Router はどこで動かすべきか…

俺的 Orchestrator まとめ

めっちゃ参考になるやつ。 yakst.comフェイルオーバーはしても Non-GTID だと CHANGE MASTER が実行されずに孤立した。 けど、↑ の yakst を見ると何も問題ないように書かれてる。 公式ドキュメントにも、GTID(Pseudo−GTID)じゃないと孤立するよとは書かれ…

俺的 MySQL GTID レプリケーション

GTID & 非GTID の混合レプリは無理 レプリケーション止まった時 1. どこで止まったか確認する 2. エラーになった GTID をどうにかする GTID なしのレプリケーションに戻す バックアップとリストア スレーブの追加 Got fatal error 1236 from master when rea…

MySQL でスレーブ複製編 via ディレクトリごとコピー

SCP (複製元)複製先へ datadir をコピー (複製先)ファイルの配置 nc 受信側 送信側 レプリケーションについて MySQL 5.5 まで(複製先) MySQL 5.6から(複製先) 前回は XtraBackup を使って、スレーブを止めずにスレーブを複製する方法を書きましたが …

Percona XtraBackup で DB を止めずにバックアップ/リストアする

MySQL のスレーブ複製をダウンタイムなしで行う

DBストレージエンジンまとめ

Archiveデータのアーカイブに最適されている。 テーブルデータを圧縮してディスク上でのデータ格納量を低減することを目的としたストレージエンジン。 クラスタや、トランザクション、インデックスがサポートされていない、INSERT と SELECT をサポートされ…

RDS for MySQL でSELECT結果をCSVに吐き出す

機会があって調べていると一筋縄ではいかなかったので覚書。 2ヶ月ぶりの記事ですが普通に生きています。 INTO OUTFILE は使えない RDS for MySQL(Aurora) v5.6.10 では INTO OUTFILEを実行するとエラーで使えない ERROR 1045 (28000): Access denied for u…

MySQLのデータベースをインポートする際に存在するテーブルのレコードを削除せずにALTER文を作成、実行するスクリプトを作った

先月末に数学のテストを終えました。 C単位は降ってきてほしいと切に願います。 あと、中間発表を控えてます。 背景 ステージング環境のDBをプロダクション環境のDBへインポートする際に レコードを消すわけには行かず ・プロダクションにないテーブルは作成…

EC-CUBEのインストール時にMySQL云々エラーが言われる

ちょっと、EC-CUBEを構築する際に困ったことがあったのでメモ インストール時にMySQL関連でエラーが出る ・InnoDB関連を調べる use eccube_db; show table status \G; Engine: InnoDB でなければInnoDBでDBを作成 CREATE DATABASE eccube_db ENGINE = InnoDB…

rm -rf という危険なコマンド

こんばんわ 起きたこと 作業中にいつものようにディレクトリを削除するときに「rm -rf」を使ってたら Nginxのドキュメントルートをふっ飛ばした。 rm -rf nginx:nginx /var/www 本当はchownを実行したかったのに脳死状態でこんなコマンドをうってた。 原因 r…

MySQLでDBに同じユーザーで権限を付与すると他のDBに接続出来なくなる現象

Wordpressに触れるようになって必然的に中指の第一関節ぐらいまで突っ込んだ知識を得たLAMP関係。 そんな中で知ったこと。 同じユーザーで異なるパスワードでDBに接続は出来ない 初めて知った... 今までMySQLを用いたプログラム作ってきたけど何故か今までこ…

【Wordpress】カテゴリーという概念そのものが無くなった場合の対処法【MySQL】

あまりの Apache2 のメモリ使用量が多かったので調整してたらカテゴリーが表示されなくなった! メモリ使用量が多すぎて 5.5GB の9割は消費されてた。 ブログに何回かアクセスしたり、管理画面に入るとすぐ 500 Internal Server Error を吐く。 まあ プロセ…