Sui’s blog

仕事関係のことや趣味に関すること、ふと思ったことを書いていこうと思います。

MySQLサーバのディスク容量が少なくなった時に確認する項目

はじめに

担当しているシステムのMySQLサーバのディスク容量がそろそろ一杯になりそう。
(ちなみにMySQLのverは5.7)
良い機会なので、DBサーバでディスク容量の問題に直面した場合にチェックすべきことなどをまとめておこうと思う。

DBサーバでディスク容量の問題に直面した場合にチェックすべきこと

  1. サービスで使っているデータベースのデータサイズを確認する。
  2. バイナリログのサイズを確認する。

サービスで使っているデータベースのデータサイズを確認する。

データベースのディスク使用状況確認用SQL

SELECT  
    FORMAT(SUM(data_length + index_length + data_free), 0)
FROM 
    information_schema.tables
WHERE
    table_schema=database();

テーブル毎のディスク使用状況確認用SQL

SELECT  
    table_name
    , engine
    , FORMAT(table_rows, 0)     AS table_rows
    , FORMAT(avg_row_length, 0) AS avg_row_length
    , FORMAT(data_length, 0)    AS data_Byte
    , FORMAT(index_length, 0)   AS index_Byte
    , FORMAT(data_free, 0)      AS data_free_Byte
    , FORMAT((data_length + index_length + data_free), 0) AS all_Byte
FROM 
    information_schema.tables
WHERE
    table_schema=database()
ORDER BY
    all_Byte DESC;

各カラムが何を示しているかはMySQLのリファレンスを参照してください。
MySQLリファレンス 13.7.5.37 SHOW TABLE STATUS 構文

data_free(割り当てられているが、使用されていないバイト数)を開放するSQL

OPTIMIZE TABLE table_name;

本番環境でいきなりこのSQLを実行するのは避けるべき。
STG環境でリハーサルしてどれくらい時間がかかるかとか、DBサーバメモリは大丈夫かとかサービスに影響を及ぼさないかとかをしっかり検証した方がいいと思う。

バイナリログのサイズを確認する。

確認用SQL

SHOW BINARY LOGS;

バイナリログを消すためのSQL

PURGE BINARY LOGS TO 'xxx';

MySQLのリファレンスによると、バイナリログには下記2つの重要な目的がある。

レプリケーションについて、マスターレプリケーションサーバー上のバイナリログは、スレーブサーバーに送信されるデータ変更のレコードを提供します。マスターサーバーは、そのバイナリログに格納されているイベントをそのスレーブに送信し、スレーブはこれらのイベントを実行して、マスター上で実行されたものと同じデータ変更を実行します。
・ある特定のデータリカバリ操作には、バイナリログの使用が必要です。バックアップがリストアされたあと、バックアップが実行されたあとに記録されたバイナリログ内のイベントが再実行されます。これらのイベントは、データベースをバックアップのポイントから最新の状態に持って行きます。

MySQLリファレンス 5.2.4 バイナリログ

そのため、削除に関しては慎重に判断しましょう。

TOEIC IPオンライン受験後の感想と今後の勉強メニューに関して (2021年3月編)

話のネタは何?

TOEIC IPオンラインを今日(2021/3/26)受験した。
目標の800点を達成することは今回も出来なかった。
受験時の感想を忘れないように今のうちに振り返っておこうと思う。

手ごたえがあったもの

  • リスニング

    • Part3
    • Part4
  • リーディング

    • Part7 シングルパッセージ

Part3、Part4に関してはかなり手ごたえがあった。

手ごたえがなかったもの

  • リスニング

    • Part2
  • リーディング

    • Part6
    • Part7 マルチプルパッセージ

まずPart2。かなり間違っていると思う。リスニングで400点台後半をとるとリーディングがかなり楽になるので是が非でもここで取りこぼさないようにしたい。
次にリーディング。相変わらず読むのが遅いので時間が足りなくなって最後の数問が塗り絵になってしまう。読む練習と解く練習をバランスよくやって地道に力をつけていくしかないかな?

今後の学習メニューをどうしていくか

仕事が終わって晩ご飯を食べて風呂に入った後に1h - 1.5hくらい勉強していて、
今日リスニングの勉強をしたら次の日はリーディングの勉強をするという感じで交互に勉強している。
1日の分量はリスニングだと

  • Part 1 : 1問
  • Part 2 : 5問
  • Part 3 : 2問
  • Part 4 : 2問

リーディングだと

  • Part 5 : 5問
  • Part 6 : 1問
  • Part 7 : 2問

こんな感じ。今回色々と感じることがあったので、勉強のやり方を少し変えてみようと思う。
勉強する内容のローテーションをリスニングの日 -> リーディングの日 -> ひたすら音読の日という風に変えて各日の勉強メニューを下記のように変えてみる。

リスニングの日

  • Part 2 : 10問
  • Part 3 : 2問
  • Part 4 : 2問

リーディングの日

  • Part 5 : 10問 (丸付けの後に精読の練習)
  • Part 6 : 1問
  • Part 7 : 1問 (マルチプルパッセージで解く練習をする)

ひたすら音読の日

  • リスニングの日に解いたPart3とPart4の問題の音読
  • リーディングの日に解いたPart6とPart7の問題の音読
  • 金フレScore860レベル以上のフレーズ

