MySQL

2008-06-20

[mysql] やる夫のMySQL設定ミス

Unknown database

正直ネタがないので昨日30分くらい詰まったところを紹介します。 そんなDBは知らないよといっています。DB名が違うのではないでしょうか?

クライアント側から何度も接続できるし・・・DB名も間違ってないよなぁ~と思っていたのですが、”port”を”post”と記述してしまったため、エラーとなっていました。なるほど注意深く見ていた箇所は、DB名とport番号だけ・・・。まぁいいやセットアップできたし。

-----
failed: Unknown database 'yauro_db:post=13306' at /usr/local/yaruo/Data/ObjectDriver/Driver/DBI.pm line 24
-----

# /usr/bin/mysql -h indigo01 -P 13306 yaruo_db
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32
Server version: 5.0.42-enterprise-gpl-log MySQL Enterprise Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> Bye

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
MySQL
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

続きを読む "[mysql] やる夫のMySQL設定ミス"

| | コメント (0) | トラックバック (0)

2008-06-09

[mysql] やる夫がクエリサイズに苦戦しているようです。

MySQLエラーメッセージ

テーブルを定義するときに、カラム長を決めますが、どうやらクエリサイズがカラム長をより大きいデータとなってしまったようです。クエリを短くするか、テーブルを定義し直すか、ご利用は計画的に・・・。

DBD::mysql::st execute failed: Data too long for column 'yaruo_neet_data' at row 1 at /usr/local/yaruo/Data/ObjectDriver/Driver/DBI.pm

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
Mysql
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-05-27

[mysql] やる夫が1台で複数のDBを管理しているようです。

インスタンスについて

データベースシステムのまとまりのことであり、データベースを起動・停止する単位を表します。検証環境にて世代管理をする場合や、リソースの有効活用で、1台のDBにいくつもDBを構築したりすると思います。

複数のDBを管理する

やる夫は、試験環境MySQL-DBを構築していて、1台のサーバ内で、複数のインスタンス構成を取り、世代管理運用をしていました。yaruoシステムがver2.0にアップするため、ver2.0検証用のDBを作成することになりました。今回はver1.5を削除して、ver2.0用のDBを構築する手順を記すことにします。

          ____
       / \  /\ キリッ
.     / (ー)  (ー)\
    /   ⌒(__人__)⌒ \   試験環境DBはインスタンス毎で管理するお
    |      |r┬-|    |  
     \     `ー'´   /   
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

# ps axuw | grep mysql
mysql     9228  0.0  0.2 263768 17820 ?      Sl   Apr23   6:51 /usr/sbin/mysqld
mysql     9395  0.0  3.4 1656920 283764 ?    Sl   Apr23   1:26 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_s
mysql     9322  0.0  2.3 2043012 195480 ?    Sl   Apr02   1:52 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver1_5_m
mysql     9914  0.0  7.1 5398488 580780 ?    Sl   Apr23   1:47 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver1_6_m
root     12430  0.0  0.0 53268  804 pts/0    S+   14:29   0:00 grep mysql

# /usr/bin/mysqladmin shutdown -S /var/lib/mysql/yaruto_ver1_5.sock

# ps axuw | grep mysql
mysql     9228  0.0  0.2 263768 17820 ?      Sl   Apr23   6:51 /usr/sbin/mysqld
mysql     9395  0.0  3.4 1656920 283764 ?    Sl   Apr23   1:26 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_s
mysql     9914  0.0  7.1 5398488 580780 ?    Sl   Apr23   1:47 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver1_6_m
root     12430  0.0  0.0 53268  804 pts/0    S+   14:29   0:00 grep mysql

バージョンが変わるので、ディレクトリ管理しやすいように変えてしまいます。1からDBを構築する場合は、dataディレクトリを削除してしまいます。

# cd /usr/local/yaruo/data
# ls
mysql  yaruo_ver1_5  yaruo_ver1_6    work
# mv yaruo_ver1_5 yaruo_ver2_0
# cd yaruo_ver2_0
binlog  ibdata  iblogs  logs  mysql  relays  test  tmp  yaruo_db
# rm -rf yaruo_db

ディレクトリ名がver2_0に変わるので、ver1_5記載箇所をver2_0に変える必要があります。 viで手で変更しても可ですが、sed使う方が楽です。diffで変更点を確認してみて下さい。

# cd ../mysql
# sed 's/ver1_5/ver2_0/g' yaruo_ver1_5_my.cnf > yaruo_ver2_0_my.cnf
# diff yaruo_ver2_0_my.con yaruo_ver1_5_my.cnf
# chown mysql:mysql yaruo_ver2_0_my.cnf

インスタンスについては、親のmy.cnfからincludeさせているので、こちらの修正も必要です。

# vi my.cnf
-----
- /usr/local/yaruo/data/mysql/ yaruo_ver1_5_my.cnf
+ /usr/local/yaruo/data/mysql/ yaruo_ver2_0_my.cnf
-----

起動してみます。

# /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver2_0_m &
[1] 31886
#
[1]+  Exit 1                  /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver2_0_m

失敗・・・。エラーログを確認します。

            ___
       /      \         
      /ノ  \   u. \ !?
    / (●)  (●)    \ おっお・・・
    |   (__人__)    u.   |
     \ u.` ⌒´      /     またMySQLが立ち上がらないお
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

