サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
sawara.me
Windows 10 Anniversary Updateが配信開始されたので、早速アップデートしてBash on Ubuntu on WindowsでLAMP開発環境を構築してみました。 Windows 10 Anniversary Updateをインストール 普通のWindoows Updateでは更新されなかったので、下記ページよりダウンロードしてインストールします。 https://support.microsoft.com/ja-jp/help/12387/windows-10-update-history?ocid=update_setting_client こちらの「Anniversary Updateを入手する」ボタンからインストールできます。 Bash on Ubuntu on Windowsを有効にする 「Windowsの機能の有効化または無効化」から「Windows
さくらのVPSを使っています。 さくらのVPSだとデフォルトでiptablesがフルオープンになっているらしいという話なので、これはまずいのではと思い、改めてiptablesについて勉強したことをまとめてみました。 環境:CentOS 6.4 iptablesとは iptablesとはパケットフィルタリングやNAT(ネットワークアドレス変換)の機能を持ち、ファイアウォールやルータの機能として利用されます。 iptablesはテーブルにチェインを定義して構成します。 テーブルはフィルタリングの対象を示し、チェインはフィルタリングを行う実行条件を示します。 テーブル 機能
information_schemaデータベースについてリファレンスマニュアルの抜粋。 INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges. Other terms that are sometimes used for this information are data dictionary and system catalog. INFORMATION_SCHEMAは、データベース・テーブルの名前、カラムのデータ型やアクセス権限といったMySQLサーバーの情報を持ったデータベースの
MySQLのユーザーを権限つけて運用できてますか。rootのパスワード変えただけの設定でサービス稼働してないですか。ユーザーにちゃんと権限を付与し運用すればサービスのセキュリティ向上にも繋がります。 今回はMySQLのユーザーの運用方法について改めてまとめてみました。 MySQLのユーザーの概念 ここでいう「MySQLのユーザー」とはMySQLサーバーからクライアント認証の為に使用されるユーザーのことです。以下「ユーザー」と表記します。 ユーザーはユーザー名とホスト名(IPアドレス)で管理され、ユーザー名が同じでもホスト名が違えば別のユーザーとして扱われます。また、ユーザーには「データベースの所有者」という概念はなく、与えられた権限によってデータベースやテーブルに対して操作が限定されるようになっています。 ユーザーの情報はmysqlデータベース(スキーマ)の中の権限テーブルに保存されていま
なんか日付け型のカラムにインデックスをつけようと思ったんだけど、これってほんとに有効なの?って思ったので、改めて検証して見たんだよという話からの気付き。 皆これ当たり前の様に知っているのかなぁ。少なからず僕は改めて気づいたのでメモとして。 前提条件 MySQL5.6 以下のテーブルを検証用に用意します。検証するデータ型はTIMESTAMPとDATETIMEです。 [sql] CREATE TABLE test (c1 INT NOT NULL AUTO_INCREMENT, c2 TIMESTAMP, c3 DATETIME, PRIMARY KEY(c1), KEY (c2), KEY (c3)) ENGINE InnoDB; INSERT INTO test (c2, c3) VALUES (‘2014-01-01 00:00:00’, ‘2014-01-01 00:00:00’),
「トランザクション分離レベル」って今まで聞いたことはあったんだけど、なんのこっちゃわからんかったし、実用面で運用中に気にすることもなかったし、けど知らないままなのもなんだかなぁ、ってことで改めて調べてみました。 Wikipediaによりますと トランザクション分離レベル (-ぶんり-)または 分離レベル (英: Isolation) とは、データベース管理システム上での一括処理(トランザクション)が複数同時に行われた場合に、どれほどの一貫性、正確性で実行するかを4段階で定義したものである。隔離レベル 、 独立性レベルとも呼ばれる。トランザクションを定義づけるACID特性のうち,I(Isolation; 分離性, 独立性)に関する概念である。 Wikipedia「トランザクション分離レベル」より 重要なのはトランザクションのACID特性のI(Isolation; 分離性, 独立性)に関する概
SNMP(Simple Network Management Protocol)とはネットワーク上の機器を監視・制御するためのプロトコルです。これを使ってMySQLの状態を監視出来るようにします。 SHOW STATUSコマンドなどでリアルタイムな情報は確認できますが、SNMPとMRTGというツールを使って定期的なデータを保存するようにし、グラフ化して情報を見える化します。 サーバー構成 サーバー構成としては、MySQLが稼働しているサーバーにsnmpdをインストールし、もう一台のサーバーからMRTGでMySQLサーバーの状態を監視します。 [code gutter=”false”] server1(CentOS 6.5) +—————+ | 192.168.1.1 | +—————+ | snmpd |<—-+ | mysql | | +—————+ | | server2(CentOS
ちょっと大きなサイズのテーブルをALTER TABLE中に以下のようなエラーが発生しました。 [code] ERROR 1034 (HY000) at line 38: Incorrect key file for table ‘table’; try to repair it [/code] やばっ、テーブル壊れた!?って思ったんですけどテーブルは壊れてませんでした。もう一度リトライしても同じエラーが。。。 なんだこれって思ったので調べてみることに。 オンラインDDLでは一時ファイルがtmpdirに作成される ALTER TABLEした時は元のテーブルと同じ場所にテーブルのコピーが作成され、コピー完了後に一気に置き換えられるって思っていたのですが、オンラインDDL中はどうも具合が違うようです。 ほとんどの場合、ALTER TABLE は元のテーブルの一時コピーを元のテーブルと同じディレク
Evernote今までインストールはしてたんですが、そんな使ってこなかったんですよね。なんでかってあのテキストエディタが使いづらすぎる。 Evernoteのテキストエディタはレイアウト自由自在じゃない WEB CLIPPERとかは便利なんですが、、、 こんなかんじでWEBクリップしたものをちょっと編集しようとしただけでもレイアウトが崩れちゃう。元のようにレイアウトを治そうとどんなに頑張ってもダメだし。。。 あとダブルクォートなんかを入力すると「“(全角)」に勝手に変換されたりするんですよね。これじゃプログラムやコマンドのメモも書き留めておけないですよね。せめてプレーンテキストでマークダウンやHTMLを直接書いたり出来るようにしたい。。。 そんなストレスを感じていたので、Evernoteをそんなに使い込む事はなかったのですが、なんとSublime TextにEvernoteのパッケージがある
会社のブログに寄稿させていただきました。 PHPのセッション情報をデータベース(MySQL)に保存するぜ! こちらの記事ではセッション情報をDBサーバーに保存させて、ロードバランサーで接続するサーバーが切り替わってもセッションが維持される方法について記載しましたが、セッションハイジャックについては言及しておりません。ということで今回はセッションハイジャックを防ぐ方法について紹介します。 セッションハイジャックとはなにか そもそもセッションハイジャックとはなにか。cookieでセッション管理を行うPHPの場合はcookieにセッションIDを保存します。このセッションIDを他のユーザーのものに書き換えてなりすましてしまうのがセッションハイジャックです。cookie情報なんてのはブラウザで簡単に書き換えられてしまいますからね。 セッションハイジャックにおける対策としては大まかに分けて2つの対策、
MySQLクライアント何使ってますか。え?標準のmysqlコンソール使ってない? CUIはちょっと敷居が高いと思っているあなたのために、mysqlコンソールを便利にするためのTipsを紹介します。 1. 表示結果にページャを設定する コンソールが嫌われる一番の理由に、SQLの検索結果が多いと最初の方の結果が流れていって見えなくなってしまうことにあるのではないでしょうか。そして取得フィールドが多いと画面の右端で折り返されてわけわからん状態に。 そんな時は迷わずpagerにlessを指定しましょう。 pager less -S mysqlコンソール上で上記コマンドを実行するとSQLの検索結果をlessで見ることが出来ます。-Sオプションを指定することで右端で折り返されずに綺麗に表示されます。lessの機能そのまま利用できますので、検索とか出来たり便利です。lessを終了する場合にはqを入力しま
MySQL for Excelが便利そうかなぁと思ったので使ってみました。 インストール環境 今回インストールする環境です。 OS:Windows7 Excel 2013 MySQLサーバーもクライアントもインストールされていないので一緒にインストール インストールとセットアップ まずこちらのページより、MySQLのインストールパッケージをダウンロードします。 今回はWEBインストーラーでじゃない、234.7Mのものをダウンロードしました。 「Download」ボタンをクリックするとログインするかどうか聞かれます。「No thanks,..」をクリックすればそのままダウンロードできます。 ダウンロードが完了したらmsiファイルをダブルクリックしてインストーラーを起動します。 「Install MySQL Products」をクリック 「I accept the license terms」
MySQL5.5から統計情報を収集するperformance_schemaというテータベースが利用できるようになりました。そしてMySQL5.6ではperformance_schemaデータベース内にtable_io_waits_summary_by_index_usageというテーブルが追加されていました。 え!?これってもしかしてインテックスの使用状況がわかるんじゃない?って期待が頭をよぎりましたので調べてみました。 検証テーブル作成 今回検証した環境ではtestデータベースが残ってましたので、そこに検証用テーブルを作成しました。 [sql gutter=”false”] mysql> use test Database changed mysql> CREATE TABLE `t1` ( -> `c1` int AUTO_INCREMENT, -> `c2` int, -> `c3`
InnoDBの行の最大長は約8KBらしい。 意外と少ない。。。 運用中のサービスがこんなエラーを吐いていました。。。 [code gutter=”false”] Got error 139 from storage engine [/code] マジですか。これが噂の「InnoDB 8KBの壁」ですか。。。 設計段階であればテーブル縦分割とかテーブル構造自体を変えちゃえ!ってなるかもしれないですが、運用中のサービスですし、できるだけ全体へのインパクトは少なくしたい(アプリケーションは改修したくない)。って時にテーブルのROW_FORMATを変更して対応しましたよ、って話です。 「ROW_FORMAT=DYNAMIC」または「ROW_FORMAT=COMPRESSED」を使おう! そうです、結論から言ってROW_FORMATを変更することで対応したんです。 ROW_FORMATについてMyS
MySQLのイベントスケジューラは事前に登録したスクリプトを自動で実行したり、定期的に実行したりすることができます。 「FLUSH QUERY CACHE」はクエリキャッシュのメモリ領域をデフラグメント化します。クエリキャッシュをデフラグメント化することによってメモリの使用効率を良くすることができます。 両者の機能を使って幸せになろうという話。 イベントスケジューラを有効にする まずイベントスケジューラを使用するにはmy.cnfに以下の様に設定します。 [bash] [mysqld] event-scheduler=ON [/bash] 既にMySQLデーモンを起動中の場合は、mysqlコンソールから以下のように設定することもできます。 [sql] mysql> SET GLOBAL event_scheduler=1; Query OK, 0 rows affected (0.00 se
タイトルのとおりなんですが。 結果、検証後に導入することにはならなかったのですが、せっかく作ったんだしこのまま放置していては忘れてしまいそうなので、一応こちらの方にメモとして残しておきます。 MySQL Clusterとは MySQL Clusterとは非共有システム(シェアードナッシングシステム)でのMySQLデータベースのクラスタ化を可能にします。サーバーを追加することでMySQLデータをスケールアウトすることが可能であり、単一障害点(SPOF)を持たないように構築することで、高可用性のMySQL環境を実現します。 MySQL ClusterはNDBと呼ばれるin-memoryストレージエンジンで標準のMySQLサーバーを統合します。クラスタ化されたデータは、データノードが保持しています。ノードと言うのはMySQL-Clusterの場合プロセスを意味します。 ノードの種類には以下のもの
今回もMySQL勉強ネタ。インプットしたことはアウトプットすることでしっかり自分の頭の中で整理されます。 まだまだアウトプット力が足りないですが、これも訓練、しっかりと継続して自分のものにしていきたいと思います。 「log-bin[=ファイル名]」で出力されるMySQLのバイナリログ。 ログのフォーマットにはMySQL5.1から”行ベース”が追加されましたとのこと。 ふむふむ。。。で、「行ベース」ってなんスか?? よくわからなかったので、調べてみました。 そもそもバイナリログとはなにか バイナリログとは更新クエリを記録するログファイルのことです。 更新クエリをログとして持っておくと何が嬉しいのかって、そのログを使ってデータをリカバリーすることができたり、そのログデータを受け取るようにしてレプリケーション構成を構築できたりします。 バイナリログはmy.cnfに以下の様に記載することで出力され
MySQLではLOCK TABLES文で明示的にテーブルにロックをかけることが出来ます。 で、いつもわからなくなるんですね。READロックとWRITEロックが。 他のスレッドからWRITE不可 他のスレッドからREAD/WRITE不可 さて、どっちがREADロックでどっちがWRITEロックか分かりますか? 単純に考えると 他のスレッドからWRITE不可 → 【WRITEロック】 他のスレッドからREAD/WRITE不可 → 【READロック】 って思うでしょう。普通。いや実はこれ不正解なんです。 「えっ?なんで?」って思いませんか。WRITEを出来なくする(ロックする)から「WRITEロック」、READも出来なくする(ロックする)から「READロック」じゃないのって。 僕だけですかね。 いつも間違えて、あれ?どっちだったけ?ってなって、毎度調べてしまっているので、今回は改めて頭に叩き込むこ
MySQL5.6(正確には5.6.5)よりGTIDという機能がつきました。 GTIDとはその名の通りトランザクションにグローバルなIDが付与されるんですが、これで何が嬉しいのかってマスターのポジションを指定せずともレプリケーションが組めてしまうんですな。 また、新機能のmysqlfailoverはGTIDを利用してフェイルオーバーを実現しているので、これは是非とも試さなければ、ってことで実際に試してみたので、メモとして残して起きます。 MySQLサーバー構成 シンプルにサーバー1(192.168.1.1)をマスターに、シンプルにサーバー2(192.168.1.2)をスレーブとして動作させます。 my.cnf設定 各サーバー以下の様にmy.cnfを設定します。 [bash title=”my.cnf@server1(マスター)”] server-id=1 log-bin=mysql-bin
DBのテーブル設計を行うときにフラグを持つフィールドは、それぞれtinyint(1)とかでフィールドを作って0 or 1を入れるようにしていました。 [sql title=”こんなかんじで”] CREATE TABLE `sample_old` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘ID’, `flg1` tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘フラグ1’, `flg2` tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘フラグ2’, `flg3` tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘フラグ3’, `flg4` tinyint(1) unsig
またもや今回もMySQLネタ。 仕事で使っているMySQLなんですが、知らないことだらけだったので、現在改めて勉強中です。こないだMySQLの資格取ったのもその一環なのですが、受験した直後に配信停止されとる。。。 資格自体が失効になるわけではないですが、情弱っぷりが恥ずかしかとです。 夏頃に5.6の試験が配信予定になっていますので、こちらの取得に向けて全力で頑張ります。 さて、今回はmysqld_multiを利用して1台のサーバー上で2つのmysqlデーモンを起動し、レプリケーション環境を構築してしまおうというものです。 今回の環境はCentOS6.5、MySQLのバージョンは5.1で行いました。 データディレクトリの作成 一つのサーバーに複数のmysqlデーモンを立ち上げますので、それぞれで使用するデータディレクトリの準備します。 [bash] # デーモン1用のディレクトリ作成 mkd
前回の記事でCentOSがMariaDBになっとったっていう話を紹介したのですが、じゃあ、MySQLはインストール出来ないのって聞かれたので、一応こちらでインストールする方法を紹介します。 事前準備 一応事前にMariaDBの何かしらがインストールされていれば削除します。 今回はmariadb-libsが入っていましたので、これをアンインストールします。 [bash] # MariaDBの何かしらがインストールされていないか確認 yum list installed | grep maria # 実行結果 mariadb-libs.x86_64 1:5.5.35-3.el7 @anaconda # アンインストール yum -y remove mariadb-libs [/bash] RPMからインストール 一番よくやる方法です。このブログでもよくこの方法でのインストールを紹介しております
MySQLをアップデートしたのでその手順のメモです。GTIDを使用したレプリケーション環境だったので、マスターアップデート中にスレーブをマスターに昇格させることで、ダウンタイム無しでアップデートを行うことが出来ました。 環境 マスター(192.168.1.2) CentOS6.5 MySQL5.6.17 スレーブ(192.168.1.3) CentOS6.5 MySQL5.6.17 マスター・スレーブ共にMySQLはRPMパッケージからインストールしてます。 また、マスター・スレーブ共にバイナリログを出力するように設定しています。具体的には下記の様にmy.cnfを設定しています。 [code title=”マスター(192.168.1.2)”] [mysqld] server-id=1 log-bin=mysql-bin log-bin-index=mysql-bin binlog-do-
[bash] mysql –help | grep my.cnf [/bash] [code title=”実行結果”] order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf [/code] でわかります。が、これ、読み込まれる優先順位が ~/.my.cnf /etc/my.cnf /etc/mysql/my.cnf ※ MySQL5.1.73 であることに注意しましょう。まあ、/etc/my.cnf以外そんな使わないと思いますが。 もうひとつ注意があります。 「データディレクトリ/my.cnf」は「/etc/my.cnf」よりも優先される。 例えばデータディレクトリが/var/lib/mysql/だった場合、/var/lib/mysql/my.cnfは/etc/my.cn
GitHubにDockerfileをコミットするとDockerHubで自動的にbuildしてくれるらしいので試してみました。 GitHubにリポジトリ作成 まずはGitHub上にリポジトリを作成します。 dockerfile-testというリポジトリを作成してDockerfileを作成しました。至ってシンプル。DockerFileの内容はこんな感じ。 [code] FROM centos MAINTAINER YASUSHI SAWARAME yasushi@sawara.me RUN yum -y groupinstall "Development tools" [/code] DockerHubでGitHubのリポジトリとの紐付け 先ほど作成したリポジトリでDockerHubのリポジトリを作成します。DockerHubの「Add Repository」 → 「Autmated Buil
さくらのVPS上に構築してみた。仮想サーバー上にDockerってアリなんでしょか。ま、とりあえず出来たのでメモ。CentOS6.5です。 Dockerインストール まずDockerをインストールします。外部リポジトリEPELをインストールしなければいけないんですが、さくらのVPSでは既にリポジトリファイルが入ってましたのでパスします。 [bash] ls -l /etc/yum.repos.d/ [/bash] [code gutter=”false”] total 28 -rw-r–r–. 1 root root 1926 Dec 1 2013 CentOS-Base.repo -rw-r–r–. 1 root root 638 Dec 1 2013 CentOS-Debuginfo.repo -rw-r–r–. 1 root root 630 Dec 1 2013 CentOS-Med
過去のエントリーにPHPで==の代わりにstrcmp関数を使うことによる問題点というのを見つけたのですが、いまだに実際のソースコードにstrcmpで文字列比較を行っているパターンをよく見かけます。と、言うかやってます。 え!?俺、思いっきり使ってたよ!俺まさか惰弱って思われてる? と、ふと不安になったのでstrcmpについて考えてみました。 なぜそもそもstrcmpで文字列比較を行うようになったのか。 それはPHPの自動型変換が大きな理由になっています。 // これがtrueになるのは有名な話 var_dump("abc" == 0); var_dump("1abc" == 1); 整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。これらのルールは、 switch 文にも適用されます。 === あるいは !== による
次のページ
このページを最初にブックマークしてみませんか?
『sawara.me – システム開発に関することとか。文系エンジニアのブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く