memo.xight.org

日々のメモ

カテゴリ : MySQL

2ページ目 / 全2ページ

FlashMyAdmin - Flash based MySQL Administration Tool

Summary

Flashで開発された派手なMySQL管理ツール.
インタラクティブで軽い.

デモのトップ

Englishを選択する.
クリックして拡大

オプション画面

クリックして拡大

サーバの選択画面

クリックして拡大

フィールドの型を変更

クリックして拡大

データの検索

クリックして拡大

データを選択して表示 (マルチメディア)

クリックして拡大

sample01のflowers.jpgをプレビュー

クリックして拡大

Reference

FlashMyAdmin
http://www.flashmyadmin.org/original/flashmyadmin.org.php
FlashMyAdmin - Demo
http://www.flashmyadmin.org/flash/mysql/administration/trial/flashmyadmin.htm

テーブルの修復方法

Summary

  MySQL でテーブルが破損した場合の発生エラー
  ・`tbl_name.frm' is locked against change
  ・Can't find file `tbl_name.MYI' (Errcode: ###)
  ・Unexpected end of file
  ・Record file is crashed
  ・Got error ### from table handler
  perror ### を実行することでエラーの詳細情報を取得できる.

shell> perror 126 127 132 134 135 136 141 144 145
126 = Index file is crashed / Wrong file format
127 = Record-file is crashed
132 = Old database file
134 = Record was already deleted (or record file crashed)
135 = No more room in record file
136 = No more room in index file
141 = Duplicate unique key or constraint on write or update
144 = Table is crashed and last repair failed
145 = Table was marked as crashed and should be repaired

注意

  エラー135 (no more room in record file) の場合は以下を実行する必要がある.

mysql> ALTER TABLE table MAX_ROWS=xxx AVG_ROW_LENGTH=yyy;


段階1 : テーブルのチェック

  時間に余裕があれば,2列目のコマンドを実行.

myisamchk *.MYI
myisamchk -e *.MYI


  mysqld が終了している場合,--update オプションを使用して
  myisamchk がテーブルに 'checked' のマークを付けるようにする.

  myisamchk がエラーを返したテーブルのみ修復が必要.
  エラーを返したテーブルについては段階2へ.
  チェック時に `out of memory' などの複雑なエラーが発生,又は myisamchk がクラッシュした場合は段階3へ.

段階2 : 簡単で安全な修復

myisamchk -r -q tbl_name

  失敗したら以下の手順
  1. データファイルのバックアップ
  2. 以下を実行してインデックスファイルを再構築

myisamchk -r tbl_name

  3. 2に失敗したら,以下を実行

myisamchk --safe-recover tbl_name


  チェック時に `out of memory' などの複雑なエラーが発生,又は myisamchk がクラッシュした場合は段階3へ.

段階3 : 困難な修復

1. データファイルを安全な場所に移動
2. テーブル記述ファイルを利用して,新しい空白のデータとインデックスファイルを作成する.
   使用している SQL バージョンに TRUNCATE TABLE がない場合は,代わりに DELETE FROM table_name を使用

shell> mysql db_name
mysql> SET AUTOCOMMIT=1;
mysql> TRUNCATE TABLE table_name;
mysql> quit

3. 古いデータファイルを新しく作成したデータファイルにコピーする
4. 段階2に戻る.

段階4 : 非常に困難な修復

1. バックアップから記述ファイルをリストアし,段階3へ.
   又は,インデックスファイルをリストアして,myisamchk -r を実行し,段階2へ.
2. 別のデータベースにテーブルのコピーを作成する.
   テーブルのコピーを作成したデータベースから,新しいデータファイルを削除する.
   記述ファイルとインデックスファイルを,クラッシュしたデータベースに移動する.
   これで新しい記述ファイルとインデックスファイルができ,データファイルは前のものがそのまま残る.
   段階 2 に戻り,インデックスファイルを再構築する.
   (テーブルがどのように作成されたか正確にわかっていれば)

Reference

  MySQL Manual - テーブルの修復方法
  http://dev.mysql.com/doc/mysql/ja/Repair.html

TIMESTAMP 型

フィールド型と表示フォーマット

TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
- 注意 : 2桁の年
  00-69 の範囲にある年の値は 2000-2069 年とする
  70-99 の範囲にある年の値は 1970-1999 年とする

Reference

  MySQL Reference Manual for version 3.23.51. - DATETIME
  http://web.kuicr.kyoto-u.ac.jp/manual/mysql/manual.ja_DATETIME.html

Can't connect to local MySQL server through socket

Summary

エラーが発生.
Can't connect to local MySQL server through socket

Version

libmysqlclient 4.0.16-1
mysql-client 4.0.16-1
mysql-common 4.0.16-2
mysql-server 4.0.16-1
mysql-server-shared 4.0.16-1
php4-mysql 4.3.3-3

原因

  /etc/mysql/my.cnf を無視して mysql.sock を /tmp/mysql.sock に作ってしまう.

対処法

  /etc/mysql/my.cnf を変更

[client]
socket = /tmp/mysqld.sock
[mysqld_safe]
socket = /tmp/mysqld.sock
[mysqld]
socket = /tmp/mysqld.sock

  /etc/php4/apache/php.ini を変更

