Database JUNKY

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

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ヒアドキュメントの相性は大変良いので、この機会に覚えておいたほうが良いかもしれません。 また、ヒアドキュメントを有効に活用できるようになれば、プログラムを作らなくても、シェルスクリプトだけで、バッチ処理を作ることも可能になり、なんにせよ、高速です!(プログラムが遅いっていっているわけではありませんのでそのは誤解しないでください)

続きを読む

ec2 rootから特定のユーザーに成り代わってシェルやコマンドを実行する(runuser)

f:id:hit10231023:20180912204416p:plain

意外と知らなかったです。 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で実行できることがわかりました。

続きを読む

MySQL 結局、索引の最大長っていくつなの?を考える Specified key was too long; max key length is 3072 bytes

f:id:hit10231023:20180911165611p:plain

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
続きを読む

aws s3の利用料節約を考える:データ転送量を減らす!

f:id:hit10231023:20180911021856j:plain

awsにて、動画共有サイト、画像共有サイトでもそうだと思いますが、ec2インスタンスのコストよりかかるのが、ずばり!転送料です。一部のサービスでは、ec2のインスタンスコストよりデータ転送料金のほうがコストがかかっているという話をよく聞きます

たとえば利用料金。。

f:id:hit10231023:20180910203235j:plain

サービス事業から見ると、大した額ではないかもしれません、しかし、私から見れば、一日でお給料がすっ飛びそうなお値段だと思ってます。

これを、ここまで下げることができました!!

f:id:hit10231023:20180910203258j:plain

今回、どのように、awsの転送料金を下げたかについて説明していきたいと思います

続きを読む

MySQL パーティショニングで高速クエリーを実現!!

f:id:hit10231023:20180911180143p:plain

MySQL(MariaDB)には、レンジパーティションってものがありまして、うーなんでしょ?ある規則にしがったデータをおのおののデータファイルに振り分けてくれるストレージエンジン的なものです。

  • データ領域が分割されるため、大量のデータを処理することによる性能上のボトルネックの発生を抑えられる
  • MyISAMなど、テーブルサイズに上限がある場合でもそれ以上のデータを格納することが可能になる

といった点です。

MySQLでもMariaDBでも、古いバージョンからある機能ではありますが、数百万規模のデータですとSQLの条件によって、読み込む分母のレコード数が少なくなるため、パフォーマンスは向上するわけですね。

続きを読む

MySQL 変数を利用したSQLの記述方法

他のDBはよくしらないですが、MySQL系のSQLSQL文中にユーザー変数を含めることができます。この手法を理解すると、洗練されたSQLを記述することができます。 変数の利用は、SET文を用いる方法と、SELECT ~ INTO を用いる2種類の方法があります

以降、それぞれのケースに合わせた変数の使い方を説明します

続きを読む

これはすごい!mariadb10 でマルチソースレプリケーションでデータベース統合!

MariaDBでマルチソースレプリケーション

私的に待ちに待ったあの機能が追加されました。それは、マルチデータソースレプリケーション、mariadb10.0から実装されるという話は知っておりましたが、ようやく触る機会がきたので試してみようと思います。 余談ではありますが、弊社では、30スキーマはあろうデータベースをこれで一台に集約しておりますので、ちゃんと実績はありますのでご安心を

f:id:hit10231023:20161121171801j:plain

f:id:hit10231023:20180309125620p:plain

続きを読む

aws ec2インスタンス起動時に、自作shellを自動実行する方法

あ、別にawsでなくてもいいのですが、そしてshellでなくても良いのですがw よくあるかどうかまではわかりませんが、アプリケーションを手動で起動して待機させる系統のものって、インスタンスを再起動さける時に、あら。動いてない。。。なんてことがありますよね?まぁ、インスタンスが起動してから、手動で実行すればいいのですが、それも面倒なので、この際、インスタンスが起動したら、自動的にアプリケーションが起動するという設定をしてみようじゃないかと思いメモがてら書いてきます。

今回の例は、pythonは、 api_app.py と app.pyをshellで起動する例(というかメモ)で、説明します。

続きを読む

aws cliコマンドをマスターしてブラウザいらずになろう!

いまさら感はありますが、AWSコンソールは便利ですが。。数が増えると、にっちもさっちもいかなくなるので、コマンドで実行する方法を備忘録代わりにメモします。 ec2インスタンスを停止する、主な理由って私的には、インスタンスタイプの変更をすることで、コストダウンを計るとか、仕事してねー、サーバを洗い出し凍結するとか、そんな時に利用するのですが、 これらを初めはGUIでやっていて、数が増えてくると、後からだんだん面倒になってくるということで、コマンドメモを書いていきます。

ってことで、以前もどこかに書いたような書いていないようなですが・・

続きを読む

bashで選択メニューを出す(入力プロンプト)

よく、コンソールで何か実行する時に、(y/n)とかあるじゃないですか?あれがかっこよくてどうやるのか調べてみました

結果から先にいいますと、read というコマンドを使うっぽいです -pのオプションを付けると、プロンプトのメッセージを自由に設定することが可能です

f:id:hit10231023:20180308234003p:plain

続きを読む

MySQL8.0 : 新しく追加されたJSON関数サンプル

無事、システムもMySQL 8.0化が成功し、じゃあ今後、どう活用していこうと考えた時に、まずやったのが、WITH句なんですが、

hit.hateblo.jp

他にもいっぱい機能がアップされた部分があって、その中で、今回JSONで追加された関数を主に試してみました。

今回は、以下の関数を試してみたいと思います

続きを読む

ec2 t3インスタンスでコストを大幅に下げましょう!

f:id:hit10231023:20180911022902p:plain

ec2でこっそりt3インスタンスでリリースされていました汗 全てではないかと思うのですが、tXXの数値が上がるたびに基本的には、なにかしらの機能アップと、コストのダウンが期待できます。昔のインスタンスのままじゃないと動かないから。。。ってシステムは、今ほとんど。。ない。。とは思うので、この機会に、t2インスタンスを使っている方は、t3インスタンスに切り替えてみてはいかがでしょうか?

規模により、数十万のコスト削減も視野にはいってきます!

Amazon Web Services実践入門 (WEB+DB PRESS plus)

Amazon Web Services実践入門 (WEB+DB PRESS plus)

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載! ] (Software Design plusシリーズ)

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載! ] (Software Design plusシリーズ)

f:id:hit10231023:20180827115357j:plain

続きを読む