Archive for the ‘MySQL’ Category


MySQLでテーブル型を確認する

MySQLで作成済みのテーブル型(ストレージエンジン)を確認するには、以下のコマンドを実行して”engine”列を見る。mysql > SHOW TABLE STATUS FROM db_name;※データベース名を指定する。

MySQLのアップグレード

MySQLのアップグレード時に必要な作業を調べてみたが、いざとなるとズバリ、という内容は見つからないものだ。軽くイラっとしつつも、これでいいだろうか?とまとめてみた。

MySQLのrootパスワードを忘れたら

MySQLのrootパスワードを忘れた場合の対処法はどこにでも書かれているが、いちいち調べるのは面倒だからここにも書いておこう。。と思っていたら、今日さっそく利用した。人生、どのタイミングで何が起きるか分かりません。

MySQLのシンプルユーザアカウント設定

何かとハマる、MySQLユーザアカウント設定。以前の記事「MySQLインストール時のお約束」でもrootパスワードのセットだの匿名ユーザの削除だのごちゃごちゃ書いたが、もっと思いきった方法があるようなので書いておく。

MySQLの起動と停止 – Oracleとの比較

MySQLサーバの起動と停止について。Oracleでは起動状態として、停止、NOMOUNT、MOUNT、OPEN、という段階があるが、MySQLでは停止か起動かのどちらかしかない。

mysqld_multiの実装

mysqld_multiの実装においてやるべきことをまとめてみた。ざっくり言うと、やるべきことは複数のMySQLインスタンス用にOS上でのユーザ作成とディレクトリ作成、my.cnfの設定変更。

mysqldとmysqld_safeの関係

mysqldとmysqld_safeの関係について。mysqld_safeはMySQLを安全に起動するためのプログラム、くらいの認識はあったのだが、では具体的に何がどう安全なの?...と、なると答えに詰まるので、改めて書いておく。

mysqldump実行時に必要な権限

mysqldumpの実行ユーザに与える権限として何を指定すればいいか、あっさり調べてみた。

MySQLレプリケーションにおけるフェイルオーバー

MySQLレプリケーションにおいて、スレーブをマスタとしてフェイルオーバーさせる時にやることをざっくりまとめてみた。マスタでは障害等によりMySQLインスタンスが停止していることが前提。

MySQLのユーザ権限を確認する

MySQLのERROR 1045 (28000): Access denied”エラーはログイン時に限らず、様々な局面で遭遇する。認証が失敗した時だけではなく、コマンドを実行しようとしているMySQL上のユーザに適切な権限が与えられていない場合にもこのエラーになる。

MySQLのユーザアカウント削除とパスワード変更

MySQLのユーザアカウント削除とパスワード変更。基本中の基本ではあるけれど、いざとなるといちいち調べるはめになるので、ここに書いておく。

MySQLコマンド実行時のパスワード

MySQLコマンド実行時のパスワードはオプション-pで指定し、プロンプトから入力しているが、シェルに組み込む時などにオプションで直接パスワードを指定する必要が生じたりする。

MySQLのメモリ設定を追求してみよう

MySQLサーバにおいてMySQLのプロセスがトータルで使用するメモリは、どれくらいに見積もっておけばいいだろうか。参考書やネット上では以下のような計算式が紹介されている。max_connections x [スレッド領域用メモリ合計値] に、[グローバル領域用メモリ合計値]をプラス。

MySQLとネットワークの小ネタ

telnetでの疎通確認やネットワークログインなど、MySQLとネットワークが絡む辺りの小ネタを。

InnoDBデータファイルのサイズを変更するには

MySQLのInnoDBは複数のデータファイルを構成することで巨大なテーブルの構築も可能。しかし当初必要なデータサイズの見当がつかない場合もある。後からファイルを追加したり、サイズを変更したくなったらどうしたらよいか。

InnoDBデータファイルの仕様

MySQLのInnoDBデータファイルの仕様について、覚え書き。InnoDBデータファイルに格納されるものは、InnoDBテーブル、インデックスデータ、データディクショナリ、トランザクションのロールバックのためのデータ領域等である。

InnoDBログとバイナリログの違い

InnoDBログファイルとバイナリログファイルの違いについて。両者の違いは「InnoDBログファイルはクラッシュリカバリ時に使用され、バイナリログファイルはロールフォワードリカバリ時に使用される」と捉えているが、そもそもそれぞれの本質は何かというと、、、

MySQLデータディレクトリ変更時の注意点

MySQLをLinuxにインストールすると、デフォルトのデータディレクトリは/var/lib/mysqlになるものと想定される。これを変更しようとして、ちょっとハマってしまったので記録を。

MySQLのAccess deniedエラー

ごく初歩的なミスで起こる、以下のMySQL接続時エラーについて。ERROR 1045 (28000): Access denied for use ‘user01′@ localhost’ (using password: YES)

クラッシュリカバリとInnoDBログ

InnoDBの重要な機能であるクラッシュリカバリと、それに深い関係があるInnoDBログについて。この辺の仕様がなかなか脳内に定着しないので、書いておく。 InnoDBログは、ロールフォワードリカバリには使用されない。では、InnoDBログの存在意義とは。ひと言でいうと、クラッシュリカバリである。クラッシュリカバリは、電源断など突然の障害が発生した際に、障害直前にコミットされた時点まで回復させる処理をする。MySQLはインスタンス起動時に、InnoDBデータファイルとInnoDBログファイル間に不整合があるかどうかを検出し、不整合があった場合にクラッシュリカバリを自動で行う。(MyISAMテーブルにはこの機能がない)MySQLではロールフォワードリカバリはバイナリログ、クラッシュリカバリではInnoDBログという役割分担がなされているわけだ。このため、もしバイナリログを消失するアクシデントがあった場合は、ロールフォワードリカバリは不要なんである、、、などと言いつつ、実はまだよく分かっていない(汗) ※出典:「現場で使えるMySQL」松信嘉範著 もう少しクラッシュリカバリについて書いておこう。 例えばいくつかのSQL文が実行された直後、システムがクラッシュしたとする。ここでMySQLを再起動すると、復旧処理が始まる。ハードディスクには最後のチェックポイント時でのデータが保存されており、それ以降の変更はトランザクションログにだけ保存されている。そこで、トランザクションログに記録されたSQL文を順に再実行(REDO)することで、クラッシュ直前の状態にまで復旧できる。、、、うーむ。ここで言っている「トランザクションログ」とはバイナリログではなく、ib_logfileを指しているようだが、、、 (http://www.interdb.jp/techinfo/mysql/m-2-08.htmlより) こっちの方が分かりやすいかな。 「MySQLは再起動時にib_logfileからコミットされたトランザクションを読み出し、それが実データ(デフォルトだと ibdata)に反映されていなければ反映させるという処理が走る」 (http://nkjmkzk.net/?p=60より) あぁ、やっぱり「トランザクションログ」とはib_logfile、つまりInnoDBログファイルなんだな。 やっとうっすら掴めてきたよ。。 それからinnodb-flush-log-at-trx-commitの値は余程のことがない限り1にしておく方がよいみたいだ。 「トランザクションがコミットする度にディスクへの書き込みとフラッシュを実行する」ってことなんだが、詳しいことはやはり上記参照サイトに書いてある。追求すればまだまだ出てきそうだが、ざっくり仕組みが理解できたので(多分)今回はこの辺で。