やる夫が困ってます。何とかしてあげましょう・・・。

# tail -f /usr/local/yaruo/data/yaruo_ver2_0/logs/yaruo_ver2_0_m.errorlog
080527 15:31:58  InnoDB: Started; log sequence number 0 130390540
/usr/sbin/mysqld: File '/usr/local/yaruo/data/yaruo_ver2_0/binlog/yaruo_db1_m.000001' not found (Errcode: 2)
080527 15:31:58 [ERROR] Failed to open log (file '/usr/local/yaruo/data/yaruo_ver2_0/binlog/yaruo_db1_m.000001', errno 2)
080527 15:31:58 [ERROR] Could not open log file
080527 15:31:58 [ERROR] Can't init tc log
080527 15:31:58 [ERROR] Aborting

080527 15:31:58  InnoDB: Starting shutdown...
080527 15:32:00  InnoDB: Shutdown completed; log sequence number 0 130390540
080527 15:32:00 [Note] /usr/sbin/mysqld: Shutdown complete

どうもver1.5時のデータが残っているのが原因らしいですね。なので、ログを全て削除してしまいます。

# /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver2_0_m &
[1] 1219
# ps axuw | grep mysql
mysql     9228  0.0  0.2 263768 17820 ?      Sl   Apr23   6:51 /usr/sbin/mysqld
mysql     9395  0.0  3.4 1656920 283764 ?    Sl   Apr23   1:26 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_s
mysql     9914  0.0  7.1 5398488 580780 ?    Sl   Apr23   1:47 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver1_6_m
mysql     9322  0.0  2.3 2043012 195480 ?    Sl   Apr02   1:52 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_ver2_0_m
root     12430  0.0  0.0 53268  804 pts/0    S+   14:29   0:00 grep mysql

