Database JUNKY

MySQL,MariaDBを中心としたブログです

2000円台でこの暖かさ! LIFEJOY 洗える 日本製 電気毛布 敷きタイプ買ってみました!

寒い冬、エンジニアな人が風邪、インフルエンザになりやすい季節になってきましたね。基本エンジニアな人たちは、頭は良いけど、体は弱い、いや、体力が低下するまで、お仕事にのめり込んじゃうのがいけないのだと思いますが(笑)せめて、寝る時くらいは、あったかあったかで眠りたいですよね。もともと自分は冷え性なので、寝ながら仕事できるようにせめて、寝る時くらいはあったかくして寝たいなと思いまして。

安価で購入できる。LIFEJOY 洗える 日本製 電気毛布 敷きタイプを購入してみました。

続きを読む

【蘇るiMac】 iMac 2010の内臓ハードディスククラッシュをきっかけに外付けSSDハードディスクに変更し爆速になった記録

タイトルで爆速は大げさかな(汗)

ここ数日、ブログを書こうとしたら、このmacの中から何かカリカリ音がして、なんだろう?と気になってはいたのですが、その翌日にさらにおかしくなり、文字を入力すると、変換の部分でピタっと画面がとまるとか(笑)筐体をぶっ叩くと、日本語変換できるとか、もーあきらかに動きが変なんですね(汗) じゃあ、この際だからmac初期化してディスクを綺麗にしようと試み初期化は終わり再インストールしても、やっぱりピタっと止まる・・なんだこれ? ハードディスク見てもエラーではないし、でも原因は、ハードディスクっぽいって感じ。

色々対策して、今ここで爆速iMacでブログを書けるまでになった対応を(記念に)メモします。

・・というかわかっている人が対応したら、半日で治ったのかのしれませんが汗

f:id:hit10231023:20181125193556j:plain

続きを読む

MySQL SQLの検索結果をshellの変数に格納する方法

色々な書き方がありますが、私は以下のように書いてます。というほど書いてないので、必要な時にすっかり忘れるのが現実ですが。。

例えばこんなケースで書いてみます。

とあるテーブルの検索結果が0(ゼロ)件以外だったら、後続の処理を実行する

続きを読む

MySQL8 多段的なCTE表でアクセスログを集計するSQL

多段的にする必要は実はそんなにないのですが、apacheおよびnginx等のアクセスログ(テーブル)をカテゴリに分けて集計するSQLを作ってみました。

nginxのログをテーブルに格納する方法については、以前、ここにまとめました。(ちょっと古いか。。)

hit.hateblo.jp

以下、今回のログの形式ですが、上記の内容とは別のものです。

