1 名前:NAME IS NULL mailto:sage [2008/01/30(水) 03:49:10 ID:???] 快速 RDBMS、MySQL の総合スレです。 前スレ[MySQL 総合 Part12] pc11.2ch.net/test/read.cgi/db/1190512649/ [関連スレと過去ログ] find.2ch.net/index.php?STR=MySQL makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on [MySQL Developer Zone] dev.mysql.com/ [MySQL 日本語リファレンスマニュアル] dev.mysql.com/doc/mysql/ja/ [MySQL Internals Manual] dev.mysql.com/doc/internals/en/ [MyNA] www.mysql.gr.jp/ [MLja] lists.mysql.com/mysql-ja ここで質問をする前に、MyNAでのFAQを最初に確認しましょう。 www.mysql.gr.jp/frame/modules/bwiki/?FAQ MyNAでの「心得の条」 www.mysql.gr.jp/frame/modules/bwiki/index.php?%BB%A8%B3%D8%2F%BF%B4%C6%C0 ・関連ツール及びユーティリティ ・関連書籍 >>2 | .| /./ / | | _,,,,||,,,l.,,_ ト / | _ | .| / . | | .| | l .| .,-'|.l .|l .| `|. l ' /´ / / / | | |.| .| , |´ | .| | _|,_ l .| ./ ''`ト ./ / | | |.| | | .| |_,,l-,─-.,_、_ | / .λl,/ / . |. |. || | .| | /::::l ヽ `'' | / , ,.ミ,|´| ./ ,,,__.| .| ヘ .| | .|/ |:i::::::〉., ノl | / .// ∨| / `'' ‐ 、l | .|||l'l:|:|l:::::`':::::i´|| '' / ...:::::l..'' .`ヽ、 |:| ヾl.ヾ::::::::::| .|| ::::::::: l .\_ -''lヾ ヘ:、.ヘ;;_;ノ ノレ .l .ヾ=,,,_ .ヘ ,ヾ_,,=..''´.... _,,, / ヽ .i'`''‐--.〉''´ .ヽ:::::::: _,,, -‐'''´:::::l ./.| drop tableは1日10回な! .\ ヽ`ニ / l. /:::::::::::::::::::::::/ i''ヘ .l `ヽ .l-‐''l / .l:::::::::::::::::_;;-ヘ l ヽ ヘ ./.`iヽ .|ヽ| ./ ,,,,,,,_.ゞ,,, -‐''ヽ. |.| .| ヾ.、.ヽ / /|.| ヽ .| .| /ヽ /:::::ヾ .| ,l '| .l.l '|ヽ.、.ヽ // /./.|,, -'''''''''''''''-.、.'-< .| ヽ /:::::::::lト''´ .| | | .i.| .ヾ.、.ヽ / / /./ ヽ,.` .l ヽ,'ノ/ ヾ_;;;l.l |/ .l l | ヾ.、lヘ ./ .//l i | .ヾ |:::::|.| .|' l// i.|| i.|
809 名前:NAME IS NULL [2008/05/20(火) 23:46:08 ID:GuaauZDQ] 質問です、 mysqldumpでダンプを取りたいのですが、 mysqldump -u root test > dump.sql と打つと 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 'mysqldump -u root test > dump.sql' at line 1> dump.sql; となります。 サイトをさんこうにしてやっていますが うまくいきません。どこが原因でしょうか? 教えて下さいませ。
810 名前:NAME IS NULL mailto:sage [2008/05/21(水) 00:06:16 ID:???] >>807 接続が切れたときに消えてなくなってもいいのであれば、temporary テーブル。
811 名前:NAME IS NULL mailto:sage [2008/05/21(水) 00:07:10 ID:???] >>809 それ、mysql> プロンプトからやってないか?
812 名前:NAME IS NULL mailto:sage [2008/05/21(水) 00:08:42 ID:???] >>808 falseはSQLの実行エラーの場合です。 updateがあったかは、たしか 影響を受けた行数を取得する 関数があったと思うので実行後にそれを使ってください。
813 名前:NAME IS NULL [2008/05/21(水) 00:33:26 ID:O5tzPctu] >>811 コマンドプロンプトからやってますが何か?
814 名前:NAME IS NULL mailto:sage [2008/05/21(水) 00:53:14 ID:???] MYSQLを導入したんだけどPHPから接続できないですけどどうしてでしょうか? MYSQLの設定を済ませて PHP5のphp.iniの設定では 絵xtension=php_mysql.dllのところを;はずしました。 MySQLの動作もちゃんとしてます。 ですが、 <?php phpinfo() ?> 上で確認したところMySQLの表示してないです。 mySQLのインストールはこちらのURLを参考にしました。 ?vine.1-max.net/MySQL.html ? こちらには、php5-mysqlが乗ってなかったので追加して インストールしました。 どこが悪いのでしょうか? 以下がバーションになります。 LINUX:vinelinux3.2 apache:1.3 場所:/etc/httpd/ php5:5.2 /etc/php5/ MYSQL:4.0 /usr/share/mysql/
815 名前:814 mailto:sage [2008/05/21(水) 02:02:33 ID:???] 自己解決しました。
816 名前:807 mailto:sage [2008/05/21(水) 02:50:01 ID:???] >>810 早速有難う御座います。 temporary テーブルでやってみようと思います。
817 名前:NAME IS NULL mailto:sage [2008/05/21(水) 02:54:27 ID:???] MySQL 5.0.51a Linux版です。 全テーブルに更新時刻と挿入時刻カラムをつけ、 beforeトリガーでこれらを更新しようと考えていますが、 オーバーヘッドはどんなものでしょうか? 用途は中小規模のグループウェアみたいなものです。 もしオーバーヘッドが大きいならtimestampで更新時刻だけ 記録することも考えるのですが、挿入時刻もあった方がいいようなのです。 MySQLで設計するのは初めてで感覚がわからないので、 なんとなくで結構ですので助言をお願いします。
818 名前:NAME IS NULL [2008/05/21(水) 13:12:17 ID:2ndXeLqA] >>813 何お前 ずいぶんと偉そうだな
819 名前:NAME IS NULL mailto:sage [2008/05/21(水) 15:25:29 ID:???] >>813 理解できるようになってから出直せ
820 名前:>>813 [2008/05/21(水) 22:05:35 ID:hrtOIMUi] 出来ましたが何か?
821 名前:NAME IS NULL [2008/05/21(水) 23:17:40 ID:wc8hj2Sl] mysql 4.1.20 CentOS4.1で質問です。 mysql>select * from XXX; を実行し、結果が多い場合、最初の方の結果がスクロールし、コンソールから消えてしまいます。 ls | moreのような感じで、1画面ずつ見たい場合はどうすればよいでしょうか? やり方がわからないので、bashから user$echo "select * from XXX;" | mysql testDB > result.txt のような感じでテキストファイルに落としています。 よろしくお願いいたします。
822 名前:NAME IS NULL mailto:sage [2008/05/22(木) 00:05:25 ID:???] >>821 limit
823 名前:NAME IS NULL mailto:sage [2008/05/22(木) 00:18:02 ID:???] >>821 mysql> pager less
824 名前:NAME IS NULL [2008/05/22(木) 00:18:18 ID:P5ig6HYl] 質問させて下さい。 MySQL5.1を使用しています。 国内IPを判別する為に以下のようなデータを入力したのですがこれを元に phpにアクセスしてきたipを国内かどうか(定義IP範囲に含まれているかどうか)判別したいのですが どのような問い合わせをすれば良いでしょうか? 例えば、58.138.127.1をtable1に対してselectしても一致しないですし。当たり前ですが・・・ table1 --------------------------- ip 58.98.0.0/16 58.112.0.0/15 58.138.0.0/17 58.138.128.0/18 .... このような場合、範囲中にあるIPを全て下記のように生成し、登録してselectさせるしかないのでしょうか? table2 --------------------------- ip 58.138.127.1 58.138.127.2 58.138.127.3 58.138.127.4 .... 純粋なクエリ等の問題ではないのかもしれませんが、いくら考えても良い方法がみつからずほとほと困ってしまいました。 どうかお力添え頂けないでしょうか?宜しくお願い致します。
825 名前:NAME IS NULL mailto:sage [2008/05/22(木) 00:37:04 ID:???] cidrとip表記をごっちゃにしている時点でどうかと思うが、 phpがトリガならmod_geoipでも使ったらどうか?
826 名前:821 mailto:sage [2008/05/22(木) 01:08:34 ID:???] >>822 >>823 解決しました。ありがとうございます!!
827 名前:824 mailto:sage [2008/05/22(木) 01:09:18 ID:???] >>825 レス有り難う御座います。 早速調べてみます。
828 名前:NAME IS NULL mailto:sage [2008/05/22(木) 01:18:09 ID:???] >>824 MySQLのみでうちがやるなら、IPはINET_ATON()で整数保管。 マスクは別フィールドに保管。 比較の際は、IPの整数をマスクサイズでビット演算して比較。 現状のテーブルのままやるのなら、文字列だからMySQLの 正規表現関数を使うのが速度的にも妥当では。
829 名前:NAME IS NULL mailto:sage [2008/05/22(木) 02:19:27 ID:???] みんな文字化け回避するためにカラムごとに文字コード設定してるの?
830 名前:NAME IS NULL mailto:sage [2008/05/22(木) 08:19:01 ID:???] mainichi.jp/enta/geinou/graph/200805/21/?inb=yt ネット証券会社が主催するFX(外国為替証拠金)取引コンテストの発表会が21日、都内で行われた。 コンテストに特別参加するグラビアアイドルの滝沢乃南さん、山本彩乃さん、折原みかさん、山口愛実さん、佐々木梨絵さん の5人が顔をそろえ、シストレに挑戦する意気込みなどを語った。 同コンテストは、自分で作成したトレードソフトの機能を評価する「シストレソフト部門」と、 FX初心者でも安心の仮想マネーを使った取引を体験できる「トレード部門」で賞金総額2000万円を争う。 シストレ優秀ソフトは、最高2000万円までの範囲内で買い取りの可能性もあるという。登録受付は22日から。 仮想取引は6月2日〜09年4月30日までとなっている。 ▼トレード部門 初期資産500万円で、デモ取引のトレード収益を競っていただきます。 https://www.click-sec.com/corp/guide/demo/ www.fx-gp.com/about/ ▼賞金総額 ■社長特別賞(シストレソフト買取価格) 10,000,000円 ●シストレソフト部門賞 1位300万円 2位100万円 3位50万円 ●トレード部門賞 1位300万円 2位100万円 3位50万円 ●前期MVP賞 50万円 ●後期MVP賞 50万円
831 名前:NAME IS NULL mailto:sage [2008/05/22(木) 12:15:32 ID:???] >>824 >>828 PHP側でIPのチェックしたいならPrarのNet_IPv4 pear.php.net/manual/ja/package.networking.net-ipv4.php
832 名前:NAME IS NULL mailto:sage [2008/05/22(木) 12:26:36 ID:???] PrarじゃなくてPearでした。
833 名前:NAME IS NULL mailto:sage [2008/05/22(木) 19:08:36 ID:???] varchar (n)の使用バイト数はn+1とのことですが、それなら 本来は100文字までのデータしか入力しないカラムでも varchar(255)とtinytextの限界で作成しておいて、 アプリ側の入力チェックで100文字制限をするという方針はありでしょうか? 制限を100文字以上に拡張したくなったとき、アプリ側のチェックだけ直して テーブルは変更する必要がなくていいのではないかと思うのですが。
834 名前:NAME IS NULL mailto:sage [2008/05/22(木) 21:54:45 ID:???] >>833 の便乗質問ですが各データ型で使用するバイト長ってどこでわかりますか?
835 名前:NAME IS NULL mailto:sage [2008/05/23(金) 01:26:43 ID:???] >>834 dev.mysql.com/doc/refman/5.1/ja/storage-requirements.html >>833 別に自分のしたいようにすればいいんでね?(自分にとって、管理しやすいほう、扱いやすいほうで) ただ、fixed formatでテーブル作成してるんなら、discには実際使ってない部分の領域も書き込まれるけどね。
836 名前:834 mailto:same [2008/05/23(金) 01:41:31 ID:???] >>835 ありがとうございます!助かりました
837 名前:NAME IS NULL [2008/05/23(金) 21:38:08 ID:Dt8inalF] SQL文だけで、半角カナを全角カナにする方法(関数)って、ありますでしょうか?
838 名前:NAME IS NULL mailto:sage [2008/05/24(土) 02:02:00 ID:???] 搭載物理メモリ48Gのサーバーで、大きな単一テーブル(80G程度)を上手く扱う方法って無いですか? (そのテーブル対して、更新&参照&集計が頻繁に発生すします。) my.conf-hugeを元にいろいろチューニングを試してみたんですが、 io-waitが100%に刺さったまま、ハングしたようになり困っています。 開発当初はoracle案件で、ありきたりのチューニングだけで、問題なく動作していたのですが、 クライアントの方針変更で、急にMySQLで開発することになり、非常に難儀しています。 (ちなみに案件規模は、楽天クラスの商品在庫管理です。)
839 名前:NAME IS NULL [2008/05/24(土) 02:15:08 ID:/LSToqrf] その規模になると、MySQLでは、どうやっても無理。パフォーマンスや安定性の面でもお薦めしない。 クラに泣き付いてでも、オラクルに戻してもらえ。
840 名前:NAME IS NULL mailto:sage [2008/05/24(土) 02:20:15 ID:???] 単一tblって時点で何だかな〜… 大規模すぎてMySQLの範疇じゃないだろ
841 名前:NAME IS NULL mailto:sage [2008/05/24(土) 02:36:57 ID:???] >>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
844 名前:NAME IS NULL mailto:sage [2008/05/24(土) 03:39:53 ID:???] >>841 土下座て。 やるだけの事はやってちゃんと検証データとボトルネック、仕組み的に無理ですって事を踏まえた上で それでもなんとかしろと言うならやりますが、紆余曲折、最悪こういう想定事態になりますが よろしいですか?ってクライアントと折衝する人に言ってもらえばどうでしょうか。 自分の仕事は最低限筋の通った理屈を報告して折衝担当者に理解してもらうこと。 もちろん前向きにね。 自分の仕事を理解し、精一杯やるだけやってしっかりとこなした上で無理難題言う上司や客に必要以上の負担を強いられる道理はないでしょ? ただその事を丁寧にビジネス用語で当たり障り無く表現して相手に理解、納得してもらうよう「伝える」努力は必要ですけど。 私もそこまでのデータの運用経験はないけど、微力ながら言わせてもらうと ■ハード面 ・SASでRAID0+1 ファイバーチャネル使えるならそれに越したことはないけど。 => ディスクの読み込み速度が上がって結果的にMySQLの更新・参照・集計早くなります。 => バックアップできます。三世代管理くらいまではしたほうが幸せになれるかも。 => RAIDはライトキャッシュとBBUのついているものを使用 なるべくキャッシュは多い方がいいです。 2GとかつけれるのもあるけどRAIDカード選びは慎重にね。 ディスクはシークタイムがあるから10000rpmのもので秒間16コミットしかできない ライトキャッシュ積むといっぱいコミットできます ・レプリケーション => レプリケーションしているとは思うけど、なんとなくしてなさそうな節があるのでやって見て下さい。 スレーブサーバに参照を掛けるとスレーブの台数分だけ参照はバンバン早くなります。 ただし、マスターと完全同期ではないので入金処理等精度の必要な部分はマスターを使って下さい。 アプリケーション側でのスレーブ参照制御が面倒なら間にLVSでもなんでもいいからロードバランサー仕込むと吉 ・memcacheサーバ => 80G程度ならサーバ10台以内で構築できると思う 更新はライトスルーでMySQLにも書いて単純参照はmemcacheからすると涙でるほど早い。 但しきちんと両方更新されたか確認、制御する仕組みは必要。 ソフト面に続く
845 名前:NAME IS NULL mailto:sage [2008/05/24(土) 04:32:39 ID:???] ■ソフト面 ・設計の見直し => 詳細知らないので絶対とは言えませんが、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の事を 考えていた時期が三ヶ月ほどありました。 データもいっぱい壊しました。いっぱい怒られました。あぁ思い出したらトイレに行きたくなってきたのでこれくらいで。
846 名前:NAME IS NULL mailto:sage [2008/05/24(土) 04:38:50 ID:???] 追記:あっSUNが買収してオープンソースでなくなるんじゃなかったっけ?