mysql.default_socket = /tmp/mysql.sock

再起動

# apachectl stop
# apachectl start


結果

  良好

2005-01-03 追記

  /etc/mysql/my.cnf ではなく/etc/my.cnf を変更しなくてはならない[2003-09-12-2] ので,
  /etc/mysql/my.cnf の設定を /etc/my.cnf にコピーした.
  これにより,mysqld.sock が /var/run/mysqld/mysqld.sock に作られるようになり,うまく動いているようだ.
  おそらく,SoftAgency の mysql のパッケージのみの仕様?

Reference

  「Can't connect to local MySQL server through socket」エラーについて
  http://www.hi-ho.ne.jp/tsumiki/book_sup2.html

PHP の mysql_connect() で Call to undefined function

Summary

Call to undefined function: mysql_connect()
というエラーが発生する.

原因

/etc/php/apache/php.ini

;extension=mysql.so

extension=mysql.so が コメントアウトされていた.

対処法

  /etc/php/apache/php.ini を

extension=mysql.so

  と変更して

# apachectl stop
# apachectl start

  で apache 再起動

MySQL サーバ,クライアント間のキャラクタセットのマッチ

順番

  1. クライアントの --default-character-set オプションを見る
  2. サーバのキャラクタセットを調べる
  3. デフォルトのキャラクタセットを使用する (configure --with-charset=****)
  4. キャラクタセットのconfファイルを探す

補足

  ver. 3.23 の場合

Reference

  Soft Agency - 実践MySQL / MySQLの日本語文字コード対応
  http://www.mysql.jp/mysql/TIPS/jp.html

日本語がうまくソートされない

問題

  PHP / MySQL で日本語がうまくソートされない

原因

  MySQL の文字コードの指定がされていない

対処法1 : 強引に charset を変更

$ cd /usr/share/mysql/charsets/
# cp latin1.conf ujis.conf
# chown mysql:root ujis.conf

- my.cnf の編集

# vi /etc/mysql/my.cnf
[client]
character-sets-dir=/usr/share/mysql/charsets
[mysqld]
default-character-set=ujis
[mysql]
default-character-set=ujis

結果

  ダメ

# cp latin1.conf ujis.conf

  あたりが強引すぎな気がする
  ujis.conf ないかな?

対処法2 : SoftAgency のパッケージを利用する

  /etc/apt/sources.listに以下を追加

deb http://www.softagency.co.jp/mysql/Downloads/woody mysql400/
deb http://www.softagency.co.jp/mysql/Downloads/sarge mysql/

  を追加

インストール結果

# aptitude install mysql-server

  依存関係問題でダメ

いったん remove

# aptitude remove mysql-server mysql-client mysql-common
# aptitude install mysql-server mysql-client mysql-common

  インストール成功
  しかし起動せず.
  いったんあきらめ.

対処法3 : ソースから ujis.conf だけ抜こう

$ wget ftp://ftp.softagency.co.jp/mysql/tcx/Downloads/mysql-4.0.15.tar.gz
$ tar xzvf mysql-4.0.15.tar.gz
$ cd mysql-4.0.15/
$ ./configure --with-charset=ujis --with-extra-charsets=all
$ make

- 補足
  euc-jp なら ujis
  shift_jis なら sjis
  と読み替えること

ujis.conf が見つからない

  終了

対処法4 : もう一回 SoftAgency のパッケージの使用を試みる

  /var/log/mysql/mysql.err を見ると /var/run/mysqld が無いとおこられていた.

# mkdir /var/run/mysqld
# chown mysql:mysql /var/run/mysqld

- 設定ファイルが2つ
  /etc/mysql/my.cnf ではなく
  /etc/my.cnf を変更しなくてはならない
  どうやら mysql が unix socket しか open していないようなので
  port = 3306 のコメントアウトを取り除く

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock
[mysqld]
default-character-set   = ujis
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

結果

  起動成功.
  日本語のソートも出来ている.

Reference

  bin5.info - MySQL の勧め
  http://bin5.info/useful/php/mysql_01.html
  MySQL Reference Manual for version 4.0.12. - 4 データベース管理
  http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_MySQL_Database_Administration.html#Character_sets
  Soft Agency - 実践MySQL / なにから手をつけましょう?
  http://www.mysql.jp/mysql/TIPS/begin.html
  Soft Agency - 実践MySQL / MySQLのクライアント
  http://www.mysql.jp/mysql/TIPS/clients.html
  Soft Agency - 実践MySQL / MySQLの日本語文字コード対応
  http://www.mysql.jp/mysql/TIPS/jp.html
  Soft Agency - MySQL 日本語バイナリ
  http://www.mysql.jp/mysql/bin/
  たぐちさんぷろじぇくと - postfixのエラー (mysql が unix socket のみを listenしていた)
  http://www.taguchi.org/

MySQL の基本

DB作成

$ mysqladmin -u root create DB名


ユーザ作成

$ mysql -u root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO username@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> \q
$ mysqladmin -u root reload


MySQL にログイン

$ mysql -u username -p


テーブル作成

$ mysql -u root DB名 < data.sql
# mysqlshow DB名