CREATE TABLE `accesslogs` (
  `Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `remote_address` varchar(128) DEFAULT NULL,
  `User_Agent` varchar(512) DEFAULT NULL,
  `Url` varchar(512) DEFAULT NULL,
  `CreatedAt` datetime NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=159193 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

やりたいことは、

  1. googlebotからのクロールが?
  2. どのディレクトリをクロールしているか?
  3. 最終のクロール日時を出しつつ
  4. botがPC用クロールなのかモバイル用のクロールなのかを判別しながら

のアクセス回数をカウントするSQLです。

結果からいうとこんな感じになります

+------------------+-----------------------------------------------------+-------------+---------------------+
| BotType          | UriType                                             | AccessCount | LastAccess          |
+------------------+-----------------------------------------------------+-------------+---------------------+
| Googlebot_Mobile | zzzz                                                |        1934 | 2018-10-30 08:25:37 |
| Googlebot_PC     | 12345678                                            |        1226 | 2018-10-30 08:21:02 |
| Googlebot_Mobile | 12345678                                            |         462 | 2018-10-30 08:25:12 |
| Googlebot_PC     | abcdef                                              |       10106 | 2018-10-30 08:25:58 |
| Googlebot_PC     | zzzz                                                |        5306 | 2018-10-30 08:23:46 |
| Googlebot_Mobile | abcdef                                              |         633 | 2018-10-30 08:15:30 |
続きを読む

トイレの水が出ない!!修理の方法など SH381BA編

トイレの修理はお早めに!

TOTOのトイレ(SH381BA)の修理します。はい!全然、技術系の話でもデータベースの話でもありません!

結果からいいますと、トイレの水が出なくなりました厳密にいうと、タンク内部で水漏れしている気が・・する・・

幸いにも、自宅は、トイレが2つあるので、全く使えない状態というのは避けることはできたのですが、 それでも、今まで2台トイレがあったのに、1台しか使えないということが、どれだけ困るかを実感できました。 このようなケースの場合、どのパーツ名のどの型番のものを購入すればいいのかを、備忘録代わりに残して、同じ症状で同じお悩みがある方に、お役に立てればと思っています

そんでもって結局、今回は止水ダイヤフラム

の交換とあいなりました! そして、意外に安くてびっくり

続きを読む

MySQL8 SQL Window関数とCTE表でデータクレンジングと名寄せを実現する

とあるデータのクレンジング、名寄せ作業をSQLだけで完結する上で、よくわからなくなってしまったので、メモします。

例えば、こんな定義とデータがあったとして。

定義

CREATE TABLE `artist_master` (
  `Id` bigint(20) unsigned NOT NULL,
  `CreatedAt` datetime DEFAULT CURRENT_TIMESTAMP,
  `Valid` tinyint(4) NOT NULL DEFAULT '1',
  `Name` varchar(128) NOT NULL,
  `VideoCount` bigint(20) unsigned NOT NULL DEFAULT '0',
  `Ext` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 
;

データ

mysql> SELECT * FROM artist_master ;
-----------------
+-----------------+---------------------+-------+----------------+------------+--------------------------------------+
| Id              | CreatedAt           | Valid | Name           | VideoCount | Ext                                  |
+-----------------+---------------------+-------+----------------+------------+--------------------------------------+
|  38095832004676 | 2018-10-26 06:50:23 |     1 | Chris Alan Lee |          0 | NULL                                 |
| 333655795382791 | 2018-10-26 06:50:21 |     1 | Chris Alan Lee |          0 | NULL                                 |
| 354380886937504 | 2018-10-26 06:50:25 |     1 | Chris Alan Lee |          0 | NULL                                 |
| 391755868626561 | 2018-10-26 06:50:24 |     1 | Chris Alan Lee |          0 | NULL                                 |
| 504480813693733 | 2018-10-26 06:50:22 |     1 | Chris Alan Lee |          0 | NULL                                 |
| 577030850315619 | 2018-10-26 06:50:24 |     1 | Chris Alan Lee |          0 | https://www.imdb.com/name/nm1327414/ |
| 629430777071848 | 2018-10-26 06:50:20 |     1 | Chris Alan Lee |          0 | NULL                                 |
| 643255722139392 | 2018-10-26 06:50:20 |     1 | Chris Alan Lee |          0 | NULL                                 |
+-----------------+---------------------+-------+----------------+------------+--------------------------------------+

やりたいこと

上記のデータを踏まえ、

577030850315619のValid値を1のまま保守して、その他のValid値を0にしたい場合、どうすればいいんだっけ?というものを考えてまして・・・いわゆる、データークレンジングとか名寄せの話になるのですが(汗)それをSQLのみで実現するにはどうしたらいいってお話です

続きを読む

MySQL LIKE JOIN というアウトローなクエリーを試してみる

こんなの不可能だろと思いつつやってみたら以外と出来たというクエリーについて紹介します。

JOIN のON句にLIKEを使うというだけなのですが、これが以外と使える場面があります。今回、音楽のアーティスト名周りでこの難解なSQLをどのように活用するかを考えてみました。

続きを読む

プログラムは3日で忘れる私が再びpython3メモ pymysql

プログラムはちょっとやらないと忘れる。 数ヶ月前にやったはずなのに、いざ再開すると、同じところでつまづく。今回は MySQL接続で利用するpymysqlでのメモをします。エラートラップとか例外とかは、書いてません。ちゃんとかける方はこのページなんかみないと思いますので簡単に書きました。

そして、これも書いたことを忘れるんだろうなきっと。

続きを読む

python3 ディクショナリ型の要素アクセスで、階層がある要素のkeyerrorを回避する方法

例えば、下記のようなネスト(階層)があるディクショナリ型の一部要素を参照しようとしていたのですが

(略)
    "datePublished": "2018-10-11",
    "byArtist": {
        "@type": "MusicGroup",
        "url": "https://yyyyy.zzzzzz/us/artist/abcdefg-gambino/466842536",
        "name": "Childish Gambino"
    }
}

このnameの要素にアクセスする場合、

_Artist = data['byArtist']['name']

と書いていたのですが、ものによって、このname自体がそもそもないものもありまして、KeyErrorが発生し、処理が途中でこけてしまうことがあったのですが、get関数であれば回避できますよ!って、こちらを参考にさせていただき(リンク失礼します)

tomoprog.hatenablog.com

ふむ、なるほどなるほどと思いつつ、あれ?階層(ネスト)がある場合、getでどう表現すればいいんだっけ?というのがわからず、それを回避した(厳密に言うと、詳しい人に聞いた)方法をメモします

前置き長くてすみません

続きを読む

route53 ドメイン移管とDNS変更は意味違うよって話(お名前comから、route53にDNS変更をする)

f:id:hit10231023:20180921202021p:plain

たまにしかやらない DNS変更作業、いざやろうとすると、あれ?どうするんだっけ?ってなりませんか?少なくとも私はそうなりました。 今回、お名前comでドメインを登録したのですが、DNSは、aws route53のほうが管理しやすいので、切り替えようと考えました。

そして、調べて実施したのが、

お名前comからroute53のドメイン移管(ドメインレジストラ移管)

でした。完全に舵を取り違えた感じです(汗)

そしてそもそもの認識違いの発端。。。

ご指摘通り、DNS移管という、謎キーワードを、脳内で作成しまったからであります。

DNS移管ではなく、DNS変更です(汗)

この間違えを踏まえ、メモがわりに記事を掲載しようと思った次第でありまして。。

内容は、お名前comのDNSをroute53に切り替えた話です

続きを読む

いまさらだけど、ltsvが超便利!

f:id:hit10231023:20180918181949p:plain

はじめltsvってapacheのモジュールかと思ってましたら・・そうじゃなくって、単純にLogFormatをラベル付きのログを出力する形式ってだけなんです。 でも、また、これが便利、たとえば、access.log等は、標準ではラベルが入っていないため、大量にある場合、若干みづらいですよね。これがltsvであれば、ぐっと見やすくなります。

ltsv.org

実際に試して見ましたが、ltsvってとっても便利!っていう話と、例として、apacheでの設定を中心で、おまけでnginxではどのように設定するのかなんていうのを書いていきます

続きを読む

MySQL HyperDB + Keepalivedを利用した、wordpress の負荷分散

keepalived

当記事、2012年に書いた記事になりますので、hyperdbがあるかないのかもわかりませんが、当方で活用する案件が発生しましたので、再アップしました。

思っていたより簡単にできた、そして結果からいいますと、思っていたよりパフォーマンスがよく無かった記憶があるのですが、こちらで検証したチープな環境だったからでしょう。。。きっと

表題の通り、wordpressのデータベースを、MySQL レプリケーションを駆使して負荷分散する際に活用できるプラグインです。それプラスといってはなんですが、KeepAlived(LVS)を間にはさんで、スケールアウトしやすい構成にしていました、以下の構成図になります。

続きを読む

MySQLでいいね!(LIKE)機能のDB設計をしてみた!

f:id:hit10231023:20160517120005j:plain

いいねってなに?

FACEBOOKですと、いいね、 Twitterだと♥のあれです。エンゲージメント率を高めるばかりではなく、記事の拡散にも効果を発揮しますよね。また、サービス運営者視点で話すと、話題が見つけやすくなりますよね。 ってなわけで、今度はいいね。のテーブル設計をどうするか?というのは試してみたいと思います

続きを読む

mysql 文字列結合のconcat関数は||(パイプ)でスマートに書こう!

MySQLおよび、MariaDBでの文字列結合関数といえばCONCAT(コンキャット)です。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数

文字列結合にいちいちconcatなんていう関数を使うのはめんどくさい、且つわけがわからなくなるので、パイプ(||)ショートカットでconcatと同様の操作がおこなえるように変更するtipsです

ビッグデータ分析・活用のためのSQLレシピ

続きを読む

MySQL SQLとbashヒアドキュメントをうまく使いこなそう!!

MySQLとヒアドキュメントをうまく使いこなされば、さくっとSQLをファイルを作ることができます。はじめは戸惑いますが慣れれば簡単です。数百回はやったかも(^^;) ヒアドキュメント(heredocument)自体は、MySQLとはまったく関係のない話、そもそもbashではありますが、MySQLbashヒアドキュメントの相性は大変良いので、この機会に覚えておいたほうが良いかもしれません。 また、ヒアドキュメントを有効に活用できるようになれば、プログラムを作らなくても、シェルスクリプトだけで、バッチ処理を作ることも可能になり、なんにせよ、高速です!(プログラムが遅いっていっているわけではありませんのでそのは誤解しないでください)

続きを読む