再度起動コマンドを実行指定見ます・・・。今回はうまく行ったようです。

      ___
     /_ノ   ヽ_\
   /( >)  (<)\
  /::::::⌒(__人__)⌒::::: \  ね!かんたんだお
  |     |r┬-/      |
  \     ` ̄'´     /

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
Mysql
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-04-30

[mysql] やる夫がselect結果をソートするようです。

select 結果をソートする

最近何をムキになって更新しているか、考える今日この頃・・・。そろそろ同でも良くなってきたが、ソート表示する方法を記載します。

  • select [column_name] from [table_name] order by;

ソート

# mysql
mysql> select yaruo_time from yaruo_table order by yauro_time LIMIT 5;
+------------+
| yaruo_time |
+------------+
|       NULL |
|       NULL |
|       NULL |
|         12 |
|         23 |
+------------+
5 rows in set (0.14 sec)

逆順ソート

# mysql
mysql> select yaruo_time from yaruo_table order by yaruo_time DESC LIMIT 5;
+------------+
| yaruo_time |
+------------+
|      12096 |
|       8552 |
|       6112 |
|       5892 |
|       5736 |
+------------+
5 rows in set (0.14 sec)

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-04-28

[mysql] やる夫がスロークエリログを見やすくするようです。

mysqldumpsloでスロークエリログを見やすくする

見出しの通り・・・

  • mysqldumpslow [log_name]

スロークエリ調査には下記cronとか仕掛けておけばよいでしょう。下記例では、ファイル名の形式は、”[hostname].slowqueries.yyyynndd”で出力先は”/usr/local/mysql/logs/slowqueries/”配下となります。

# crontab -e
-----
16 8 * * * /usr/bin/mysqldumpslow /usr/local/mysql/logs/yaruo_db.slowqueries.1 > /usr/local/mysql/logs/slowqueries/`hostname`.slowqueries.`date +%Y%m%d --date '1 day ago'`
-----

  • --date '1 day ago' は一日前の日付時間を取得します。

いや・・・たんにスロークエリログは1日に一回ログローテートするので、1日前の日付の方がいいかな?とかそんな感じです。

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-04-16

[shell] やる夫がindexを確認するようです。

INDEXの確認方法

”show index from [table_name]”で確認できます。postgreSQLだと、”\d [table]”で確認できるので楽ですね・・・。

mysql> show index from yaruo_tb;
+----------+------------+---------------+--------------+--------------+----
| Table    | Non_unique | Key_name      | Seq_in_index | Column_name  |
+----------+------------+---------------+--------------+--------------+----
| yaruo_tb |          0 | PRIMARY       |            1 | neet_id      |   
| yaruo_tb |          0 | PRIMARY       |            2 | jitaku_id    |   
| yaruo_tb |          0 | yaruo_neet_id |            1 | neet_user_id |   
+----------+------------+---------------+--------------+--------------+----
3 rows in set (0.00 sec)

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-04-14

[mysql] やる夫がDBコネクションをkillするようです。

やる夫がスロークエリに悩まされているようです。

週明け早々からアボンヌしてしまいました。活性保守メンテナンスなのですが、処理が重くついでに、他の設定も加えたため、idleが0に差し込みました。休み中雲隠れしとけばよかった・・・。

         ____
       /::::::::::  u\  
      /:::::::::⌒ 三. ⌒\    監視からの電話が鳴り止まないお・・・。
    /:::::::::: ( ○)三(○)\ 
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |

# sar
07時45分01秒       CPU     %user     %nice   %system   %iowait     %idle
07時50分01秒       all     20.90      0.00      9.95     60.64      8.51
07時55分01秒       all     16.33      0.00      7.79     72.91      2.97
08時00分02秒       all     15.26      0.00      6.73     76.42      1.59
08時05分01秒       all     14.20      0.00      6.31     78.51      0.98
08時10分01秒       all     14.82      0.00      6.29     78.05      0.83
08時15分01秒       all     14.14      0.00      5.85     79.47      0.53
08時20分01秒       all     13.16      0.00      5.47     80.84      0.53
08時25分01秒       all     13.23      0.00      5.48     80.84      0.45
08時30分01秒       all     12.49      0.00      4.98     82.04      0.48
08時35分01秒       all     11.78      0.00      4.88     82.88      0.46

DBへのコネクションがやたら多い・・・。

# netstat | grep -c ESTABLISHED
502
# netstat | grep ESTABLISHED | grep -c 192.168.2.12
240

  • Maxconectionsは512です。普段は260くらいとします。
  • 上記例だと、”192.168.2.12”からのコネクションで半分を使い果している感じです。

”192.168.2.12”は監視orバッチ系のサーバなので、アプリを停止しました・・・が、selectはDBサーバに滞留しちゃうので、DB側でプロセスを停止しないといけません。

特定ホストからのプロセスを停止する方法

# mysqladmin processlist  | grep 192.168.2.12
| 245713 | neet | 192.168.2.12 | yaruo_db | Sleep   | 5018565  |                |
| 250366 | neet | 192.168.2.12 | yaruo_db | Sleep   | 40324525 |                |

結構見やすいように整形しちゃいましたが、こんな感じで出力されます。左端の数字がプロセスIDなので、ひたすらkillしてやればよいです。kill方法は下記にしるします。

# mysqladmin kill 171491 -u root

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-03-28

MySQL リファレンス

インストール

パフォーマンスチューニング

SQL

こんなときどうする?

| | コメント (0) | トラックバック (0)

[mysql] やる夫がmsqldの起動に苦戦しているようです。

MySQLプロセスが立ち上がらない

# mysql -S /var/lib/mysql/yaruo_db &
[1]+  Exit 1

         ____
       /::::::::::  u\  
      /:::::::::⌒ 三. ⌒\    ・・・ちょ・・・
    /:::::::::: ( ○)三(○)\        MySQLプロセスがあがらない・・・
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |

ココでは、”/usr/local/yaruo/yaruo_db/”配下にDBデータが格納されているものとします。エラーログには下記のように出力されているようです。

# tail -f /usr/local/yaruo/yaruo_db/logs/yaruo_db.errorlog
080324 19:18:33  InnoDB: Started; log sequence number 8 592253242
^G/usr/sbin/mysqld: File '/usr/local/yaruo/yaruo_db/binlog/yaruo_db.000032' not found (Errcode: 2)
080324 19:18:33 [ERROR] Failed to open log (file '/user/local/yaruo/yaruo_db/binlog/yaruo_db.000032', errno 2)
080324 19:18:33 [ERROR] Could not open log file
080324 19:18:33 [ERROR] Can't init tc log
080324 19:18:33 [ERROR] Aborting

080324 19:18:33  InnoDB: Starting shutdown...
080324 19:18:36  InnoDB: Shutdown completed; log sequence number 8 592253242
080324 19:18:36 [Note] /usr/sbin/mysqld: Shutdown complete

どうもプロセス立ち上げ時に”/usr/local/yaruo/yaruo_db/binlog/”配下のindexを見てログがないよといっているようです。今回の例では、”/usr/local/yaruo/yaruo_db/binlog/yaruo_db.000032”がないと言っています。

binlogはディスク圧迫する要因でもあるので、削除してしまったりします。手で削除すると、恐らくindex情報も更新されないので、今回のような事象になったりするようです。

対処方法としては、”/usr/local/yaruo/yaruo_db/binlog”配下のファイルを全部削除して下さい。

# cd /usr/local/yaruo/yaruo_db/binlog
# rm -rf yaruo_db*
# mysql -S /var/lib/mysql/yaruo_db &
# ps axuw | grep mysql
mysql    29711  0.0  1.9 2040900 160888 ?    Sl   Mar27   0:01 /usr/sbin/mysqld --defaults-group-suffix=_yaruo_db

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (1)

2008-03-17

[mysql] やる夫のDBがディスクフルでアボーンしたようです。

ディスク容量が足りないようです。

         ____
       /::::::::::  u\  
      /:::::::::⌒ 三. ⌒\    ・・・ちょ・・・おま・・・ 
    /:::::::::: ( ○)三(○)\        使えないんですが・・・逃げたい・・・
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |

mysql> desc yauro_tb;
ERROR 1030 (HY000): Got error 28 from storage engine

ディスク容量が足りないようです。binlogとかの整理をする必要があるようです。・・・最近検証環境だがやってしまった。動きが重いだとかの警鐘があったのだが、後回しにしていました。色々作業が平行していたため、復旧に半日要しました。コレがサービス環境だと思うと・・・。((((;゜Д゜)))ガクガクブルブル

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-03-13

[mysql] やる夫がmax_connectionsの設定をするようです。

max_connectionsについて

DBを守るための設定と思っています。簡単に言うと同時接続は50名までしか認めませんよっとかいう設定ができます@PostgreSQLと同じ説明

max_connections設定方法

# vi /etc/my.cnf
-----
# The maximum amount of concurrent sessions the MySQL server will
# allow. One of these connections will be reserved for a user with
# SUPER privileges to allow the administrator to login even if the
# connection limit has been reached.
max_connections = 512
-----

mysqldの再起動をお願い致します。

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-03-12

[mysql] やる夫がmax_allowed_packetの設定をするようです。

max_allowed_packetについて

max_allowed_packetとは、通信時における1パケットの最大サイズ。BLOB型(画像などのバイナリを入れるカラム)を利用する場合、最大BLOBカラム長より大きく設定する必要があります。

DBD::mysql::st execute failed: Got a packet bigger than 'max_allowed_packet' bytes at /usr/local/yaruo/mysal/DBI.pm line 347

max_allowed_packetが小さいとエラーが出力されます。

max_allowed_packetの確認方法

下記結果は、16Mで設定している状態です。

mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1047552 |
+--------------------+---------+
1 row in set (0.00 sec)

max_allowed_packetの設定方法

設定方法は、my.cnfを書き換えて、mysqldを再起動する方法と、mysqlログインをして、SQL文を叩く方法です。ちなみに後者は、mysqlログイン時のみ有効のようです。

     ____
   /      \
  /  ─    ─\     
/    (●)  (●) \   永続的に変更する場合はやはり
|       (__人__)    |       mysqldの再起動が必要だお
/     ∩ノ ⊃  /
(  \ / _ノ |  | 
.\ “  /__|  |
  \ /___ /

     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;) 
/    (─)  (─ /;;/   
|       (__人__) l;;,´   クラスタ監視停止とか   
/      ∩ ノ)━・'/       余分な作業がでてくるお
(  \ / _ノ´.|  |
.\  "  /__|  |      まんどくせ・・・
  \ /___ /  

下記例では、32Mに設定した場合の例です。

#vi myconf
-----
- max_allowed_packet = 16M
+ max_allowed_packet = 32M
-----

  • - はその行を消去して下さい(コメントアウトでも可)。
  • + はその行を追加して下さい。

SQL

下記例では、32Mに設定した場合の例です。

mysql> set max_allowed_packet=33553408;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 33553408 |
+--------------------+----------+
1 row in set (0.00 sec)

  • 別に切り番でもよいです。33555000とか・・・。
  • mysqlログアウトしちゃうと16Mに戻ってしまいます。あしからず・・・。

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-03-10

[mysql] やる夫がselect結果をcsvファイル形式で出力するようです。

SELECT結果をcsvファイル形式で出力する

SELECT結果を、コピペするのもいいけど、もう少しSEっぽく対応したいですね。やる夫もはじめは良かったのですが、ほぼ毎日やらなきゃいけない作業なので嫌気がさして来たようです。

       ____
     /ノ   ヽ、_\
   /( ○)}liil{(○)\     毎日・・・ピーしてペーすんのも
  /    (__人__)   \                 うんざりだお!
  |   ヽ |!!il|!|!l| /   |       なんでやる夫ばかりこんなに作業が多いんだお!
  \    |ェェェェ|     /             大概にしてほしいお!

      / ̄ ̄\   
    /ノ( _ノ  \            ・・・
    | ⌒(( ●)(●)      (うっせ~よ)
    .|     (__人__) /⌒l
     |     ` ⌒´ノ |`'''|
    / ⌒ヽ     }  |  |              
   /  へ  \   }__/ /             / ̄ ̄\    土方・
 / / |      ノ   ノ           / ●)) ((●\’, ・ 
( _ ノ    |      \´       _    (   (_人_)’∴ ),  ’
       |       \_,, -‐ ''"   ̄ ゙̄''―---└'´ ̄`ヽ   て
       .|                  ______ ノ    (
       ヽ           _,, -‐ ''"  ノ       ヽ   r'" ̄
         \       , '´        し/..     | J
          \     (           /      |
            \    \         し-  '^`-J



          γ⌒)       コピペ
         / ⊃ ̄ ̄ ̄\
      〃/ /   ::\:::/::ヽ∩⌒) ))
       γ⌒)  <●>:::<●|/ ノ      延々とコピペしてやんよ
      / _ノ    (__人__)} / ))     
     (  <  .    ` ⌒´ 、( ⌒)   オラオラ
    (( \ ヽ          /     
       ヽ_ _       |ノ    コピペ   
        |           |    
        |         |
        i      ̄\ ./ オラオラ
         \_     |/   コピペ
          _ノ \___)
         (    _/
          |_ノ

     ____
   /      \
  /  ─    ─\     
/    (●)  (●) \    このSELECT文結果をそのまま
|       (__人__)    |        ファイルに出力したいのだが・・・
/     ∩ノ ⊃  /
(  \ / _ノ |  | 
.\ “  /__|  |
  \ /___ /

select * from [table_name] INTO OUTFILE "[file_name]" FIELDS TERMINATED BY ',';

       ____
     /_ノ   ヽ_\
   /( >)  (<)\
  /::::::⌒(__人__)⌒::::: \  googleサイコーあったお!
  |     |r┬-/      |
  \     ` ̄'´     /

ちょっとだけやる夫が成長したようです。同じSQL文なら、テキストから食わせてやれば、わざわざMySQLにログインすることもなくcronで何とかなるのだが、とりあえずできることから一歩一歩前に進んで逝きましょう・・・。下記はコマンド例です。

mysql> select neet_id, user_name from yaruo_tb limit 5;
+----------+-----------+
| neet_id  | user_name |
+----------+-----------+
| 12047384 | dekiruo   |
| 12048877 | yaranaio  |
| 12048879 | yarumi    |
| 12048934 | yaruo     |
| 12048927 | opu-na    |
+----------+-----------+
5 rows in set (0.00 sec)

mysql> select neet_id, user_name from yaruo_tb limit 5 INTO OUTFILE "/home/yaruo/20080310.csv" FIELDS TERMINATED BY ',';
Query OK, 49 rows affected (0.04 sec)
mysql> Aborted
# cat /home/yaruo/20080310.csv
12047384,dekiruo
12048877,yaranaio
12048879,yarumi
12048934,yaruo
12048927,opu-na

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (2)

2008-02-28

[mysql] やる夫がselect結果の量に困っているようです。

select結果の制限

データ数がすくなければ特に問題ないのですが、10万件とか膨大なデータをあつかっているDBで、安易に”select * from [table_name]”でも打とうものなら・・・。ぁああああってなりますね。そんなときに、”limit”が役立ちます。

         ____
       /::::::::::  u\  
      /:::::::::⌒ 三. ⌒\     ・・・っちょ・・・・おま・・・
    /:::::::::: ( ○)三(○)\          とまらないお・・・
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |

やる夫が、”select * from yauro_table”を叩いたようです。

      / ̄ ̄\   
    /ノ( _ノ  \    DBあつかうときは慎重にやれっていってんべ!
    | ⌒(( ●)(●)
    .|     (__人__) /⌒l
     |     ` ⌒´ノ |`'''|
    / ⌒ヽ     }  |  |              
   /  へ  \   }__/ /             / ̄ ̄\   データが多・・・
 / / |      ノ   ノ           / ●)) ((●\’, ・ 
( _ ノ    |      \´       _    (   (_人_)’∴ ),  ’
       |       \_,, -‐ ''"   ̄ ゙̄''―---└'´ ̄`ヽ   て
       .|                  ______ ノ    (
       ヽ           _,, -‐ ''"  ノ       ヽ   r'" ̄
         \       , '´        し/..     | J
          \     (           /      |
            \    \         し-  '^`-J

            / ̄ ̄\
          /   _ノ  \
          |    ( ●)(●)
          |     (__人__)  
             |     ` ⌒´ノ   limit くらい使っとけよ・・・
              |         }       ほらサンプルSQLやるよ・・・
              ヽ        }
            ヽ、.,__ __ノ
   _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
  /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
 丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|

# myql
mysql> select [column_name] from [table_name] limit 10;

  • limit [n] でデータ出力数を指定できます。上記例だと上から10行まで出力されます。

         ____
       /      \  
     /  _ノ  ヽ、_  \   テキストにSQLをメモッてコピペするお・・・。
    / o゚((●)) ((●))゚o \  
    |     (__人__)    |  
    \     ` ⌒´     /
   /´           `\
  /  /          l  l   .___
__l  l_¶______/_/__/     ヽ
  \, ´-'ヽ  ̄| ̄ ̄ ̄ ̄|   l二二二二l
    ヾ_ノ   | '''' '   |   l二二二二l
   | 9=ε-8. | '''..--  |   l二二二二l:::..
   |   ..''  |  ''-.  ,|

ちょっと応用

下記例では、”neet_id”と”neet_name”を出力するようにして、先頭に”y”が付くものを、ソートしかつ10件まで表示するというSQLサンプルです。

  • 同でも良いが、会員数200万以上って、すごいシステムだな・・・。

# mysql
mysql> select neet_id, neet_name from yaruo_tb where neet_name like 'y%' order by neet_name limit 10;
+----------+------------------+
| neet_id  | neet_name        |
+----------+------------------+
|  2410554 | yaranaio         |
|   208231 | yarumi           |
|  3216603 | yaruo            |
|   121868 | yaruo_test       |
|   822554 | yaruo_test01     |
|  2158770 | yen              |
|     2382 | yneet            |
|   896892 | yne              |
|    71881 | yyy              |
|    54640 | yz_neet          |
+----------+------------------+
10 rows in set (0.04 sec)

  • like ワイルドカード(っと思っている)
  • order by ソート
  • limit 出力制限

正直抑えておいた方がよいです。延々とSQLの出力結果がトレースされてるとちょっとだけかっこ悪いです。

----------------------------------------
現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2008-01-28

[mysql] やる夫がカラム一覧を表示させるようです。

カラム一覧表示

DESCRIBE [table_name];

postgreSQLだったら”\d [table_name]”だったのですが、やっぱり違うようです。下記例では、”yaruo_db”の”yaruo_tb”のカラム情報を取得する手順となっています。

         ____
       /      \  
     /  _ノ  ヽ、_  \ 
    / o゚((●)) ((●))゚o \  未だにMySQLにはなじめないお
    |     (__人__)    | 
    \     ` ⌒´     /
   /´           `\
  /  /          l  l   .___
__l  l_¶______/_/__/     ヽ
  \, ´-'ヽ  ̄| ̄ ̄ ̄ ̄|   l二二二二l
    ヾ_ノ   | '''' '   |   l二二二二l
   | 9=ε-8. | '''..--  |   l二二二二l:::..
   |   ..''  |  ''-.  ,|
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  

# mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| mysql              |
| test               |
| tmp                |
| yaruo_db           |
+--------------------+
11 rows in set (0.03 sec)

mysql> use yaruo_db
Database changed
mysql> show tables;
+-------------------+
| Tables_in_yaruo_db|
+-------------------+
| yaruo_table       |
+-------------------+
1 row in set (0.00 sec)

mysql> DESCRIBE yaruo_table;
+-------+--------+------+-----+---------+----------------+
| Field | Type   | Null | Key | Default | Extra          |
+-------+--------+------+-----+---------+----------------+
| yauro | int(11)| NO   | PRI | NULL    | auto_increment |
+-------+--------+------+-----+---------+----------------+

----------------------------------------
現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (1) | トラックバック (0)

2007-12-26

[mysql] やる夫がDBに接続できなくて困っているようです。

構成(っというか・・・)

別のホストから、DBサーバへ接続しようとしたとき出力されたエラーのまとめです(初歩)。構成はこんな幹事です。

  • データベースサーバ

indigo01(IPaddress:192.168.2.20)
MySQL-5.0.42-0(DBname:yaruo_db)

  • アプリケーションサーバ

indigo02(IPaddress:192.168.2.21)

上記ホストについてはルーティングが通っているものとします。データベース”yaruo_db”のportは”13306”で立ち上がっているものとします。

接続エラー1

       ____
     /_ノ   ヽ_\
   /( >)  (<)\   MySQL DB構築したお!
  /::::::⌒(__人__)⌒::::: \    スケジュール1週間遅れだけど、そんなの関係ないお!
  |     |r┬-/      |  
  \    ` ̄'´     /

[indigo02]# /usr/bin/mysql -h 192.168.2.20 -P 13306 yaruo_db
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.2.20' (113)

”MySQLサーバへ接続できません。”

         ____
       /::::::::::  u\
      /:::::::::⌒ 三. ⌒\     キャントコネットがMySQLの上にのってる?
    /:::::::::: ( ○)三(○)\  
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          |
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |

# telnet 172.22.238.153 13306
Trying 192.168.2.20...
telnet: connect to address 172.22.238.153: No route to host
telnet: Unable to connect to remote host: No route to host

とりあえず、telnetして見ましたが、コネクションを掴めないようです。単純にMySQLサーバが立ち上がっていないか、port”13306”での接続が出来ないことが予想されます。

プロセス確認方法

”ps auxw | grep”でも良いですが、今回はportが特殊なので、下記で調べてみます。DBサーバで調べます。下記結果が返ってくれば、MySQLサーバに問題はなさそうです(そうでもないが)。

[indigo01]# /usr/sbin/lsof -i -n -P|grep 13306
mysqld    28156   mysql   15u  IPv4  715453       TCP *:13306 (LISTEN)

portを調べてみます。

[indigo01]# /sbin/iptables -L -n | grep ACCEPT
ACCEPT     tcp  --  172.16.0.0/12        0.0.0.0/0           tcp dpt:21
ACCEPT     tcp  --  172.16.0.0/12        0.0.0.0/0           tcp dpt:23
ACCEPT     udp  --  172.16.0.0/12        0.0.0.0/0           udp dpt:3306
ACCEPT     tcp  --  172.16.0.0/12        0.0.0.0/0           tcp dpt:3306

port”13306”が空いていないようです。port開放しましょう。

接続エラー2

[indigo02]# /usr/bin/mysql -h 192.168.2.20 -P 13316 yaruo_db
ERROR 1130 (00000): Host '192.168.2.20' is not allowed to connect to this MySQL server

       ____
     /      \
   /  _ノ  ヽ、_  \   あれから3日経ったけど
  / o゚((●)) ((●))゚o \      いまだにMySQLに接続できないお・・・
  |     (__人__)    |
  \     ` ⌒´     /   

まだ接続できないようです。今回は”yaruo_db”へのアクセス権限が無いものと思われます。DBサーバで下記手順を実施してみて下さい。

        ノ L____
       ⌒ \ / \
      / (○) (○)\
     /    (__人__)   \   やる夫は悪くないお!
     |       |::::::|     |       フリーウェアの癖に生意気だお!
     \       l;;;;;;l    /l!| !
     /     `ー'    \ |i
   /          ヽ !l ヽi
   (   丶- 、       しE |そ  ドンッ!!
    `ー、_ノ       ∑ l、E ノ <
               レY^V^ヽl  

DBクリエイトするのにいつまでかかってんだよ!!     うっせ~!
      / ̄ ̄\                      いちいちユーザ指定してんじゃねぇよ!
    /ノ(  ゝ 、_,ノヽ        r'´ ゙ヽ      /`ヽ          ___
    | ⌒(( ●)(●)        ヽ   ヽ从从/   /        \   /\
.    |     (__人__) /⌒l     \  \/  /て       (●)liil(●) ノ( \
     |     ` ⌒´ノ |`'''|    ∑ ヽ/  /  そ     / (__人__)  ⌒   \
    / ⌒ヽ     }  |  |      ,)/  / \ く     |   |!!il|!|!l|         |
   /  へ  \   }__/ /      /   /\  \      \i⌒ヽェェ|      /
 / / |      ノ   ノ    /   / YYY\   \     \ \  /⌒,/´
