MySQLでバイナリログを利用
ローカルに、HomebrewでMySQLをインストールした。
ちなmac使用。
my.cnfにlog-binという一行を追加してやると、MySQLサーバーの起動時・停止時にバイナリログを出力してくれるようになる。
% pwd
/usr/local/etc
% cat my.cnf
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
log-bin
もちろん、設定変更後はMySQLサーバーの再起動を忘れないでね。
バイナリログファイルは /usr/local/var/mysql ディレクトリ配下に格納される。
バイナリログファイルのみならず、デフォルトのエラーログファイルとかMySQLサーバー起動時に必要なPIDファイルとかなんかも、ここにあった。
% pwd
/usr/local/var/mysql
% ls
#ib_16384_0.dblwr
ib_logfile0
performance_schema
#ib_16384_1.dblwr
ib_logfile1
private_key.pem
#innodb_temp
ibdata1
public_key.pem
auto.cnf ibtmp1
server-cert.pem
binlog.000001
username-bin.000001
server-key.pem
binlog.index
username-bin.000002
sys
ca-key.pem
username-bin.index
test
ca.pem
username.local.err
undo_001
client-cert.pem
username.local.pid
undo_002
client-key.pem
ib_buffer_pool
...ん?でも、このmy.cnfで設定したやつ起因のバイナリログファイルって、
binlog.000001
と
username-bin.000001
username-bin.000002
のうち、どっちなんだろうな。
どっちかが、デフォルトで出力されているバイナリファイルなんではないか。
試しに、my.cnfの設定を変更してみる(インストールした直後のデフォルトの状態へ戻す)。
% cat /usr/local/etc/my.cnf
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
MySQLサーバーを再起動させて、再度/usr/local/var/mysqlのバイナリログファイルらしきものを確認してみる。
% sudo mysql.server restart
% cd /usr/local/var/mysql
% ls
余計なファイルがありすぎるので、バイナリログファイルっぽいものだけ抜粋すると...。
binlog.000001
binlog.000002
username-bin.000001
username-bin.000002
binlogの方が1ファイル増えておる。
再度、MySQLサーバーを再起動してみる。
% sudo mysql.server restart
Shutting down MySQL
. SUCCESS!
Starting MySQL
.. SUCCESS!
再度バイナリログファイルを確認してみる。
binlog.000001
binlog.000002
binlog.000003
username-bin.000001
username-bin.000002
やはり、binlogの方が1ファイル増えている。
てことは、今はもうデフォルトでbinlog.{連番} という形式でバイナリログファイルを出力してくれているということだな。
この状態で、mysqlにテーブルとレコードをセット。
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 DATETIME);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t1 VALUES(1, NOW());
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM t1;
+----+---------------------+
| c1 | c2 |
+----+---------------------+
| 1 | 2021-10-28 08:54:12 |
+----+---------------------+
1 row in set (0.00 sec)
mysql> quit
Bye
最新のバイナリログファイルをrecover.sqlという名前のsql文ファイルへ変換。
% sudo mysqlbinlog binlog.000003 > ~/recover.sql
確認してみると、SETほにゃららみたいな文言があったので、このバイナリファイルにテーブル&レコードをインサートしたSQL文実行履歴が確かに記録されていたとわかる。
% less ~/recover.sql
t1テーブルのレコードを削除してみる。
mysql> SHOW tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
+----------------+
1 row in set (0.00 sec)
mysql> DELETE FROM t1;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM t1;
Empty set (0.00 sec)
mysql> quit
Bye
さっき作ったrecover.sqlをmysqlコマンドで実行。
MySQLに再度接続して確認。
mysql> USE 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> SELECT * FROM t1;
+----+---------------------+
| c1 | c2 |
+----+---------------------+
| 1 | 2021-10-28 08:54:12 |
+----+---------------------+
1 row in set (0.00 sec)
mysql> quit;
Bye
おっ!無事レコードが復旧してますね!!
ちなみに、ずっとバックアップ取ってなくてかつその間に何度もサーバーが落ちていたら、その間に発生したバイナリログファイルを複数sql文へ書き換えては実行して、というのをやらないといけない。
homebrewでローカルにMySQLインストールした時、各種設定ファイルはどこにあるのか?
以下コマンドでHomebrewでMySQLをインストール。
MySQLファイルの確認。
% which mysql
/usr/local/bin/mysql
ちなみにこのファイルを展開したらやたら文字化けした長々としたファイルが出力された。
% cat /usr/local/bin/mysql
内容は割愛。長ったらしいし、なんか機密情報が入っていたら嫌だし。
gccという文字とかあったから、Cのソースコードをコンパイルしているみたい。
で、MySQLはCで実装されているから、こいつでMySQLのソースコードをコンパイルしているのかな?と思う。
(ちょうどCを一通り勉強してみたから、これからMySQLのソースコード読んでみるぞ!わくわく。)
MySQL起動のための設定ファイルであるmy.cnfはlocal/etcディレクトリ配下にあった。
% cd local/etc
% cat my.cnf
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
うーん、なんか設定ファイルすげーシンプルじゃね?
専用ユーザー名、基本ディレクトリ、データディレクトリ、ポート番号...、
このあたりの情報がない。
データディレクトリらしきものは作成されていた。
% pwd
/var/lib/mysql
て思ったら、単純に私の知識不足だった。
実行ファイルの本体はmysqldにあって、そこに各種設定情報もあるみたい。
ていうのは、ログファイルを確認したらわかった...いやわかったのか、この解釈で合っているのかわからないが。
こいつは、MySQLサーバーを立ち上げた時のログ。
```
% pwd
/usr/local/var/mysql
% sudo cat mendarukanoMacBook-puro.local.err
Password:
2021-10-27T07:38:58.962408Z 0 [System] [MY-010116] [Server] /usr/local/Cellar/mysql/8.0.27/bin/mysqld (mysqld 8.0.27) starting as process 2448
2021-10-27T07:38:58.966803Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2021-10-27T07:38:58.984837Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-10-27T07:38:59.130126Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-10-27T07:38:59.414878Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2021-10-27T07:38:59.414915Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2021-10-27T07:38:59.417599Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2021-10-27T07:38:59.417683Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2021-10-27T07:38:59.455767Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '127.0.0.1' port: 33060, socket: /tmp/mysqlx.sock
2021-10-27T07:38:59.455833Z 0 [System] [MY-010931] [Server] /usr/local/Cellar/mysql/8.0.27/bin/mysqld: ready for connections. Version: '8.0.27' socket: '/tmp/mysql.sock' port: 3306 Homebrew.
```
最後の行で、mysqldというファイルを呼び出していてそこでソケットは何とかポート番号はなんだとか判断して接続しているから、mysqldに書いてある??
けど、catコマンドで内容確認しようとしたら、めちゃ文字化けしててやっぱりよくわからなかった。
ローカルにmysqlを再インストールでめっちゃトラブった話
この本の第9章にMySQLを使ってみようみたいな内容があり、興味があったのでやってみたかった。
https://www.amazon.co.jp/dp/4774150207/ref=cm_sw_em_r_mt_dp_HA25T40W8F32CMS4B97G
が...、私はmacを使っているのだが、インストール例がlinuxでのコマンド操作が前提でmacOSだとマニュアル通りにできなかった。
こういうコマンドとか叩けない。
groupadd mysql
なのでいちいちこのコマンドのmacバージョンはなんなのかを調べてはやってみてとかやってみたけど...。
そもそもやらなくてもすでによしなにやってくれていた。
macOSでは直接コマンド叩くが許可されていないやつがある(`chown -R mysql:mysql /var/lib/mysql`とか。)
てか、zipファイルでダウンロードすると、ここに書いてある手順通りにやらなくてもよしなになってくれるのだ。
ていうことに気づいて、zipでのインストーラー起動でやってみることにして再度インストールしたのだが、
元々arm形式でMySQLをダウンロードしてたこともあって意味わからないことになり、元々使用していたMySQLが繋がらなくなり。
で、どうやらアンインストールするしかないからアンインストール方法をぐぐるのだけれども、brewでインストールしたMySQLをアンインストールする方法しか出てこない。
唯一、arm形式でインストールした場合は環境設定からアンインストールしたら良いよという記事がヒットするも、この通りにやろうとしたら
このコンピュータでは“mysql”環境設定パネルを開けません。このソフトウェアの開発者に、新しいバージョンについて問い合わせてください。
とかいう意味わからんエラー出るし。
はあ、そうか。私のようなITど底辺人間はbrewでインストールなんかしてねえよ。
初心者でもプログラミングで丸儲け的な怪しいWebサイトに従ってarmでインストールしてたから、結果中身が何がどうなっているんだかわからん。
いろいろ探って、結果macのmysqlの環境設定に関するファイルを消さないといけないのだねということに気づいて以下を実行。
・/Library/PreferencePanes
・/System/Library/PreferencePanes
・/Users/ユーザ名/Library/PreferencePanes]
この記事に助けられた。
で、今度はbrewでインストールした。でないといろいろ弄った時にまたなんかあった時に復旧できないし、エンジニアたるものちょっとでも中身を知っておきたいよねと思って。
コマンド試実行してみたらまたエラー出る。
% mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
この記事を見て、/tmp/mysql.sock を新規で作る。
% sudo touch /tmp/mysql.sock
% mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
エラーが変わった。また上記Webサイトを参考にして以下コマンドを実行して権限を付与。
で、サーバーを起動させてみる。
% sudo mysql.server start
Starting MySQL
.Logging to '/usr/local/var/mysql/mendarukanoMacBook-puro.local.err'.
ERROR! The server quit without updating PID file (/usr/local/var/mysql/{PCユーザー名}.local.pid).
どこでググって見つけたか忘れたけど、以下を実行してみる。
再度サーバー起動してみる。
% sudo mysql.server start
Starting MySQL
.Logging to '/usr/local/var/mysql/{PCユーザー名}.local.err'.
SUCCESS!
なんかいけた。ログインもでけた。
% mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 Homebrew
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Dockerでanaconda環境を作りpythonいじり
背景
当方mac使用。以前はmacOSに直接anacondaをダウンロードしていたが、macがCatelinaにアップデートされた事によってanacondaが使えなくなっていた(condaコマンドのPATHも通ってなく、事実上のアンインストール状態だった・・・)
ググって調べてみたら、どうやらanacondaはインストールし直した方が良いらしい(と公式も言っている)。
How to Restore Anaconda after Update to MacOS Catalina | Anaconda
でもここで思い出した。かねてよりanacondaがmacOSに入っている事でいろいろと苦労した事を。例えばAWS CLIをインストールした時なんかは、pipのインストールがAWS公式のやり方では全然うまくいかず対処法を調べるのだけで何時間もかかったり。
であれば、最初からDocker上にanaconda環境構築しちゃえば、macOS環境が汚染されず良さげじゃない??と思った。
主に参照したサイト
公式
非公式
この人たちがやってるみたいに、いずれはDockerfile作ったりJupyter Notebook起動できるようにしないといけないのだと思うが(コンテナ再ビルト必要?)、pythonと機械学習についてがまだ超超超〜初心者で勉強したてなので、とりあえずいいや。必要になったらやるってことで。
Docker & Anaconda3で機械学習環境を整える - Yuya Sugano - Medium
【画像で説明】DockerでAnaconda環境をつくり、コンテナの中でVSCodeを使う - Qiita
手順
公式の通り、
docker pull continuumio/anaconda3
でイメージをプルして、
docker run -i -t continuumio/anaconda3 /bin/bash
でコンテナの(ワークスペース的なところ?の)中に入れば、少なくともanacondaのpythonコマンドとか対話式シェルスクリプトとかは実行可能になった。
前述の通り、今のところはとりあえず以下の本読み進めながらpythonいじったり機械学習の基本を学びたいなって感じなので、とりあえずこれでよしかな。
ちゃんとした環境構築は必要になったらやる。
あとpythonファイルを実行したい時はコンテナ内にファイルを作ってしまって、catコマンドでテキスト流し込んで実行してやれば良い(viもvimもnanoもemacも使えないので)
touch test.py
cat << EOF > test.py
> def AND (x1, x2):
> w1, w2, theta = 0.5, 0.5, 0.7
> tmp = x1*w1 + x2*w2
> if tmp <= theta:
> return 0
> elif tmp > theta:
> return 1
>
> print(AND(0, 0))
python test.py
# 0って返って来る。
catコマンドの使い方はこのサイトを参考にしました!
キームン(特級)に合う食べ物は?
本日学んだこと:Laravel Mix(Webpack)のコンパイルの仕組み
public/~~/app.js ないし public/~~/app.sass は、resources/assets/js/app.js ないし同/app.sass がコンパイルされて書き換わる。コンパイル方法は、作業ディレクトリないで npm run dev というコマンドを叩けばよし!!
本日の作業で私を救ってくれたWebサイト ベスト3!!
紅茶好き派閥(独断と偏見による)
私はとある紅茶教室に通っています。
そこで講師陣含め様々な紅茶好きに会うのですが、紅茶好きにもまあいろいろありまして。
そこで、各好みを派閥に見立て、図を書いてみました。割と独断と偏見が入っているので、人によっては「これ違くね?」ってなるかも。
その場合はご指摘ください。確かにそうだな、と思ったら修正します。
こんな感じになりました。
解説
まず紅茶好きの定義から。
基本的にフレーバードとかブランド紅茶はあんまり飲みません。紅茶はシングルオリジン(単一産地のこと)が基本、茶園がどこかまでわかっているとなおよし!な人を、今回は「紅茶好き」とみなして、彼女ら・彼らをカテゴライズしています。
・・・てか、この時点でもう、怖くないですか!?この時点でもう紅茶の「原理主義者」でしょ!?
普通にその辺のスーパーでティーバック買って紅茶楽しんでる人からしたら、怖いよね??少なくとも私は、紅茶にハマる前はこういう人ネットで見かけた時怖かったですよ!だからその恐怖はわかります・・・。
でも、そんな紅茶原理主義者に恐れ慄く一般人は、今回は完全に置いていって、上記派閥表の解説を続けますね(笑)
「紅茶好き」は、大きく分けて二つに別れます。
さっぱり紅茶派
特徴:すっきりさっぱりとした紅茶を好む。苦味があっても、鋭い苦味。基本的にミルクなしのストレートで飲む。
産地:ダージリン、ニルギリ、ディンブラ、ウヴァ、ジャワ、キームン など
メーカー商品に例えると・・・:午後の紅茶 無糖、ジャワティー、モスバーガーの紅茶、日東紅茶 など
こっくり紅茶派
特徴:こっくりと甘味と重みがある紅茶を好む。苦味は鈍いタイプ。ミルクティー向き。コーヒー好きはこのタイプの紅茶の方が好きかも(と、某紅茶の情報誌に書いてあった)
産地:アッサム、ルフナ、ケニア など
メーカー商品に例えると・・・:紅茶花伝、午後の紅茶ミルクティー など
ちなみに先に言っておくと、私は「さっぱり紅茶派」で、その中でも「大衆紅茶派」です。なので、こっくり紅茶のことは、実はよくわかりません。正直、アッサムでもルフナでも、家にある方でいいんじゃない?とか思ってしまいます・・・。
だから、「こっくり系紅茶」の各派閥の分け方がいまいちわからず・・・ってところはありました。
と、前置きした上で、各小派閥の解説をしてゆきますね。
さっぱり系紅茶派 小派閥
ダージリン原理主義
ダージリンは神、ダージリンが圧倒的に香り高くて美味しい。ダージリンこそ至高。一緒に食べるお菓子はあくまで引き立て役にすぎないんだから、フルーツとかスパイスとかで個性出してくんなや!!というタイプ。
最後の一文は確かにその通りです。良質なダージリンは本当に香りがよくてかつ複雑さもあって、とても美味しいです。なので、お菓子の個性が強いとダージリンの個性と戦ってしまって残念な感じになってしまうんですよね。
でもその分、お菓子はどうしても主役にできないから、お菓子やアレンジなどで遊べなくなるんですよね。あと、個性が強い分、一口一口が、なんというか余韻が半端ないというか、だからごくごく飲めません。
あと、ダージリンはその熱烈な人気に対して生産量が少なく、慢性的に超過需要となっています。その結果、良質なものだけでなく質が悪いものも出回っているので、当たり外れが激しいですね。この傾向は、ワインで言うところの、ブルゴーニュ産ピノ・ロワールと同じ傾向かもしれません。なので、例えシングルオリジンで結構お金出したにもかかわらず、いざ飲んでみたら「うわ不味っ!」みたいなのもあります。
ちなみにスーパーで売っている大衆メーカーのダージリンは、ここで言っているそれとは別物と思ってください。スーパーに売っている「ダージリン」なるものは、まずほぼ確実に他の茶葉とブレンドされていて、実際のダージリンの割合は数パーセント、しかも精製してから年数が経った古い茶葉 というのがデフォルトですからね・・・。
大衆紅茶派
クオリティシーズン以外のニルギリとか、ディンブラとかキャンディとか、苦味もえぐみもマイルドで、香りも控えめ、大衆的な飲みやすい紅茶が好きなタイプです。私も元々紅茶にハマる前から「午後の紅茶 無糖」に慣れ親しんでいたタイプなので、こういう飲みやすい紅茶が好きですね。
あとダージリンと逆で、香りがそこまで強烈かつ個性的でない分、お菓子を主役にして楽しめます。例えばフルーツをたっぷり使ったタルトとか、スパイスが効いた焼き菓子、あとオレンジ風味のチョコレート系のお菓子など。お菓子そのものが強力なアロマを放っていたら、やっぱりそっちをメインで楽しみたいじゃないですか。なので「お菓子がメイン、紅茶はあくまで引き立て役」として活用できるのも、私としては嬉しいポイントです。
こうした「無個性」的な紅茶にも個性はあって、いろいろ使い分けとかコツはあるんですよ。ただ紅茶教室に行くと、これらの紅茶が「無個性でつまんない紅茶」みたいな、ぞんざいな扱いをうけることが多くて、私は悲しいです・・・。この話をしだすと長くなるので、また今度。
キームン特級派
こんな派閥あるの!?って感じだけど。キームンの特級って、すごく個性的な香りなんですよ。まるで古いお寺みたいな、いぶしたような香りがします。正式には「火香」と呼ぶらしいです。で、この香りが熱烈に好きな人がいたら、それは確実に派閥だろうと。同じさっぱり紅茶派でも、他の派閥とは一線をかくすだろうと。そういうことです。
まあ、私はキームン好きですけどね。みたらし団子とかゴマのお菓子とか、香ばしい感じのお菓子と相性抜群です。ただ、派閥に入るほどの熱狂性はないということですね。
でも、キームン嫌いな人は本当に嫌いですよね。というか、むしろ「キームン好き!」って言う人を私はみたことがないですね。
しかしながら、今世界で最もメジャーなフレーバードティーと言われるアールグレイも、元々は英国人がキームンの味と香りに感動して、キームンを真似て作られたフレーバードティーですからね。欧米人は好きな香りなのかな??
メーカーで言うと、トワイニングの「プリンスオブウェールズ」はキームンっぽいらしいですね。私は飲んだことないですけど。
https://www.amazon.co.jp/dp/B001FB63NG/ref=cm_sw_em_r_mt_dp_U_ot9pEbPWV345M
ウヴァ派
なんか、ネットでぐぐると「ウヴァ好きー!」って言ってる人の記事たまにみるので、入れてみました。なんか独特な苦味とミントフレーバーがあって、特徴的ですよね。ディンブラと似てるっちゃ似てるけど、ディンブラよりも苦味が強くて、合わせるお菓子を選ぶかな〜っていう印象はあります。
まあ、私もウヴァ好きですけどね。ただこちらも「ウヴァそのものの爽やかさや渋味を楽しもう」的な傾向がややあるので、汎用性という点では「大衆派紅茶」にちょっとばかし劣るかな、というところです。それでも、ダージリンやキームンよりはいろいろなものと合わせやすいけどね。
セイロン至上主義派
セイロン=スリランカ紅茶しか飲みません!派。もはやどんな味だからどうこうって話じゃない。ニルギリで良いところをキャンディに固執したり、アッサムで良いところをルフナに固執したり、といった感じ(あれ、じゃあこれ「さっぱり系」に限った話じゃないな笑)。
あとそもそも「セイロン」という産地のくくり以上に細かいくくりを知らなくて、セイロンの中のディンブラなのかキャンディなのか、にさえ気を配らずに「セイロンティー大好き!!」って言っている人もこの派閥に含まれます。
こっくり紅茶派 小派閥
リーフ至上主義派
こっくり紅茶は、さっぱり系紅茶と異なり、「CTC」という製法の紅茶が含まれます。これは、紅茶がリーフでなく、まるでペットの餌のペレットかなんかみたいに、直径1mmくらいの球体に加工されています。私も経緯をよく知らず恐縮ですが、CTCの方が大量生産・大量消費に向いているようです(気になる方は自分で調べてください)。あとCTCの方が味が濃く出やすいです。
で、このCTC紅茶は認めん!良質なリーフのアッサム(ないしルフナ)の紅茶がストレートで飲みてえんだよ!!という人々の派閥が、リーフ至上主義派です。
ちなみにリーフティーが断然良い!という人自体は別に「さっぱり系紅茶」派にもいます。
冒頭にも述べましたが、私自身が「こっくり系」好きじゃないため、こっくり系同士の違いもよくわからず、うまく小派閥を作れませんでした・・・。
ロイヤルミルクティーを作るなら、別にアッサムでもルフナでもどっちでもよくね?と思ってしまっている私なのです。
こっくり系の紅茶に詳しくて、こんな小派閥はいかが?っていうのがあったら、ぜひご教示ください・・・。
無所属
ラプサンスーチョン派
これも「こんな派閥の人いるの!?」って思いながら書いてますが。松をいぶした超独特な香りが染み付いていて、まるで正露丸みたいな、すごい匂いがします。お菓子とはまず合わせられないです。
まあ、さっぱりかこっくりかでいうとさっぱりなんでしょうが、あまりにも個性的すぎて、両党いずれにも属せない、と判断しました。
でもこれもまた、一部欧米人には人気と聞きました。・・・本当なのでしょうか??