41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

MySQL

レプリケーションのセットアップ(非GTID)

レプリケーションのセットアップ(非GTID) 以下の手順で行う ソース(マスター)側の設定 server_idの設定 log_bin(バイナリログ)の有効化 レプリカ(スレーブ)接続用ユーザ作成 レプリカ(スレーブ)へデータコピー ソースでダンプ取得 ソースからレプリカ…

オプティマイザトレースの使い方

オプティマイザトレースの使い方 オプティマイザトレースの使い方は以下の通り オプティマイザトレースを有効にする 解析したいクエリの実行 トレースの表示 1. オプティマイザトレースを有効にする mysql> SET optimizer_trace='enabled=on'; ちなみにSET G…

MySQL5.6でsysスキーマを使う方法

MySQL5.6でもsysスキーマ使いたいなと思う人へ もう新しいバージョンも出ないMySQL5.6 でも、愛着があって(?)まだまだ使いたいという人へささやかなプレゼントです。 sysスキーマはMySQL内部の実行内容を把握するのに便利なビューやストアドなどが入って…

起動しない、エラーログ出ない、困ったー!と言う時はmy.cnf(my.ini)を見よう

小学校受験の話をガッツリ書く前に、今日はちょっとしたMySQLの小話。 なんで起動しないのか確認できないよぉ… MySQL Serverを起動しようとしたら起動しない。 でも、エラーログが出てない。 実行しているコンソール上にも何も出ない。 なんで起動しないのか…

MySQL8.0を再起動するとアプリからつながらなくなる理由

この記事は MySQL Advent Calendar 2021 の18日目の記事です。 それ、多分 caching_sha2_password が原因です この話、実は既にyoku0825さんが語っている話なので、別に目新しさは無いですw でも、アプリケーションからというように、少しDBへの接続の仕方…

リモートからBLOB型に画像やPDFファイルを登録する方法

この記事は MySQL Advent Calendar 2021 の5日目の記事です。 久々のブログです。 今年は私事が忙しくてサボりまくってましたが、年明けから頑張ろうかと思いそのためのリハビリです。 今回のネタは備忘録的に自分のために残したかったものです。 BLOB型への…

innodb_strict_mode のセッション値を変更するのに必要な権限(from 8.0.26)

サクッと書けるネタだったので、久々に書きました。 リリースノートを読んでて気になった MySQL8.0.26のリリースノートのServer Administrationの箇所にこうあった。 Setting the session value of the innodb_strict_mode system variable is now a restric…

【MySQL】テーブルの断片化を確認しよう

はじめに 自分用にテーブルが断片化してるか否かを確認する方法を書いてみました。 もし他にこんなのあるよー、って話あれば教えてください。 SHOW TABLE STATUS Data_freeを見ると良い innodb_file_per_tableオプションが有効であるべき mysql> SHOW TABLE …

SELECT ... FOR UPDATEとUPDATEでデッドロックが出る人へ

はじめに 最近は主に花粉症に悩まされており、目が痒くてたまりません。 また、娘の生活がガラッと変わったせいで、毎日貧乏ヒマ無しです。 そんな中、たまたま早起きできたので奮起して久々に書いてみました。 問題が起きる環境 MySQL8.0.17以前 transactio…

適応ハッシュインデックスについて

はじめに こないだのAdvent Calendar用の記事で適応ハッシュインデックス(AHI)について少し書いたんだけど、今日はそもそもそれってどうやって使ったり見たりするの?って話です。 適応ハッシュインデックスとは?(おさらい) InnoDBのインデックスはクラ…

MyISAMってなんだろう?

はじめに 最近、MyISAMのこと調べる機会が多かったので、今までの人生でMyISAMテーブルを触ることなんてほぼ0だったし、MySQL的には今更な感じもするけどとりあえず書き出してみる。 (殴り書きに近い。あとで調べるときにとっかかりになればと思ってる) なの…

TRUNCATE TABLEがバッファプールを読んでいる

本エントリはMySQL Advent Calendar 2020 の13日目です。 今日はちょっとだけMySQL8.0にアップグレードしとくと良いよ、というネタです。 TRUNCATEよりもDROPとCREATEのほうが性能が良いか? はい、MySQL5.7以前まではDROPと&CREATE のほうがTRUNCATE TABLE…

MySQL ShellのダンプとMDSへのインポート

はじめに 今回はずっと触りたかったMySQL Shellのダンプをやりつつ、 最後は前回作ったMDS相手にインポートしてみようかと思います。 MDSにインポートするためにはociクライアントの設定や、オブジェクトストレージが必要なので、それらを途中で設定していき…

MySQL Database Serviceを触るまでのお話

はじめに MDS(MySQL Database Service)が東京リージョンにも来ました! (^O^) <祝! というわけで、朝4時に起こされたこともあり、時間もできたんで久々にOCIを触ってみたんですが、作りたいものが簡単に作れて楽しかったです。 ただ、公式チュートリアル…

シンキノウ×デ×シルキノウ (CREATE TABLE ... SELECT)

Myリノベ 8.0.21に参加 先日「MySQL Release note でわいわい言う勉強会 8.0.21」に参加してまいりました。 今回も最新のMySQL8.0.21のリリースノートをみんなで見ながら、思いつくままに語る会で、その中で僕は相変わらずROM専ですが参加しておりました。 …

クエリーキャッシュを有効にしたけりゃサーバー再起動