( _ ノ    |      \´    /   /       \   \     / \ \/  /l
       |       \_,/   /         \   \_/    \__ノ |\
       .|            /            \             |) )
       ヽ          /               \           ,r' /
         \      , '´                   `' ,        /ー'′
          \     (                     )     /
            \    \                  /    /

もう一息です。頑張ってください。

[indigo01]# /usr/bin/mysql -S /var/lib/mysql/yaruo_db.sock yaruo_db
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.0.42-enterprise-gpl-log MySQL Enterprise Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

ユーザーパスワード及びACLの確認

mysql> select user,host,password from mysql.user;
+--------+------------+---------------------------+
| user   | host       | password                  |
+--------+------------+---------------------------+
| root   | localhost  |                           |
| root   | indigo01   |                           |
| root   | 127.0.0.1  |                           |
+--------+------------+---------------------------+
3 rows in set (0.00 sec)

ユーザパスワード及びACLの設定

下記は”root”に対して、パスワードなし+どのホストからもアクセス可能にする設定です。

mysql> grant all privileges on *.* to root@'%';
+--------+------------+---------------------------+
| user   | host       | password                  |
+--------+------------+---------------------------+
| root   | localhost  |                           |
| root   | indigo01   |                           |
| root   | 127.0.0.1  |                           |
| root   | %          |                           |
+--------+------------+---------------------------+
4 rows in set (0.00 sec)

