色々な書き方がありますが、私は以下のように書いてます。というほど書いてないので、必要な時にすっかり忘れるのが現実ですが。。
例えばこんなケースで書いてみます。
とあるテーブルの検索結果が0(ゼロ)件以外だったら、後続の処理を実行する
続きを読む多段的にする必要は実はそんなにないのですが、apacheおよびnginx等のアクセスログ(テーブル)をカテゴリに分けて集計するSQLを作ってみました。
nginxのログをテーブルに格納する方法については、以前、ここにまとめました。(ちょっと古いか。。)
以下、今回のログの形式ですが、上記の内容とは別のものです。
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
やりたいことは、
のアクセス回数をカウントする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 |続きを読む
結果からいいますと、トイレの水が出なくなりました厳密にいうと、タンク内部で水漏れしている気が・・する・・
幸いにも、自宅は、トイレが2つあるので、全く使えない状態というのは避けることはできたのですが、 それでも、今まで2台トイレがあったのに、1台しか使えないということが、どれだけ困るかを実感できました。 このようなケースの場合、どのパーツ名のどの型番のものを購入すればいいのかを、備忘録代わりに残して、同じ症状で同じお悩みがある方に、お役に立てればと思っています
そんでもって結局、今回は止水ダイヤフラム
の交換とあいなりました! そして、意外に安くてびっくり
カクダイ トイレ補修 マルチ ロータンクボールタップ 662-310
とあるデータのクレンジング、名寄せ作業を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のみで実現するにはどうしたらいいってお話です
続きを読む例えば、下記のようなネスト(階層)があるディクショナリ型の一部要素を参照しようとしていたのですが
(略) "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関数であれば回避できますよ!って、こちらを参考にさせていただき(リンク失礼します)
ふむ、なるほどなるほどと思いつつ、あれ?階層(ネスト)がある場合、getでどう表現すればいいんだっけ?というのがわからず、それを回避した(厳密に言うと、詳しい人に聞いた)方法をメモします
前置き長くてすみません
続きを読む
たまにしかやらない DNS変更作業、いざやろうとすると、あれ?どうするんだっけ?ってなりませんか?少なくとも私はそうなりました。 今回、お名前comでドメインを登録したのですが、DNSは、aws route53のほうが管理しやすいので、切り替えようと考えました。
そして、調べて実施したのが、
お名前comからroute53のドメイン移管(ドメインレジストラ移管)
でした。完全に舵を取り違えた感じです(汗)
そしてそもそもの認識違いの発端。。。
ご指摘通り、DNS移管という、謎キーワードを、脳内で作成しまったからであります。
この間違えを踏まえ、メモがわりに記事を掲載しようと思った次第でありまして。。
内容は、お名前comのDNSをroute53に切り替えた話です
続きを読む当記事、2012年に書いた記事になりますので、hyperdbがあるかないのかもわかりませんが、当方で活用する案件が発生しましたので、再アップしました。
思っていたより簡単にできた、そして結果からいいますと、思っていたよりパフォーマンスがよく無かった記憶があるのですが、こちらで検証したチープな環境だったからでしょう。。。きっと
表題の通り、wordpressのデータベースを、MySQL レプリケーションを駆使して負荷分散する際に活用できるプラグインです。それプラスといってはなんですが、KeepAlived(LVS)を間にはさんで、スケールアウトしやすい構成にしていました、以下の構成図になります。
続きを読むMySQLおよび、MariaDBでの文字列結合関数といえばCONCAT(コンキャット)です。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数
文字列結合にいちいちconcatなんていう関数を使うのはめんどくさい、且つわけがわからなくなるので、パイプ(||)ショートカットでconcatと同様の操作がおこなえるように変更するtipsです
続きを読むMySQLとヒアドキュメントをうまく使いこなされば、さくっとSQLをファイルを作ることができます。はじめは戸惑いますが慣れれば簡単です。数百回はやったかも(^^;) ヒアドキュメント(heredocument)自体は、MySQLとはまったく関係のない話、そもそもbashではありますが、MySQLとbashヒアドキュメントの相性は大変良いので、この機会に覚えておいたほうが良いかもしれません。 また、ヒアドキュメントを有効に活用できるようになれば、プログラムを作らなくても、シェルスクリプトだけで、バッチ処理を作ることも可能になり、なんにせよ、高速です!(プログラムが遅いっていっているわけではありませんのでそのは誤解しないでください)
続きを読む
意外と知らなかったです。 root以外のアカウントから、rootに成り代わって実行はいくつかあるんですが、 rootからroot以外のアカウントに成り代わって実行する方法ってどうするんだろう?って
例えばこんなケースです
[root@]# aws ec2 describe-instance-status You must specify a region. You can also configure your region by running "aws configure".
まあ、当然そうなりますよね。aws configureは、ec2-userで設定しているわけなんで笑
このような場合、いままでsudoコマンド特定のユーザーに成り代わって実行していたのですが、amazon linuxおよびcentos等の起動コマンド・起動シェル内では設定しても動いてくれない(汗)
[root@]# sudo -H -u ec2-user aws ec2 describe-instance-status
調べた限りでは、
RedHat系のデフォルト設定では起動時のsudoは許されていないってのが理由らしく、じゃーどうすればいいの?って調べたところ runuserで実行できることがわかりました。
続きを読む
MySQL8.0の話ですので、以前のバージョンの話とはちょっと変わってしまうかもしれませんが、テーブルの作成で、ものすごくしょうもないことでハマってしまいました。
ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes
まず、前提として、索引(インデックス)の最大長は、3072バイトです。ってところから始めます(笑)
これがいけると思っていたところからが地獄の始まり(笑)都合よく、私は、varchar(1024)を1024バイトだと思ってました(汗)
CREATE TABLE `table1` ( `Id` bigint(20) NOT NULL AUTO_INCREMENT, `Url` varchar(1024) NOT NULL, PRIMARY KEY (`Id`), UNIQUE KEY `ix01` (`Url`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; ---------------------------------------- ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes続きを読む