え?何当たり前のこと言ってるの? そう思われた貴方、クエリキャッシュをちゃんと使うか使わないか最初に考えている偉い人ですね。 query_cache_typeをON(1)にするとクエリーキャッシュが有効になるんですが、これ、ドキュメントを読むと少なくともMySQL5…

MySQL5.xではデッドロックだけど8.0では死なないよ

はじめに タイトル通り、MySQL5.x系だとデッドロックになるんだけど、 MySQL8.0だとロック機構が変わってデッドロックにならないよ という組み合わせのお話。 僕はこの話をどっかで見た記憶が無かった(忘れた?)ので 教えてもらったとき結構驚いたんだけど…

パーティションほとんどわからんので触ってみた

パーティショニングしたテーブルの確認方法 MySQL触ってて、実は仕事上では一度も触ったことがなかったパーティショニング。 (だって、色んな人が使えないって言ってたんだもん) だけど、意外と世の中使ってる人は多いので今後のためにもパーティショニン…

MySQL8.0.20で追加・変更されたパラメータを眺める

はじめに MySQL8.0.20で追加・変更されたパラメータをなんとなく眺めてみました。 パラメータの説明については基本的にはドキュメントからの引用です。 変更されたパラメータ一覧 例によってとみたさんのパラメータ比較ツールをお借りしました。 Parameter 8…

MySQLでのテーブルコピー(InnoDBとMyISAM)

MySQLでのテーブルコピーを考える MySQLでテーブルコピー(同一インスタンス内とか別インスタンスとかあるけど)って意外とテストとかちょっとしたリカバリ作業用にしたくなりますよね。 というわけで、InnoDBとMyISAM関連だけですが書き出してみました。 コ…

パフォーマンススキーマの計器の最大登録数について

※追記しました。後述のドキュメントの話は修正されました!(^▽^) 計器(インストゥルメント)とは 計器(インストゥルメント)と呼ばれるコードを通じてMySQL(NDB Clusterを含む)はパフォーマンスに関するデータを取得しています。 取得されたデータはバッ…

ようこそ…『男の世界』へ…(AUTO_INCREMENTが巻き戻るお話)

AUTO_INCREMENTが巻き戻る 今の会社に入るまで知らなかったんですが、結構有名なバグっぽいですね。 AUTO_INCREMENTで採番された番号が、再起動するとMySQL5.7以前は巻き戻る現象が起きる話です。 再現してみる MySQL5.7と8.0にそれぞれ同じテーブルを作って…

MySQL8でCHAR関数がドキュメントどおりになってない

MySQL8でCHAR関数がドキュメントどおりになってない https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_char を読むと、こう書いてある。 CHAR(N,... [USING charset_name]) CHAR() は各 N 引数を整数として解釈し、それらの整数のコ…

MySQL Technology Cafe #7 で『MySQL Shellを使ってみよう』を聞いてからのLinux(Ubuntu)での導入部分

前回Windowsだったので、今回はUbuntuで引き続き初心者向けにライトな感じで導入部分を書いてみました。 1. MySQL APT Repositoryの取得 ここからダウンロード(インストール済の人はスキップ) 2020/1/25現在の最新版はmysql-apt-config_0.8.14-1_all.deb 2. …

MySQL Technology Cafe #7 で『MySQL Shellを使ってみよう』を聞いてからのWindowsでの導入部分

MySQL Shell をWindowsに入れてみる 先日参加してきたMySQL Technology Cafe #7でMySQL Shellって何?どんなことできるの? といった初心者向けの話がされるというので聞いて来ました。 今回はそこから学んだこと、およびハマってしまったWindowsでの設定に…

Percona Serverのマスキング試してみた

MySQLのマスキングをPerconaで使ってみる MySQLのマスキングはEnterpriseEditionでしか使えないが、PerconaServerはそれを無償で使えるように! やるじゃん、ぺるこな! でも使えるのは8.0.17-18バージョンからなので、ごめんね5.7…。 とりあえず、この記事 …

" _ " or " % " - Which is faster? (Like predicate in MySQL's sql)

MySQL Advent Calendar 2019 の22日目です。 MySQLのあいまい検索時のLIKEで使える「_」と「%」について調べてみました。 あいまい検索時に使う「_」と「%」 会社でlike 検索した際に「_」と「%」で速度差ってあるのかな?という話になり、 こういうの調べた…

COUNT に「OR NULL」入れるの、正しい結果返すのわかったけど、心がザワザワしてたけど、今はスッキリした。(スゲーッ爽やかな気分だぜ)

タイトルにある話はつまりこう ここに都市名を入れたテーブルがあったとします。 mysql root@127.0.0.1:test> select * from city limit 10; +-----------------+-------------------+-----------+--------------+------------------------+ | prefecture_id…

インデックスマージ、とても良い

MySQLのインデックス 世の中がMySQL8.0.18のハッシュJOINに盛り上がってる中、オジサンは古いけど自分にとっては新しいマージインデックスの話をします。 複数のインデックスがテーブルに作られていても、使えるのは一つ というのがMySQLでは原則ですが、こ…

MySQL Technology Cafe #4参加してきた

昨日行ってきたやつのお話共有します。 松信さん(Facebook)の話がすごすぎて聞いてて頭プスプス言ってた。 それを思い返しながらまたプスプス言ってたんですが、なんとかかきおこしました。 正直、まだ理解が追いついてないです…。 MySQL Technology Cafe …