Database JUNKY

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

IPhone アプリ: SSLエラーが発生してから対応したまでの話

f:id:hit10231023:20160526122842j:plain

本日IPhoneアプリケーションエンジニアさんから以下のようなエラーが出て、ファイルがダウンロードできなくなったという連絡を受けました

エラーログ内容

長いので改行しています

2016-05-25 17:56:45.398 TESTAPP[719:391253] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
2016-05-25 17:56:45.422 TESTAPP[719:391073] [Error] GET '(null)' (0) [nan s]: 
Error Domain=NSURLErrorDomain Code=-1200 "SSLエラーが起きたため、サーバへのセキュリティ保護された接続を確立できません。" 
UserInfo={_kCFStreamErrorCodeKey=-9801, NSLocalizedRecoverySuggestion=それでもサーバに接続しますか?, 
NSUnderlyingError=0x15f0f2930 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" 
UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9801, 
_kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9801}}, 
NSLocalizedDescription=SSLエラーが起きたため、サーバへのセキュリティ保護された接続を確立できません。, 
NSErrorFailingURLKey=https://cdn.sslsitetesttest.com/files/abc.mp4, 
NSErrorFailingURLStringKey=https://cdn.sslsitetesttest.com/files/abc.mp4, 
_kCFStreamErrorDomainKey=3}

特に、こちらのnginxの設定は変更していないし、アプリケーションの問題なんじゃなの?なんて疑いつつ、調査を開始することしました。

hit.hateblo.jp

nginx実践入門 (WEB+DB PRESS plus)

nginx実践入門 (WEB+DB PRESS plus)

食べる!SSL! ―HTTPS環境構築から始めるSSL入門

食べる!SSL! ―HTTPS環境構築から始めるSSL入門

OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―

OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―

続きを読む

MySQLのrootアカウントが消えてしまった!!そんなときの復旧手順

f:id:hit10231023:20160523181920j:plain

