データベース
お仕事はPC関連です。でも、小さな会社なので自分の職業をどう言っていいか迷います。技術職というなら確かにそれですが、もっと細かい分類は困ります。前まではシステムエンジニア(SE)といえばいいだろうと思っていたけど、なんか最近はそれも違うのかなぁ…
現在運用しているサービスの表示が遅いということで、MySQLのメモリの割り当てのチューニングをしてみようと思った。my.cnfでいろいろいじってみたが、どうにも設定が割り当てられるメモリの限界を越えているようで、サービスで何も表示されなくなってしまう…
仕事関係で自己結合を使ったのだけど、えらいことにしてしまった。時間かかりまくっても結果がでなかった。 クエリをよく見て考えると、同じレコード同士を結合しているので、最低でも元々のテーブルのレコード数はある。せめて、同じプライマリキーは結合し…
仕事で久しぶりにSQLを書いた。1つの表で、同じグループのものがいくつあるか調べるものだった。すぐに、GROUP BY句を使うことは思い浮かんだし、Aというグループのものがいくつあって、Bというグループがいくつあってとグループの数だけSELECT文を発行する…
MySQLの設定ファイルをいじったり確認したりすることが増えてきた。そして、サイトで検索することも多くなってきた。ここで設定ファイル名が、my.cnfとmy.iniと2種類ある。 my.cnfはUNIX系でmy.iniはWindowsの場合のようだ。
昨日でていたphpmyadminでの。#2002 - Can't connect to local MySQL server through socket '/tmp/mysql.sock'というエラーはやっぱりmysqlの再起動で直った。でも、なんでmysqlが落ちたのかよくわからない。 エラーログを見ようと思ったのだが、エラーログ…
innoDBのファイル直接コピーにとりかかろうとした。事務所のサーバは、クローン動かしているので、まずはそれを止めて、innoDBテーブルに書き込みを止める。その後、show innodb statusでログファイルからテーブルに全部書き込まれたかを確認してからmysqlを…
mysqlのinnoDBのオプションのinnodb_file_per_tableは、システムのパフォーマンスが落ちるという記事を発見。本来はそんなに落ちないらしいし、この人がどの程度のシステムなのか分からない。多分検索と挿入パフォーマンスが落ちるのかも。でも、メンテナン…
完璧なバックアップはmysqldumpということから、まずは念のためにmysqldumpをしてから、ディレクトリをコピーする方法を試そうと思っていた。しかし、2日過ぎて、何の念のためかわからなくなった。ディレクトリの直接コピーで元のデータが壊れることなんか…
バックアップを取ったとして、それを活用しないといけない。とりあえず単語説明。 リストアは、バックアップをとった時点の状態に戻すこと。リカバリは、障害直前の時点まで戻すこと。
結論を先にいうと、/var/lib/mysqlということです。 自分のPC内ではすぐに見つかったテーブルごとのファイルや、ibdataなどだったのだけど、仕事用のサーバでは見つからない。僕のPCは、windowsだから分かりやすい位置にあったのだろうか。普通にmysqlディレ…
バックアップに関わる実験の1つ。 現在僕のPCには、MySQL6が入っている。恥ずかしながらほとんど使われていないので、innoDBのibdataファイルの初期化とib_logfile0とib_logfile1がどうなるかを知ろうと思った。 ibdataにはinnoDBテーブルのデータとインデ…
ファイルの直接コピーでバックアップをとろうとしてきたのだけど、このファイルはバイナリデータで壊れてしまうことがあるらしい。このために、mysqldumpでSQL文を吐き出しておいたほうがいいらしい。バイナリデータが壊れても、SQL文のように人間がみて破損…
innoDBでのバックアップについて調べているのだけど、MyISAMの簡単さがすごくうらやましい。マスター/スレーブのときにテーブルのエンジンを変えてやらないといけない場合もあるという記事を見つけた。そこから、前にもちょっと考えていた1つの考えを実行う…
innoDBでは、テーブルの構造はdataディレクトリ内のそれぞれのデータベースのディレクトリ内に、テーブル名.frmというファイルで入っている。データやインデックスなどは、全データベースの全innoDBテーブルのデータがdataディレクトリのibdataというファイ…
いつも同じ順番で表示されるとつまらなかったり、必要上順番がランダムであってほしいことがある。そんな時に使うのが、ORDER BY RAND()です。 SELECT * FROM テーブル名 ORDER BY RAND() これであるテーブルのレコードが全部ランダムで表示される。でも、普…
そもそもバックアップするときの状態が2種類ある。オンライン(ホット)とオフライン(コールド)の状態でやり方が大きく変わってくる。 オンラインというのは、サーバが起動している状態のままバックアップをとること。サービスの運用停止ができない場合に…
MySQLのバックアップ方法は、大きく分けて専用コマンドを使う方法とファイルを直接コピーをする方法がある。 とりあえずコマンドについてだけメモ。 コマンドは3種類あり手軽さの順にいうと、mysqlsnapshot>mysqlhotcopy>mysqldumpになっている。しかし、my…
debianにMySQLをインストールしてみたので、一応経過を残しておく。debianのインストールはCDから行い、他の部分も多くは同僚にやってもらった。MySQLのインストール部分もやってもらったが、その前に一応手順を自分で調べて、やってもらった部分も見ていた…
GRANT文というのは、権限を与えるという非常に強力な命令です。もしも、間違えて権限を与えてしまってDROP DATABASE データベース名;など使われたなんてことが起こると、目も当てられません。だから、GRANT文は慎重に使い、ユーザ権限は必要なものしか与えな…
GRANT文はまだ1度も使ったことがありません。phpMyAdminでも、サポートしているかどうも謎でした。さらにいうと、他の人も使うということを想定していなかったので、全部rootでログインするという感じでした。 今回より、SQLのプログラムコードの部分だけ色…
SQLのDDL(Data Definition Language:データ定義)とDML(Data Manipuration Language:データ操作)は、前に勉強したことがあるのだけど、それはphpMyAdmin上からだったので、コマンドプロンプトから実行してみる。今回はDDLの中のCREATE、つまり作成の部分…
いろいろやる前に、データベースの状態の確認。 まずはログインしてから、 mysql>status これをすると、バージョンやデフォルトの文字コード、MySQLサービスを起動してからの時間、現在どのユーザーなどの情報が分かる。ポートはMySQLは3306。 続いて、元々…
僕のPCでは、OS起動時にMySQLが自動で起動するようになっている。そして、手動でMySQLの起動、停止をする時は、windowsのサービスの管理から起動などをしていた。コマンドラインからもサービスの開始などをできるようなので、ついでに勉強しておく。 練習の…
今更ながらデータベースの本読むより、もっと実際にデータベースをいじらないといけないことに気づいた。というわけで、いろいろやってみる。phpMyAdminからではなく、コマンドプロンプトからいろいろやっていこうと思う。 MySQLはバージョン6をすでにイン…
オブジェクト指向データベースでは、SQLは使えない。なぜかというとオブジェクト指向データベースには、計算完全性が必要だから。完全計算必要性とは、一般のプログラミング言語と同様の表現能力が必要らしい。 時代が移行していけば、SQLが使えなくなるのも…
ロケーション透過…利用者が表やビューなどの位置や移動先を意識しないで扱えること。 フラグメンテーション透過…1つの表を行や列で分割し各サイトに保持していても、利用者がこれを意識しないで1つの表として扱えること。 レプリケーション透過…検索時や更…
トランザクション処理で、コミットもロールバックもしていない状態を、コミット待ち状態として、セキュア状態という。ロールバックはアボートという。 オープンソースデータベースのシェアは、日本ではMySQL VS PostgreSQL という構図だけど、世界的にはMySQ…
高速な検索処理のためには、インデックスが必要。用途に応じて適切なデータ項目を設定する。 CREATE INDEX インデックス名 on テーブル名(カラム名) 上記のような形でインデックスをつけることができる。しかし、インデックスには何種類かあるのだけど、上記…
データベース設計要件として、物理要件と運用要件がある。 物理要件とは、データベースファイルの大きさ、更新ログファイルの大きさ、ファイルの成長性など。データの初期量や将来性を考えないといけない。 運用要件は、スループット、レスポンスタイム、バ…