ちなみに、”yaruo”ユーザで”vipper”というパスワードを設定するならこんな感じです。

mysql> GRANT ALL ON *.* TO yaruo@'%' IDENTIFIED BY 'vipper';

これで、”indigo02”から”indigo01”MySQLサーバへ接続することができました。

[indigo02]# /usr/bin/mysql -h 192.168.2.20 -P 13306 yaruo_db
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6

Server version: 5.0.42-enterprise-gpl-log MySQL Enterprise Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

       ____
     /_ノ ' ヽ_\
   /(≡)   (≡)\
  /::::::⌒(__人__)⌒::::: \  なんとかまにあったお!
  |     |r┬-|     |  
  \      `ー'´     /  

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)

2007-12-19

やる夫がMySQL-5.0.42-0をインストールするようです。

MySQL user group の作成

# /usr/sbin/groupadd -g 2001 mysql
# /usr/sbin/useradd -u 2001 -g 2001 -d /home/mysql -s /bin/bash -m mysql
# passwd mysql

ディストリビューション提供の MySQL rpm の削除

既にデストリビューションによって提供されている MySQL rpm が存在すると、インストール時及び動作に不具合が生じる場合がある。”rpm -Uvh”ではだめなのか?

# rpm -qa | grep -i mysql
# rpm -e --allmatches --nodeps mysql
# rpm -e --allmatches --nodeps mysqlclient10

  • --nodeps オプションは、依存関係を無視。
  • --allmatches オプションは、複数のパッケージ指定を無視。下記エラー時利用。

”エラー: "mysql" は複数のパッケージを指定しています”

MySQL データディレクトリの作成+コンフィグファイルの作成

MySQLデータディレクトリの作成。下記の手順は”/usr/localmysql”をMySQLデータディレクトリとしている。何処でもよい。

# mkdir -p /usr/local/mysql/ibdata
# mkdir -p /usr/local/mysql/iblogs
# mkdir -p /usr/local/mysql/tmp
# mkdir -p /usr/local/mysql/relays
# mkdir -p /usr/local/mysql/binlog
# mkdir -p /usr/local/mysql/logs
# chown -R mysql:mysql /usr/local/mysql

コンフィグファイルは、”/etc/my.cnf”で良いが、ココではデータディレクトリ内で管理するものとする。シンボリックリンクを張らないと、なぜかMySQLは読み込んでくれない。

# vi /usr/loval/user_my.cnf
-----
[mysqld]
user=mysql
datadir=/usr/loval/mysql
port=3306
socket=/usr/loval/mysql.sock
pid-file=/usr/loval/mysql.pid
-----
#ln -s /usr/loval/user_my.cnf /etc/my.cnf

rpm バイナリパッケージの解凍

# rpm -ivh MySQL-client-enterprise-gpl-5.0.42.xxx..rpm
# rpm -ivh MySQL-server-enterprise-gpl-5.0.42.xxx..rpm
# rpm -ivh MySQL-shared-compat-enterprise-gpl-5.0.42.xxx.rpm

エラーが出た場合は、対応OSの確認と、rpm依存ファイルの確認。

/etc/init.d/mysql の無効化

特に設定しなくても良い・・・。

# /etc/init.d/mysql stop
Shutting down MySQL..                                      [  OK  ]
# /sbin/chkconfig --list mysql
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
# /sbin/chkconfig mysql off
# /sbin/chkconfig --list mysql
mysql           0:off   1:off   2:off   3:off   4:off   5:off   6:off

MySQL 起動+停止

#  /usr/sbin/mysqld
[1] 14830

# /usr/bin/mysqladmin shutdown

起動時に下記エラーが出力されたら。

Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

”/var/lib/mysql”配下を確認してみて下さい。”ib_logfile0,ib_logfile1,ibdata1”等があれば、MySQLデータディレクトリへ移動させて下さい。

# mv id* /usr/local/mysql/.

rpmインストール時に、my.cnf の設定がされていないと、デフォルト(/var/lib/mysql)のデータディレクトリに設定してしまうようです。rpmインストール後から、変更できない(?)新宿ν速民は何度やっても出来ませんでした。再度rpmの入れ替え(アンインストール+インストール)を実施してい見て下さい。

----------------------------------------

現場で使える MySQL (DB Magazine SELECTION)
松信 嘉範
翔泳社翔泳社翔泳社
定価 : ¥ 2,730
2006-03-17
amazonで詳しく見る

| | コメント (0) | トラックバック (0)