何が起きたのかさっぱりわからないのですが、MySQL(MariaDBのパスワードがrootから何から消えてしまった。。 なぜ消えたのかは置いておいて、とりあえず、現状復帰しないことには、だーれも接続できない状態が続いてしまう・・これはまずい。

そんな場合のrootが消えた、もしくはrootのパスワードを忘れた場合の --skip-grant-tableオプションを利用した復帰方法をまとめました。mysqlとかmariadbのrootのパスワードを忘れたという対応事例は探すとあるのですが、 アカウントが丸ごと変わってしまったといい事例はあまりないのでメモ代わりに残しておきます。ちなみに今回、MariaDBでの話ですが、対応方法は、MySQLも同じかと思いますので、流用できるかと思います。

続きを読む

DBが遅い!そんな時・・MySQL スロークエリーからの索引チューニング〜 mysqldumpslow

f:id:hit10231023:20180309104332j:plain

MySQL/MariaDBでのパフォーマンス低下一番の理由がスロークエリーです。MySQLでサービスを展開しているデータベースやさんって、例外なくここをきにするのではないかな?と思います。そしてスロークエリーが発生した場合の一番の対策は、適切な索引(INDEX)を設定という部分になると思います。たぶんですが、ディスクをSSDにすればー。とか、CPUのクロックをあげればとか、そもそもこのサーバでは古いとか・・・の前にまず索引のチューニングをするのが先って感じです

ここでは、

  • スロークエリをログファイルとして出力させるためのMySQL (MariaDB)の設定方法 と
  • 出力されたスロークエリを集計するmysqldumpslow ユーティリティ について説明したいと思います

ここでは、遅いクエリーをどう改善するかについての説明は割愛します。1つの例としてのチューニングについては、

hit.hateblo.jp

をご参照ください。

続きを読む

画像情報テーブルの作成 ~ソーシャルサービス系のDB構築

f:id:hit10231023:20160519173030j:plain

ソーシャルサービスにおいて、一番大切な部分はサービスの軸はなんなのか?です。instagramだったら写真ですよね。youtubeだったら、動画ですよね?facebooktwitterだったら・・なんでしょう(笑)

すべてのサービスにおいて、大切なのはコンセプトです

\例えば、東京⇔大阪[片道]2,800円~/
高速バス・夜行バスの予約は【ウィラートラベル】

どんなに洗練されたプログラムであっても、

どんなにすぐれたデータベースであっても

コンセプトがしっかりしていなければ、まったく意味がなく、さみしいサービスができちゃう危険性があります。

ただし、ここでは、サービスについて説明したいわけではないです。すみません

今回は、

画像を共有するソーシャル

みたいのをサンプルにして、考えてみようと思います

和牛にこだわった最高級ハンバーグを贈り物に

続きを読む

ソーシャルサービス系のデータベースを構築する

f:id:hit10231023:20160514015145j:plain

私、データベースエンジニアです

iPad Pro Wi-Fiモデル 128GB ML0R2J/A ゴールド(iOS) Kindle Voyage Wi-Fi、キャンペーン情報つきモデル、電子書籍リーダーKYOCERA au Qua tab KYT31 WhiteHuawei docomo dtab Compact d-02H Silver

データベースエンジニアとは

仕事を進める上で、多数の別部門との協力が必須となるデータベースエンジニアには、高いコミュニケーション能力が求められます。また、物事を論理的に考えることが好きな方もデータベースエンジニアに適性があります。そして、ビッグデータ時代に通用するよう、データを戦略に活かすためにビジネス全体を俯瞰して見る能力や利益感覚も大切です。

昨今データベースエンジニアを専門で募集している企業って多いですよね。 かくいう私も、データベースを始めてから、もうはや15年くらい、さまざまな企業でやらしていただいております。プログラム(コード)とか書いていた時期もあるのですが、コードの世界って数年で目まぐるしく進化しており、私にとっては都合の悪い形で、ついていけない世界になりました。そこで、私は、今後エンジニアとして生き抜く手段はと考えた時に、データベースにいきついたわけですが、データベースを選択した理由は、

  • データベースは、製品自体は変化するものの、基礎的な部分は数十年変わっていない

  • データベースは、INPUT / OUTPUT の開発に集中でき、イメージが湧きやすい

  • データベースは、すべてのサービスのコアなので、企業にとって最重要なポジション

続きを読む

ソーシャルサービス系のデータベースを構築する~ ユーザー情報編

ユーザー情報テーブルを作成してみよう

今回、どんなサービス、およびシステムでもありそうなユーザーマスタテーブルを設計/構築してみたいと思います ただ、テーブルを作る、登録しただけですと、ちょっとつまらないので今回は、ダイナミックカラムと、PASSWORD関数を利用してみようと思います

f:id:hit10231023:20160510112622p:plain

キングジム パスワードマネージャー  ミルパス PW10 ブラック

キングジム パスワードマネージャー ミルパス PW10 ブラック

Kindle Paperwhite Wi-Fi、ブラック

続きを読む

ソーシャルサービス系のデータベースを構築する~データベースの作成

データベースを作成する

まず、ソーシャルサービス系のデータベースといってもデータベースという大きな鉢がないとどうしようもならないため、データベースの作成をする必要があります。 データベースの作成といっても簡単で、ほんと、数秒で作成が終わっちゃいます!!!! 文字コードの部分だけきにすればいいかな?と思いつつ現在のデフォルトは、utf-8なので きっとそれも気にしなくてもいいかもしれません

f:id:hit10231023:20180309104332j:plain

コマンドとしては、CREATE DATABASE を利用します

Mariadb Essentials 実践! CentOS 7 サーバー徹底構築

続きを読む

フォロー/フォロワーの構築 ~ソーシャル系のDBを構築する

フォロー/フォロワーのテーブル設計

f:id:hit10231023:20180309104332j:plain

f:id:hit10231023:20160517190757j:plain

ソーシャルネットワーク系のデータベースでフォロー/フォロワーってどんなしくみで設計しているの?なんていうのを中心にまとめてみました

NURO光キャンペーン ネットのみでも必ず3万円が貰える!

有効な暇つぶしの方法とは。。

続きを読む

MySQL スキーマ内に存在する全ての索引を一括で抽出するSQL

mysql でテーブルの索引がどう設定されているのか知りたいときがあると思うのですが。その場合、

mysql>
show index from TABLE_NAME;

で確認できます

でわ、スキーマ内の全てのテーブルの索引を抜き出したい場合はどうするか? というわけでinformation_schemaを利用して対象データベースに登録されている全ての索引を一括で抽出するSQLを考えてみました。 索引の情報は、information_schema.STATISTICSに格納されているらしく、以下のSQLで確認できました。

f:id:hit10231023:20180309104332j:plain

続きを読む

GROUP_CONCATを利用して、列名を列挙したSQLを生成する

MYSQLには、GROUP_CONCATというすばらしい関数があるのですが、ような複数のレコードのとある値を、一行にまとめるということができる関数で、そりゃーもう便利です!!今回はこのGROUP_CONCATを利用して、SQLからSQLを生成するなんていうサンプルを作ってみました

f:id:hit10231023:20180309104332j:plain

続きを読む

指定ディレクトリ内にあるテキストファイルの特定の文字列を一括で更新

指定ディレクトリ内にあるテキストファイルの特定の文字列を一括で更新するワンライナーです。 当該コマンドは、サブディレクトリの特定文字列も置き換えます。

f:id:hit10231023:20160510124713p:plain

grep -lr 変更前文字列 * | xargs sed -i 's/変更前文字列/変更後文字列/g'

以上です。たとえば、shell内に記載している、SQLのテーブル名を一括変更するのに重宝するかもしれないし、重宝しないかもしれません

grep -lr TABLE_A * | xargs sed -i 's/TABLE_A/TABLE_V/g'

当該コマンドを実行すると、ざっくり、既存のファイルを置き換えるので、作業前、あらかじめバックアップしておいたほうがいいかもしれませんね。

MySQL:レプリケーションエラーをスキップする

日々の運用の中で、レプリケーションエラーが発生した場合、原因が分かっているものは、とっととスキップさせて先に進めたいですよね? そんなときには、SQL_SLAVE_SKIP_COUNTERを設定することでレプリケーションのエラーをスキップすることができます

Fire TV Stick

Fire TV Stick

MariaDB&MySQL全機能バイブル

MariaDB&MySQL全機能バイブル

Mariadb Essentials

Mariadb Essentials

mysql>
STOP SLAVE ; 
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
SELECT SLEEP(1); 
START SLAVE; 
SHOW SLAVE STATUS\G

一方、MariaDB 10.X でのマルチソースレプリケーション環境下でのエラースキップの場合は、以下のような感じで行うことができます

mysql>
SET @@default_master_connection='<対象レプリケーション名>'; 
STOP SLAVE; 
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
SELECT SLEEP(1); START SLAVE; 
SHOW SLAVE STATUS\G

以上、そんな感じで

f:id:hit10231023:20160510153222j:plain

SQLだけで、メールアドレスの@以前の文字を置き換える

SQLって奥が深いです。SQLだけで、ほぼデータの加工が行えます。 今回はメールアドレスをマスキングかけるというのを試してみたいと思います

f:id:hit10231023:20160510153145p:plain

続きを読む