しばらくはこれでやってみようと思う。

PHPの自作パッケージをComposerを使ってインストールするにはどうすればいいのか?

はじめに

PHPに関する話。
いつもComposerを使ってPHPのパッケージをインストールしているけど、何でComposerでインストールできるんだろう?
パッケージはどこにどうやって登録されているんだろう?
こんなことをふと思った。
調べてみるとPHPパッケージを登録するサイトがあり、そこに登録すればComposerでインストール可能になるらしい。
この投稿はそれを調べた時のメモ。

PHPのパッケージがComposerでインストール可能になるまでのStep

  1. PHPパッケージを作る
  2. 作ったPHPパッケージをPackagistというサイトに登録する
  3. Packagist登録後にComposerを使いインストールしてみる

Step1 公開したいPHPパッケージを作る

ディレクトリ構成

まずはPHPパッケージを作る。
しかし、PHPのパッケージのディレクトリ構成ってどのようにすればいいんだろう?早速迷ってしまった。
調べてみるとphp-pds/skeletonというPHPのパッケージを作る際のテンプレートを見つけた。それによると、

  • bin/
  • config/
  • docs/
  • public/
  • resources/
  • src/
  • tests/
  • .gitignore
  • LICENSE
  • README.md
  • composer.json

という構成が提案されていた。
別にディレクトリ名はこれと完全に一致させる必要はないらしい。

PHPパッケージ内のcomposer.jsonに書く内容

composer.jsonにこのパッケージが何者なのかを書く必要があるのだが、どのフィールドが必須になってくるのか分からなかった。
そこで、composer.jsonに指定できるフィールドを理解するためにComposerのdocumentのThe composer.json Schemaというページを読んだ。
そのページを読む感じだと下記のフィールドあたりが必須になってきそう。

  • name
  • description
  • type
  • license
  • authors
  • require
  • autoload

Step2 作ったPHPパッケージをPackagistというサイトに登録する

パッケージを作成後にPackagistというサイトで登録する。
登録の種類が2種類あって、

  • 公に公開したい場合はpackagist.org

  • プライベートなコードを同僚や顧客と共有したい場合はpackagist.com

に登録する。

例) 公に公開したい場合 packagist.org

packagist.org
赤枠部分にパッケージ登録の方法が記載されている。

Step3 Composerでインストールしてみる

後はComposerを使ってrequireコマンドをたたいてインストールするだけ。

composer require hoge/fuga

おわりに

簡単なパッケージでもいいので1度作って公開してみるといいかも。

2021年の目標

2021年の目標

あけましておめでとうございます。2021年の仕事も始まり今年の目標を立ててみました。 今年は下記の3つを目標にしました。

  • TOEIC800点を達成する。
  • 技術面に関して、自分の得意分野を増やす。
  • 自分のブログや技術ノウハウ共有サービスへの投稿頻度を上げ、さらにそれをしっかりと継続していく。

    TOEIC800点を達成する。

    私は2020年3月まではフリーランスのエンジニアとして仕事をしていたのですが、2020年4月に前々からお世話になっていた会社に入社しました。
    その会社の社員はTOEIC800点以上スコアが求められています。
    入社の時点では800点以上のスコアは義務付けられていないのですが、入社2年以内にこの条件を達成しないといけません。
    入社前のスコアは675点で入社後780点までスコアを伸ばせているので、今年は800点を達成したいです。(というか達成しないといけない。)
    仕事が忙しくてガス抜きしたい時や、体調が悪い時もあると思うので「毎日○時間TOEICの勉強する。」という目標は立てず、「1週間以上TOEICの勉強を空けないようにする。」という目標にしたいと思います。

    技術面に関して、自分の得意分野を増やす。

    今の会社には、

  • マネージャー

  • スペシャリスト

という2つのキャリアパスがあります。上司との面談時にどういうキャリアパスにしたいか少しずつ考えてみてくださいと言われ、自分のキャリアパスを意識し始めました。
マネージャーと話をしてそれを参考にしながら色々考えてみましたが、今後もエンジニアとして仕事を続けていきたいという気持ちの方が強かったので、スペシャリストの道を進もうと年末くらいに決意しました。
今年はスペシャリストの道を進むべく、自分の得意分野の幅を広げたいと考えています。今までは得意な分野をより伸ばす方向に注力していましたが、技術の進歩によってソフトウェアの作り方も多様化していて自分のスキル幅を広げる努力を怠るとエンジニアとして生き残れないのではないかという危機感を強く感じています。

  • 新たにプログラミング言語を1つ身につけること
  • フロントエンド周りの知識の強化
  • インフラ周りの知識の強化

を目指してみようと思います。

自分のブログや技術ノウハウ共有サービスへの投稿頻度を上げ、さらにそれをしっかりと継続していく。

定着させることが目標なので、インプット過多にならないようにブログやQiitaなどで定期的に情報を発信しアウトプットしていこうと思います。
毎週は難しいかもしれないが、3週間に1記事くらいはブログに投稿していきたいと考えているので、まずは趣味でも何でもいいので身近なテーマで投稿を続けてみてアウトプットの癖をつけていこうかな。