搭載物理メモリ48Gのサーバーで、大きな単一テーブル(80G程度)を上手く扱う方法って無いですか?
(そのテーブル対して、更新&参照&集計が頻繁に発生すします。)
my.conf-hugeを元にいろいろチューニングを試してみたんですが、
io-waitが100%に刺さったまま、ハングしたようになり困っています。
開発当初はoracle案件で、ありきたりのチューニングだけで、問題なく動作していたのですが、
クライアントの方針変更で、急にMySQLで開発することになり、非常に難儀しています。
(ちなみに案件規模は、楽天クラスの商品在庫管理です。)
839 :
NAME IS NULL:2008/05/24(土) 02:15:08 ID:/LSToqrf
その規模になると、MySQLでは、どうやっても無理。パフォーマンスや安定性の面でもお薦めしない。
クラに泣き付いてでも、オラクルに戻してもらえ。
単一tblって時点で何だかな〜…
大規模すぎてMySQLの範疇じゃないだろ
>>839-840 ありがとうございます。でも、それは無理っぽいです。
クライアントのライバル会社が全社的にOpenOfficeを採用したとかで、新聞に載ったらしく、
クライアントの経営トップがそれに対抗して、バックエンドにオープンソース採用の方針を
打ち出したいらしく、私が土下座するくらいでは受け入れられそうにも無いです。
842 :
NAME IS NULL:2008/05/24(土) 02:49:35 ID:/LSToqrf
かなり痛いトップだな。
コッド博士クラスの優秀なDB開発者を雇ってMySQLを改造してもらえ。
843 :
NAME IS NULL:2008/05/24(土) 03:34:26 ID:VAruVHOx
バカ相手してても身体壊すだけだから辞めちゃえw
>>841 土下座て。
やるだけの事はやってちゃんと検証データとボトルネック、仕組み的に無理ですって事を踏まえた上で
それでもなんとかしろと言うならやりますが、紆余曲折、最悪こういう想定事態になりますが
よろしいですか?ってクライアントと折衝する人に言ってもらえばどうでしょうか。
自分の仕事は最低限筋の通った理屈を報告して折衝担当者に理解してもらうこと。
もちろん前向きにね。
自分の仕事を理解し、精一杯やるだけやってしっかりとこなした上で無理難題言う上司や客に必要以上の負担を強いられる道理はないでしょ?
ただその事を丁寧にビジネス用語で当たり障り無く表現して相手に理解、納得してもらうよう「伝える」努力は必要ですけど。
私もそこまでのデータの運用経験はないけど、微力ながら言わせてもらうと
■ハード面
・SASでRAID0+1 ファイバーチャネル使えるならそれに越したことはないけど。
=> ディスクの読み込み速度が上がって結果的にMySQLの更新・参照・集計早くなります。
=> バックアップできます。三世代管理くらいまではしたほうが幸せになれるかも。
=> RAIDはライトキャッシュとBBUのついているものを使用 なるべくキャッシュは多い方がいいです。
2GとかつけれるのもあるけどRAIDカード選びは慎重にね。
ディスクはシークタイムがあるから10000rpmのもので秒間16コミットしかできない
ライトキャッシュ積むといっぱいコミットできます
・レプリケーション
=> レプリケーションしているとは思うけど、なんとなくしてなさそうな節があるのでやって見て下さい。
スレーブサーバに参照を掛けるとスレーブの台数分だけ参照はバンバン早くなります。
ただし、マスターと完全同期ではないので入金処理等精度の必要な部分はマスターを使って下さい。
アプリケーション側でのスレーブ参照制御が面倒なら間にLVSでもなんでもいいからロードバランサー仕込むと吉
・memcacheサーバ
=> 80G程度ならサーバ10台以内で構築できると思う
更新はライトスルーでMySQLにも書いて単純参照はmemcacheからすると涙でるほど早い。
但しきちんと両方更新されたか確認、制御する仕組みは必要。
ソフト面に続く
■ソフト面
・設計の見直し
=> 詳細知らないので絶対とは言えませんが、MySQL用にテーブル設計、運用設計見直した方がいいと思います。
単一テーブル80Gは異常に思えます。
同一テーブルを複数作って分割・分散したり非正規化してみたり。
内部の詳しい人に相談して下さい。詳細知らないと設計はできません。
・インデックスの見直し
=> 当然ですがインデックスの付け方と発行クエリでMySQLの速度は1000倍違うこともあります。
複合インデックス、プライマリ、単一ユニーク、複合ユニーク気を付けながらexplainしてチューニング。
・クエリの見直し
=> これもexplainしながらチューニング 色々調べてみてください。
=> 拡張インサート、INSERT IGNORE等を使うと便利な局面もあるかもしれません。
=> 集計は、トリガを使ってインサート時に集計値をインクリメントしたりすると負荷がさけれます。
=> DELETEは実行コストが高いので、削除フラグを付けて対応する。一日一回纏めてDELETE処理する等
・MyISAM、InnoDB
=> 参照はMyISAM、更新はInnoDB。
ライトスルー、レプリケーションと合わせて使えばパフォーマンス全然違います。
MyISAMはライトロックが有効かもしれません。デッドロックに気をつけて。
・コンパイル
=> MySQLはソースからICCでコンパイル。速いっす。
・文字コード
=> できればUTF-8。一番苦労しなくて済みます。MySQLの内部コードもUTF-8。
・チューニング
=> ケースバイケースなんでなんとも言えませんが
tmp_table_size
max_heap_table_size
は同じ値にしないとダメですよー
query_cacheをしてみてください
禁断のチューニング
innodb_support_xa = OFF
innodb_flush_method = O_DIRECT
sync_binlog = 0
innodb_flush_log_at_trx_commit = 2
innodbを使用している場合上記設定だとディスクIOがガンガン減るので更新負荷がガクンと下がります。
ただし、データの保存性は最悪。
予期せぬマシンダウンがあれば復旧できない場合もあります。
・専門のコンサル
=> 実現までの早さと質が必要ならMySQLに習熟してる会社にコンサル依頼するのが一番早いような気が・・・
KLABさんにでも頼んでみたら?とふと思いました。
私も規模が大きくなるに連れて運用に悩まされ、夢の中のトイレで自分のションベンの放物線を眺めている時でさえMySQLの事を
考えていた時期が三ヶ月ほどありました。
データもいっぱい壊しました。いっぱい怒られました。あぁ思い出したらトイレに行きたくなってきたのでこれくらいで。
追記:あっSUNが買収してオープンソースでなくなるんじゃなかったっけ?
( ;∀;) イイハナシダナー
852 :
NAME IS NULL:2008/05/25(日) 11:54:18 ID:G//yp2T+
テーブルの結合に関しての質問です。
MySQLでテーブルを結合する方法として以下の二つがあります。
1.select * from HOGE as a, FOO as b where a.id = b.id
2.select * from HOGE as a inner join FOO as b on a.id = b.id
この二つの方法のうち、どちらが人気でしょうか?
また、性能の違いはありますでしょうか?
853 :
NAME IS NULL:2008/05/25(日) 13:58:22 ID:CfdJAAug
まぁ単に
結合条件をFROM句に書いたか
WHERE句に書いたかの違いだけだと思うけど。
性能の違いはないんじゃないかな?
1のように結合条件をWHERE句にごちゃごちゃとかくよりも
2みたいにFROM句に書いたほうが
テーブルとの関係が分かりやすいのはあるかもね。
でも自分は1の方法が多いかな。
以上、末節ながら。。。
MySQL5.1で2GBほどのデータベースをインポートしているんですが、すでに170時間以上経過しています
DB元のサイトによると予想時間が八時間ということですが、同じように予想時間二時間のファイルをインポートした時は16時間かかりました
170時間以上経過というのは異常でしょうか? また原因はどこにあるでしょうか?
スペックはCPU:Celeron2.2G,Mem:DDR333の512MB,HDD:UltraATA/100の40GB、Ubuntu8.04上で動かしています
>>854 MySQL詳しくないんだが、インポートの途中経過とかログに出せないの?
CPU使用率とかディスクアクセス見るしかない?
>>855 作業を始めてからGUIの動作を受け付けなくなりましたorz
さっき調べたら途中経過を出すステートメントを見つけましたが、作業中でコマンド入力不能……
一度落としてデータベースを空にしてから再開しようかと迷ってます
>>854 メモリーが少なすぎないか?
せめて1GBは無いと、その規模では予想時間の倍の時間がかかるイメージ。
>>854 データベース区切った方が早いよ
自分の場合、1GBちょっと約700万のデータを50万レコードごと区切って入れたら1時間くらいだった。
あと基本だけど
・リモートよりサーバにUPしてから、コマンド打って入れたほうが数倍早い
・INSERT文はマルチインサートの方が数十倍早い
・インデックス貼ってるなら削除してからの方が早い
因みに環境はCPU:Athlon 3200 ,Mem:1GB
charとvarcharが拡張されて65535バイトまで格納できるようになった今
text型を使う意義ってあるのでしょうか?
860 :
NAME IS NULL:2008/05/26(月) 08:30:12 ID:anlWXK4f
text型は例えば「備考」とか「理由」とかいう長文が入る可能性のカラムに対して
明示的に使うことがあるよね。
txtにしないと内部検索できねーだろ
お忙しいところ恐れ入ります。下記のように設定したいのですが、
syntaxエラーが出てしまい困っております。
どのように改修したら宜しいでしょうか?
アドバイス頂ければと思います。
create table m_user(
No integer PRIMARY KEY AUTO_INCREMENT,
ID char(8) UNIQUE KEY,
password varchar(20),
name varchar(20),
mail_address varchar(50),
authority varchar(2) NOTNULL);
エラー内容は下記です。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'NOTNU
LL)' at line 7
863 :
862:2008/05/26(月) 14:42:08 ID:???
追記で申し訳ありません。
MYSQLのVerは5.0です。
宜しくお願いいたします。
NOTNULL じゃなくて NOT NULL でしょ。
865 :
854:2008/05/26(月) 14:51:12 ID:???
メモリ増設してきました!
一気に三倍の1.5GBにして、HDD領域も少し増やして、改めてテーブルを用意して流し込んでます
結果が出たらまた報告しますね
866 :
862:2008/05/26(月) 14:53:13 ID:???
>>864 ありがとうございました。
なんという・・・俺バカ><
ありがとうございました!
867 :
NAME IS NULL:2008/05/26(月) 21:30:33 ID:+Ce61WTV
怒られそうな質問なんですけど、
コマンドプロンプトでmysql -u root -pって入力した時に入れるパスワード
ってなんですか?
xamppでphpと一括でインストールして始めてやってみようとしたんですけど・・・
868 :
NAME IS NULL:2008/05/26(月) 21:51:49 ID:+Ce61WTV
>>867です
サイトで調べて、mysqladmin -u root password パスワード
と入力したら、
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost (using password: NO)
と出たんですけどどうゆう意味ですか?
とりあえず -p なしにしてみたら、どうなる ?
870 :
NAME IS NULL:2008/05/26(月) 22:02:48 ID:MQWbRVv1
mysqladmin -u root
っていれたら、英語がいっぱい出てきました!
とりあえず -q つけてみたら、どうなる?
872 :
NAME IS NULL:2008/05/26(月) 22:18:08 ID:t8RRxsu7
-pって付け足しても同じようなのが出てきました。
873 :
NAME IS NULL:2008/05/27(火) 02:23:53 ID:mN2Gb71B
インスコした時のぱ素ワード入れろよ
商品テーブルにある、商品単価*数量の結果を
注文明細テーブルにある金額カラムに
自動でインサートしたいんですが何か方法はありますか?
たとえば、
商品単価=100
数量=3
だったら、自動で金額カラムに300とインサートしたいです。
数量を4に変更したら金額が400になって欲しいです。
サブクエリでいいのでは?
バージョン書いてないから、解らんけど、トリガー使えば?
明細インサート、アップデート時に、その計算項目入れれば
Oracleのストアドプロシージャだと、
INSERT文の中に、算術記号も使えた。
INSERT INTO tbl (金額) VALUES (商品単価*数量);
MySQLも似たようなことが出来るはず。
「はず」じゃなくて、5.0からできる
皆さんテーブル名やカラム名は、普通どんなフォーマットにしてる?
「TABLE_NAME」とか大文字とアンダバー組み合わせて統一?
本やググっても「これが定番」という資料がみつからないんで、ちと困ってます。
itirou とか matui とか matuzaka とかにしてる
>>880 別に特に気にしてない。気分次第かな。
カラム名については、外部参照するようなidなんかは、
"なんたら_id"みたいな感じ。
ちなみに、大文字小文字については、Unix環境だけでなく、
まったく同じ構成のDBをWin環境でもテストとかするから、小文字で統一。
SQLの予約語を大文字で書く習慣があるからテーブルやカラム名は小文字
884 :
880:2008/05/27(火) 19:34:23 ID:???
>>881-883 なるほど。参考になります。
小文字に統一しとこう。ありがとうございます。
>>880 2byteだけはやめとけ。
英語でもローマ字表記でもいいから、ASCII文字の方がOSが変わっても扱いやすい。
hoge
-----------------------------------
id int
name VARCHAR(128)
priority TINYINT(2) DEFAULT 1
-----------------------------------
こんなテーブルがあったとして以下の条件でデータをとるにはどうすればいいでしょうか?
カラムは5つ
ランダムでとる
priority(優先度)が高いものが選ばれる可能性を高くする
5つとる・ランダムは以下でできますが
SELECT * FROM `hoge` Order By rand() limit 0,5;
優先順位を考慮に入れるとり方が思いつきません。
正確(完璧なアルゴリズム)ではなくてもいいのでご鞭撻のほどお願いします。
テーブルのつくりに問題がある場合もおっしゃっていただけると助かります。
今考えているのは
先に優先順位でソートして上位数件取得
そこからランダム取得
です。
>>886 優先順位が高いと当たる確立が上がる という意味でしょうか。
その場合でしたら、やり方はいろいろあるでしょうけど、
シンプルなのは優先順位の値に従い該当レコードを
重複させたリストを作り、それに対してランダム取得など。
>>886 今即席で考えてみた。
priority の値を1〜5として、
select *,(rand()*5 + priority) as rand_col from hoge order by rand_col desc limit 1;
みたいな感じでどうか。(実際はpriorityの数値と、rand()*nのnを適切に与えてやらないといけないが・・)
上の例を、レコード5件、priorityを1.2.3.4.5としてやってみて、10000回の結果(それぞれのidが最大になった回数)
(priorityの値が大きいほうが選ばれやすい。言葉の意味的には逆なような気が??)
1 = 28
2 = 259
3 = 1058
4 = 2767
5 = 5888
割合的には、(約)1:10:40:100:200
もっときれいに分かれるかと思ったけど、微妙だな・・・。
(文系脳ではここら辺が限界、スマソ)
889 :
NAME IS NULL:2008/05/28(水) 09:11:48 ID:l7349jpG
文字コードの変更方法がわからないです。
my.cnfファイルの
[mysqldump]と[client]部分にdefault-character-set=utf8
と記述したんですが、コマンドプロンプトで
Show VARIABLES LIKE 'CHAR%'; と入力し確認したんですが、
latin1のままになってます。
どうすれば変更できますか?
init-connect='SET NAMES utf8'
891 :
NAME IS NULL:2008/05/28(水) 15:09:44 ID:OeWwUjG2
max_connection ってデフォルトで 100 だったのか・・・
確認せずにボロボロこぼしてしまった.
まぁローカルのサービスだったからよかったけど.
892 :
NAME IS NULL:2008/05/28(水) 15:40:03 ID:NgaxVuoB
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・)
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね
苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね
苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね
苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね苦しんで死ね
死ぬとき このレスの事思い出してから地獄いけよ
ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・)
893 :
889:2008/05/28(水) 17:31:34 ID:xeQEQXZc
[mysqld] で
MySQLでPHPのアプリ作ったら、アプリのソース公開しなきゃいけないっていうのは本当ですか?
GPL汚染とはいえ、SQL叩いただけでというのは意味が分からないんですが・・
レプリケーションについて、MySQLのマニュアルに、
「MySQL 4.0.2 はレプリケーション目的には適しません」
とありますがこれは何故なんでしょうか?
現在4.027を使っています。
主キーを追加するのに
ALTER TABLE address ADO PRIMARY KEY (NUMBER);と入力したら、
ERROR 1064 (42000): You habe an error in your SQL syntax; check the manulal that
corresponds to your MySQL serber version for the right syntax to use near
'ADO PRIMARY KEY(number)' at line 1
とゆうエラーが出たんですけどどうゆう意味ですか?
>>896 アプリ販売するなら一応そうだけど、MySQL+PHPの場合は回避されるはず。それで一回MySQLのサポート外したから>PHP
900 :
ほい!:2008/05/28(水) 20:51:36 ID:3lvkdlof
ほい!
「にっこっこ掲示板」ヤフーで検索してみ!「にっこっこ」でOK
新しいの誕生したよ
まだ規制ないし、色々貼れる
902 :
854:2008/05/28(水) 22:46:11 ID:???
データベースインポート中だった854です。
無事に60時間で作業完了しました!
メモリの増設は効果覿面だったみたいです。
>>902 結局、どういう方法でインポートしたの?
他の人間の為にも、報告よろ
>>902 おつかれw
そこの環境だと予想の8倍かかると覚えておけばよいのかなw
>MySQL serber version for
これエラーメッセージからのコピペ?
>>905 察してやれ。なにしろ you habe に serber だ。
910 :
名無しさん@Vim%Chalice:2008/05/29(木) 17:01:38 ID:VDNC7sY4
mysql workbenchについて質問です。
このソフトってmysql以外のRDBMSに接続することって可能でしょうか?
可能な場合、その種類について教えてください。
リバース、フォワードエンジニアリングができればよいと考えています。
よろしくお願いします。
val_table
number int auto_increment,
title VARCHAR(100) NOT NULL
tag_table
number_tag int auto_increment,
number int,
title VARCHAR(100) NOT NULL
タギングテーブル(tag_table)と商品テーブル(var_table)から検索する際の取り方なのですが、
val_table.titleとtag_table.title(複数の場合や存在しない場合もある)からlikeで調べたいのです。
ただ、タグが複数ある場合、存在しない場合などの際、うまくとれません。
複数ある場合はCONCATで結合、タグが存在しない場合はval_tableのtitleのみから調べて返してほしいのですがどうすればいいでしょうか?
SELECT a.title from hoge_table a,tag_table b where a.number = b.number;
>タグが複数ある場合、存在しない場合などの際
LEFT JOIN
select a.number,a.title,b.title from val_table as a LEFT JOIN tag_table as b on (a.number = b.number_tag);
>複数ある場合はCONCATで結合
GROUP_CONCAT() # mysql 独特なので注意
select min(a.number),min(a.title),GROUP_CONCAT(b.title) from val_table as a LEFT JOIN tag_table as b on (a.number = b.number_tag) GROUP BY a.number;
>>897 4.0.2はわからんが、
数年前の4.0.xx(忘れた)のころはレプリケーションにバグがあって
マスターとスレーブの内容が一致しないなんてことが起こった。
その後なおったはずだけど…
915 :
NAME IS NULL:2008/05/30(金) 13:29:24 ID:eZR1pwPY
>>914 そんなので何のために使えるんだろうか・・・
参照系の不完全な負荷分散専用?
916 :
965:2008/05/30(金) 16:36:34 ID:???
>>913さん
ありがとうございます!
結合はそれでいけました。
ただ、GROUP_CONCAT(b.title)をlike 検索できません。
GROUP_CONCAT(b.title) As tags
にして
tags like "%test%"
してみたのですが
unknown column になります。
917 :
912:2008/05/30(金) 16:48:56 ID:???
名前間違えました。。。
そしてHAVING でできました。
913さんほんとうにありがとうございます。
918 :
NAME IS NULL:2008/05/30(金) 19:56:01 ID:Z2jF5HUG
田舎DQN男の家族消えろ 田舎DQN男の親消えろ 田舎DQN男の子供消えろ 田舎DQN男の親戚消えろ
田舎DQN男の家族消えろ 田舎DQN男の親消えろ 田舎DQN男の子供消えろ 田舎DQN男の親戚消えろ
田舎DQN男の家族消えろ 田舎DQN男の親消えろ 田舎DQN男の子供消えろ 田舎DQN男の親戚消えろ
田舎DQN男の家族消えろ 田舎DQN男の親消えろ 田舎DQN男の子供消えろ 田舎DQN男の親戚消えろ
ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・)
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね
死ぬとき このレスの事思い出してから地獄へ行けよ
ニヤ(・∀・)ニヤ(・∀・)
919 :
NAME IS NULL:2008/05/30(金) 21:17:36 ID:XvuF1EUT
XAMPPのmysqlについての質問です。
rootのmysqlのパスワードをリセットしようとしているのですが、
うまくいきません。
xamppに付属のバッチファイルでパスワード削除できるとFAQに書いてあるのですが、
mysql\resetroot.bat がエラーで動作しません orz
apache friends - xampp windows版faq
http://www.apachefriends.org/jp/faq-xampp-windows.html#password2 エラー内容は、下記です。
ERROR: 1136 Column count doesn't match value count at row 1
080530 21:10:06 [ERROR] Aborting
080530 21:10:06 [Note] bin\mysqld.exe: Shutdown complete
Passwoerter fuer Benutzer "root" und "pma" wurden geloescht.
Passwords for user "root" and "pma" were deleted.
続行するには何かキーを押してください . . .
また同じエラーの下記の対処をしても同じエラーがでてしまました。
リアルシステムズ/IT化・情報化・ホームページの企画・設計・開発:xamppのmysqlでrootパスワードがresetroot.batでリセットできない
http://blog.livedoor.jp/real_systems/archives/51166848.html どうにかパスワードをリセットする方法はないでしょうか?
コマンドプロンプトから直接mysqlを叩く
921 :
919:2008/05/31(土) 03:43:29 ID:P9Fe+Y8M
てか、よく考えたらものすごい環境依存っぽいのでxamppのBBSで聞いてきます。
解決しましたらこちらに報告に来ます。
お騒がせしました。
922 :
NAME IS NULL:2008/05/31(土) 10:54:59 ID:w17RNyoM
mysqlで
絶対に打ち込んではいけないコマンドを
私に伝授してください!!!!!!
DROP TABLE tbl
select
>>922 drop database mysql
exit
927 :
NAME IS NULL:2008/05/31(土) 12:57:23 ID:w17RNyoM
>>925 こら〜!
とんでもないことなってもうたやないかい!
928 :
NAME IS NULL:2008/05/31(土) 13:13:36 ID:yOEBInyW
しかし管理用のデータベースまで普通に見えるのはどうかとも思う。
ファイルシステムでもおなじか
そうか?
包み隠さないことはいいことだ。
>>928 まったくだ。 grant なんとか on *.* が mysql.* まで含んでしまうのは、まずいと思う。
まあ *.* するのがまずいんだろうけど。
305 Query SHOW COLLATION
305 Query SET NAMES ujis
305 Query SET character_set_results = NULL
305 Query SET autocommit=1
305 Query SET sql_mode='STRICT_TRANS_TABLES'
305 Query SET NAMES sjis <-------これは誰が発行しているのかわかりません
305 Query UPDATE tab1 SET name = 'jdbc 修正 myjava3.java', note = 'myjava jdbc 修正 ' WHERE number = 70
305 Quit
java のコードに sjis に設定しているってこと?
| character_set_client | ujis |
| character_set_connection | ujis |
| character_set_database | ujis |
| character_set_results | ujis |
| character_set_server | ujis |
自己解決
解決案も書かないと。
ブラウザを立ち上げて
2chを開いて「自己解決しました」
と書き込む
MySQL4.1.2のテーブル結合について質問させてください。
test テーブル
| id | name | group_id |
+-----------------------+
| 1 | test1 | 0 |
| 2 | test2 | 1 |
| 3 | test3 | 0 |
| 4 | test4 | 1 |
| 5 | test5 | 2 |
| 6 | test6 | 2 |
group テーブル
| id | name |
+-------------+
| 1 | group1 |
| 2 | group2 |
上記のテーブルを結合し、下記結果のように
testテーブルのgroup_idが1以上のデータのみ、
group_idでグループ化して表示させることは可能でしょうか。
| test_name | group_name |
+-----------+------------+
| test1 | NULL |
| test2 | group1 |
| test3 | NULL |
| test5 | group2 |
下記のSQL文を実行してみるも、
group_idを持たないデータまでグループ化されてしまいます。
select test.name as test_name,group.name as group_name
from test
left join group on test.group_id = group.id
group by test.group_id
| test_name | group_name |
+-----------+------------+
| test1 | NULL |
| test2 | group1 |
| test5 | group2 |
自分だけで解決したのに、なんで役立たずの君たちに教えてあげなくちゃならんのだ
思い切って質問させていただいたのですが間違いのようでした。
失礼いたしました。
>>936 group by の値をユニークにしてやればいいのだから、たとえばこんな感じ?
select min(a.name),b.name from test as a left join group as b on (a.group_id = b.id)
group by case when a.group_id > 0 then a.group_id else a.id -100 end;
-100 はユニークにするためのいい加減な値なので、適当に。
group のような予約語はテーブル名にしない方がいいような気がする。
4.1.2ではなく5.0を使っているからちょっと判らんけど
left join での接続方法を変えてみたらどうなんだろう
SELECT test.name,group.name,test.id,group.id FROM group LEFT JOIN test ON test.id = group.id GROUP BY group.id HAVING test.group_id > 0
テストテーブル作るのが面倒だったから直書きだから動かなかったらスマン
あーケアレスミス
SELECT test.name,group.name,test.group_id,group.id FROM group LEFT JOIN test ON test.group_id = group.id GROUP BY group.id HAVING test.group_id > 0
恥ずかしながら再度確認しに来てしまいましたが、
レスをいただいており、大変感謝いたします。
>>940 >>group のような予約語はテーブル名にしない方がいいような気がする。
例としてわかりやすいテーブル名にしようと思い、
とんだミスをしてしまいました…。気を付けます。
>>select min(a.name),b.name from test as a left join group as b on (a.group_id = b.id)
>>group by case when a.group_id > 0 then a.group_id else a.id -100 end;
この方法で解決できました!
テスト用でも本DBでも正常に動作しました。ありがとうございます。
>>942 >>SELECT test.name,group.name,test.group_id,group.id FROM group LEFT JOIN test ON test.group_id = group.id GROUP BY group.id HAVING test.group_id > 0
この方法も試させていただきました。
すると、group_idを持たないデータは表示されなくなるようです。
| test_name | group_name |
+---------+-----------+
| test2 | group1 |
| test5 | group2 |
しかしながら、大変勉強になるレスをいただきまして
ありがとうございました。
944 :
NAME IS NULL:2008/06/03(火) 20:53:33 ID:9lp1uw3k
mysqlマスターでさえ
打つのをしり込みする
コマンドを
もしあれば
伝授してください!
>>944 マスターじゃないけど rm -rf でディレクトリを削除するのはやっぱり
不安だよ。何回も確認する。
質問させていただきます。
最近、パーティショニングを使い始めました。
やりたいことはPARTITION BY KEY()を使用したパーティショニングをし、
分割したデータやインデックスをdisk分散させるということなのですが、
これを実現させるには個々のパーティションに対し、DATA DIRECTORYと
INDEX DIRECTORYを地道に指定していくしかないのでしょうか?
947 :
NAME IS NULL:2008/06/04(水) 16:53:49 ID:sTUXwMfM
UPDATE test SET name='aaa' WHERE id='1'
UPDATE test SET name='bbb' WHERE id='2'
UPDATE test SET name='ccc' WHERE id='3'
と言うように、各レコードを更新するに辺り
上記のように3回のSQLを実行せずに、まとめて1回で実行する
方法はありますでしょうか?
UPDATE test SET
name=IF(id=1,'aaa),
IF(id=2,'bbb',
IF(id=3,'ccc', 'xxx')
)
)
WHERE id in (1,2,3)
それで速くなるの?
試せばわかるんじゃね?
ぐぁぁああぁ…replace into って、delete → insert だから、
autoincrement のフィールドの値が変わるじゃねぇか…。
952 :
NAME IS NULL:2008/06/04(水) 23:33:29 ID:R8ngxTCT
mysqlで誰にも知られていない
秘密のコマンドがあると聞いた
そのコマンドとは?
とりあえずマニュアル読めば誰にも知られていないわけではないけれど
>>952が知らないコマンドは出てくるんじゃないの?
>>952 またかよ…。 だからSELECTだっつってんだろが
秘密のコマンドはあります。
でも誰も知らないから誰も答えられません。
956 :
NAME IS NULL:2008/06/05(木) 16:34:39 ID:539Qwkef
WebARENA SuitePRO V1を使っていて
mysql-3.23.58-16.FC3.1から
アップデートしたいのですが、
どうすればよいのでしょうか?
素直にV2 に移行する。
958 :
NAME IS NULL:2008/06/05(木) 20:17:33 ID:539Qwkef
>>957 やはりそれが一番簡単ですかね。
ドメインとメールアカウントが
けっこうあるので移転がめんどうだ・・・
959 :
NAME IS NULL:2008/06/07(土) 02:13:41 ID:YKItF8pv
ここで質問してもいいのかな?
もし、スレ違いだったら誘導してくれると嬉しいです。
服の検索をするためのテーブル設計について行き詰まっています。
同じ服だけど、他種類のサイズがある場合、
どういうテーブル設計にすればいいか考えあぐねています。
現状では、
(1) 服のサイズ以外の基本情報テーブル
(2) 服の型番で、各サイズごとに記載したテーブル
を用意しています。
サイズで検索し、当てはまった商品の基本情報と全サイズ一覧を出す場合、
一度のリクエストで、何度もクエリを送信しなければならず、非効率です。
何とか良い方法はないでしょうか?
あるいは、そういう目的別のテーブル設計事例集などがあればいいのですが、
テーブル設計でAmazon検索しても、なぜか魔法瓶が羅列されてしまって、参考になりませんw
お薦めの本、あるいは、複数サイズの洋服の最適なテーブル設計があれば、
ヒントだけでも頂けませんでしょうか?
JOINしたら一発ででね?
JOINでもVUEでも一発で出すことはできるんですが、
型番ごとに各サイズを格納するという作業をプログラム側でやってしまうのは、
良い方法なのでしょうか? なんか泥臭い感じがして。
>型番ごとに各サイズを格納するという作業をプログラム側でやってしまうのは、
あのね、「服の型番」と「サイズ」がどういう関係にあるか自体、業界外の人間には分からないんだ。
「型番」が決まればサイズが決まるのか、それとも、型番→サイズというハイアラーキーになっているのかとか…。
「型番」=「商品の基本情報」(のプライマリキー)で、「型番」→「サイズ」がハイアラーキーなのなら、
「型番ごとに各サイズを格納するという作業」は単なるJOINだから、プログラム側では何もしなくてよいのでは。
なんだかシステム・エンジニアの要件定義そのもだな。
業界や会社の物事を、いかにコンピューター上で実現するか。
>>962 例えば、型番「hoge」の中にS(15)、M(20)、L(25)があるというイメージです。
言われているハイアラーキーな関係になるかと思います。
>>959で言うと、
(1) テーブルに、型番「foo」の基本情報のフィールドがあり、
(2) テーブルに、S、M、L というサイズのフィールドが、
型番「foo」に対してそれぞれあります。
上記前提で、
例えばサイズ検索をして、hogeのMが引っ掛かった場合、
「foo」の全サイズ情報も出力したいので、SとLのフィールドが必要になります。
しかし、型番「bar」のサイズ展開は、L、XL、XXLであるため、
型番を元に、サイズをひとつのフィールドにまとめてしまうと、
検索するのに問題が生じます。
よって、それぞれのサイズのフィールドに、
各型番の基本情報をまとめるようなビューを作成しなければならないのです。
この方式だと、検索結果に一致したサイズの型番で
改めてクエリを投げて、結果をまとめるという処理が必要になります。
未熟なので、もっと効率的な方法はいくらでもあるのでしょうし、
指摘されている方法であっけなく片付けられる手順があるのかも知れませんが、
それを学ぶ手段や書籍を見つけられずに試行錯誤しているのが現状です。
MySQLに関してチューニングや入門書はいくらでも見つけられるのですが、
こういう事例に関しての設計例は、一切見つけられなくて困っています。
何とかお知恵あるいは書籍の情報を頂ければと思うのですが。
>それぞれのサイズのフィールドに、各型番の基本情報をまとめる
の意味が分からん。
単純に、これじゃだめなの?
基本情報に「bar」があり、サイズがMかLのものを取得。
create table dress (RID int primary key auto_increment, ID varchar(24), sz varchar(8));
create table info (RID int primary key auto_increment, ID varchar(24), body text);
insert into dress (ID,sz) values ('foo','S'),('foo','M'),('foo','L),('bar','S'),('bar','M'),('bar','L'),('bar','LL'),('bar','LX');
insert into info (ID,body) values('foo','dress type foo'),('bar','dress type bar');
select distinct D.ID,D.sz,I.body from dress as D left join info as I using (ID) where (I.body like '%bar%' and( D.sz = 'M' or D.sz = 'L'));
966 :
964:2008/06/07(土) 11:14:09 ID:???
・サイズ情報テーブル size
n,type,size,length,width
1,'foo','S',15,40
2,'foo','M',20,45
3,'foo','L',25,50
4,'bar','L',24,52
5,'bar','XL',28,58
6,'bar','XXL',32,64
・商品情報テーブル item
n,type,name,info
1,'foo','ふー','フーな感じです。'
2,'bar','ばー','バーな感じです。'
かなりシンプルにしましたが、
テーブルのイメージとしてはこんな感じです。
ここからsize.lengthで検索し、
一致したtypeの商品情報と他のサイズの情報を取り出したいのです。
良い設計あるいは最適な取り出し方について事例を知っていれば
教えて頂けると嬉しいです。
967 :
964:2008/06/07(土) 11:26:12 ID:???
>>965 すいません、入れ違いました。
ご回答ありがとうございます。
ただ、
>>966のようなイメージなのです。
>>965だと、barのLに関するdress, info情報は返ってきますが、
同時に(同時じゃなくてもいいですが)、barのLLとXLのdress情報も欲しいのです。
サブクエリ exists の定番。
試してないけど
select distinct I.type,I.name,S.size,S.length,S.width from item as I left join size as S using(type)
where exists (select X.type from size as X where (X.size = 'M' and X.length= 15 and X.type = I.type);
969 :
NAME IS NULL:2008/06/07(土) 11:31:40 ID:FRaL8y0I
winmysqladminnとやらは
5.0や6.0のバージョンではないの?
コマンドからしかできないのですかね?
>>968 ありがとうございます。
非常に参考になります。
かなり欲しい結果に近い部分を得られました。
select distinct I.type,I.name,S.size,S.length,S.width from item as I left join size as S using(type)
where exists (select X.type from size as X where (X.length=15 and X.type=I.type));
で、fooのsize「S」が一致し、fooの全ての情報が取り出せました。
これに、X.length=15にあてはまるS.sizeがどれなのかも合わせて欲しいのです。
やはり、その場合は2回クエリを投げる必要がありますか?
実際のテーブルは規模がもっと大きいので、
検索結果が100件あるとすると、
ひとつのリクエストなのに1+100回クエリを投げないといけなくなり、
どうにか上手にまとめられればと思います。
971 :
964:2008/06/07(土) 12:03:39 ID:???
すいません。
>>970は私です。
よく考えると、
>>968さんのクエリと、
通常のサイズ検索クエリ(select size from size where length=15;など)の2回やれば、
欲しい結果が全て得られることが分かりました。
1回では不可能な気がするので、現状最善の方法が見つかりました。
これでどうにかなりそうです。
大変勉強になりました。ありがとうございます。
mysql5で最初から作られている
information_schema
っていうデータベースって削除してよい?
本家の解説読んでもイマイチワカランカッタ
manual 29.7.5 には、「触るな」と書いてあるが。
>>974 それVIEWみたいなもんだろ。
各テーブルの情報がテーブルっぽく見えてるだけのような。
消す意味が分からん。
>>974 おまいは testデータベースも残しておけ
>>974 information_schemaはRDBMSにとって必須なものだよ。
Windowsのレジストリってよくわからない設定しか書いてないから
消してよい?って言ってるようなもん。
つまり、「それを消すなんてとんでもない。」
CREATE VIEW v AS SELECT * FROM t;
みたいにしてビューを作ると「*」が展開された形で作成されてしまい、
元のテーブルtのカラムが増減したときビューを作り直さなければならない
のですが、「*」を展開しない状態でビューを作ることはできないのでしょうか?
980 :
NAME IS NULL:2008/06/10(火) 03:18:18 ID:dXdBkxZR
phpMyAdminのクエリ統計で、
? /秒の数値を見ているのですが、
「52.55」になっています。
起動してから一秒当たり52.55回SQLが発行されたという意味だと思いますが、
MYSQLでどの程度まで耐えられるのでしょうか?
これから、アクセスが伸びていくサイトなので、どの辺までが限界が読めなくて困っています。
max_connectionの設定を1000にしてあるので、最大接続数エラーになったことはないのですが、
サーバーのこの数値がここまでいくと、そろそろ限界っていったものがありますか?
宜しくお願いします。
>>980 そうゆうのは、本番環境に投入する前にベンチなりとっとくもんじゃね?
それに、当然CPU,Memにもよるだろうし、ほかのプロセス(httddとかphpとか)状況にもよるし、
なにより、どんなクエリが発行されるかによって、(同一ハード環境でも)はっきり言って100倍違う。
ちなみにウチの環境だと、
cpu Core Duo 2.0Ghz Men 1GB で、
ごく軽いクエリをmysqldが100%cpu使って20000/s以上出るけど、
ちょっと複雑なクエリにすると、途端に1000/s位になるし、
Apache + mod_perl で実環境に近い状態でやると250/s位。
だからウチの場合ではその近辺まではなんも手ぇ打たんでいいかなと判断してる。(現状 20-25/s位で推移してるし)
もちろんこれはウチの環境に限っての話であって、これらの数値は全く意味をなさないけど。
サーバマシンの構成やデータ量、どんなクエリ投げてるかは、君しか知らんから、一概にいくらとは言えないよ。
982 :
NAME IS NULL:2008/06/10(火) 12:02:34 ID:gwmqg6/k
JMeter でも使ってなんかベンチするとか.
linuxにてシェルスクリプトでデータベースやテーブルの雛形構成を
作りたいと思っているのですが、手動なら>mysql 起動後に
SQLを打ち込んでいますが、スクリプトからの場合はどのような
方法が良いでしょうか?
984 :
983:2008/06/10(火) 13:45:11 ID:???
すみません、自己解決しました。
テキストファイルにコマンド列記し、
mysql -u root < hoge.txt でいけました。失礼しました。
mysqldumpで 指定したフォルダに保存したい場合は
どうすればいいんでしょうか?
教えて下さい。
986 :
985:2008/06/10(火) 14:49:42 ID:???
自己解決致しました。
申し訳ありませんでした。
987 :
973:2008/06/10(火) 16:40:12 ID:???
ひょっとして、この現象に見舞われてるのは俺だけなのか?
いきなりバグ呼ばわりは無視される。
って言うか、これはバグだろ。俺の方でも起こるし。5.0 使えばいい
windowsのコマンドプロンプトで
> mysql
と
> mysqladmin
はどう違うんでしょうか?
administrator(管理者権限)で入るか入らないかの違い。
992 :
990:2008/06/11(水) 11:27:50 ID:???
>>991 レスありがとうございます。
では、administratorとrootはどう違うんでしょうか?
root ってのは、単なるアカウント(ユーザー) 名。
linuxやった方がいいのでは?
995 :
990:2008/06/11(水) 14:23:51 ID:???
>>993 なるほど。よくわかりました。ありがとうございます。
>>994 あまりリナックスはさわったことないので挑戦してみます!