前スレdat落ちしてたので立てた
基本的な技術ですが調べても わからないので質問させてください。 Nullと空白の違いがわかっておりません。 マニュアルによると Null…電話番号が不明 空白…電話を持っていない とありますが、 将来的に入れるかわからない・ どちらかというと値を入れない可能性が高い場合などは どちらを採用しておいた方が検索が高速なんでしょうか?
NULL
6 :
NAME IS NULL :2011/01/21(金) 17:35:11 ID:OMsdM3Xs
MySQLはDecimalでは符号も符号も1バイトとカウントされることがありますよね。 他のDBMSでも同じように符号を1バイトとカウントするものなのでしょうか。
phpとmysqlに詳しい人
今作ってるゲームで、ウェブから特定のテーブルにアイテムデータなんかの入れ込みをしたいんですが
最終的な部分で詰まってます。
コード修正できる人いたらお願いしたいです。
謝礼として5000WebMoney(5000円分)となります。
詳しくは中のファイルにサイトとデータベースファイル入れておりますのでご覧下さい><
http://www1.axfc.net/uploader/He/so/309832 ※ウィルスや釣りではありません
10 :
NAME IS NULL :2011/01/22(土) 01:26:01 ID:E4S0qg9W
質問です。 MySQLでテーブルをロックした場合、 別の人がアクセスすると、どうなるのでしょうか。 エラーが返るのか、ロック解除されるまで順番待ちなのでしょうか。
READロックの場合は Select 可能、更新はブロックされる(アンロックされるまで待たされる) WRITEロックの場合はSeelctも更新もブロックされる
12 :
NAME IS NULL :2011/01/22(土) 11:17:29 ID:E4S0qg9W
>>11 ありがとうございます。
> WRITEロックの場合はSeelctも更新もブロックされる
これもアンロックされるまで待たされるという認識でいいですか?
13 :
NAME IS NULL :2011/01/23(日) 17:30:36 ID:yOYPt3h9
C言語でMYSQL操作を書いています。 UTF8の可変文字列をselectで取得すると、 結果が必ず「??????????????」となってしまいます。 環境:Linux(Fedora core)
14 :
13 :2011/01/23(日) 17:31:38 ID:yOYPt3h9
何かオマジナイが必要なのでしょうか。MYSQLにログインして表示すると、ちゃんと表示されるのですが・・・ ソースの概略は次のとおりです。 mysql_query(&mysql_buf, "SELECT * from MYADATABASE"); result = mysql_store_result(&mysql_buf); for(count = mysql_num_rows(result); count > 0; count--) { record = mysql_fetch_row(result); printf("%s\n", record[0]); printf("%s\n", record[1]); printf("%s\n", record[2]); };
OSのTermの文字コードかmysqldの文字コードかCのソースの文字コードのどれかがおかしい気がする
16 :
13 :2011/01/23(日) 17:52:14 ID:yOYPt3h9
うーむ。OSのターミナル、MYSQL, Cのソース、全てUTF8で統一したんですがねえ。 MYSQLの設定事態は最初EUCJPだったので、UTF8に変更。 全てのDataBaseを削除後、DataBaseを作り直して、UTF8になっていることを確認。 そもそも、ポインタ(Record[0])から始まるデータをダンプしてみると、 全て0x3Fになっています・・・ ちなみに、文字列が日本語を含まなければ、ちゃんと表示されます。 朝からいろいろ調べたり試したりしていたら、もう日曜日が終わっちゃう。 何やってんだか<俺
>>16 あと、ドライバの文字コードも合わせないとダメ
ちなみに、文字コードを指定して、その文字コードに対応してなくてもエラーを出さないドライバもあるから確認したほうがいい
18 :
13 :2011/01/23(日) 18:04:23 ID:yOYPt3h9
ドライバというのは、MYSQLのC言語用ライブラリ(libmysqlclient.so )のことでしょうか。 たしかにその視点では見てなかったです。これから調べます。
20 :
13 :2011/01/23(日) 20:31:39 ID:yOYPt3h9
./configure --with-charset=utf8の後MYSQLのコンパイル中です。 CPU ATOMで遅い・・・もう30分経ったけどコンパイル終わらない。
21 :
13 :2011/01/23(日) 21:47:43 ID:yOYPt3h9
Make installでうまくいかない・・・ でも、別の方法で解決できました。 mysql_set_character_set(&mysql_buf, "utf8"); を入れたら、ちゃんと日本語文字列をselectで取得できるようになりました。
それが一番の正攻法だと思うぞ
23 :
13 :2011/01/24(月) 00:24:43 ID:F93vBYzp
結局、目的を達成できました。 スレ違いなので詳しくは書かないけど、 Linuxで録画サーバを立てています。epgrecというアプリを使っています。 MYSQLで全ての番組情報、録画情報の管理をやります。 私はそこから録画情報を引っ張ってきて、ファイル名を変えてみたり番組のジャンル別に シンボリックリンクを張ってみたりするツールを作りました。 変なところではまったけれど、予定どおり、日曜日中に終わってよかったよかった。ありがとうございました。
24 :
6 :2011/01/24(月) 10:53:04 ID:???
>>7 ありがとうございます。
勉強になりました。
25 :
NAME IS NULL :2011/01/24(月) 13:17:30 ID:4vFB0iAi
MySQLが立ち上がりません。 root権限で実行しております。 --- # /etc/init.d/mysqld start MySQL Daemon failed to start. mysqld を起動中: [失敗] # tail /var/log/mysqld.log 110124 13:12:11 InnoDB: Shutdown completed; log sequence number 0 44233 110124 13:12:11 [Note] 110124 13:12:11 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended # ls -la /var/run/mysqld/mysqld.pid drwxr-xr-x 2 mysql mysql 4096 12月 17 02:51 mysqld --- my.cnfを見たところ、mysqlユーザとして実行するようになっていたので、 書き込み権限はあると思います。 mysqldを実行したのに、なぜmysqld_safeで実行されるのでしょうか。 よろしくお願いします。 OS: CentOS 5.5
/etc/init.d/mysqldを叩いてmysqld_safeが実行されるのは正常 mysqld.logのもっと上の方を見ないとわからん
27 :
NAME IS NULL :2011/01/24(月) 19:03:37 ID:4vFB0iAi
--- # service mysqld start MySQL Daemon failed to start. mysqld を起動中: [失敗] # cat /var/log/mysqld.log 110124 18:59:48 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 110124 18:59:49 [Note] Plugin 'FEDERATED' is disabled. /usr/libexec/mysqld: Table 'mysql.plugin' doesn't exist 110124 18:59:49 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 110124 18:59:49 InnoDB: Initializing buffer pool, size = 8.0M 110124 18:59:49 InnoDB: Completed initialization of buffer pool 110124 18:59:49 InnoDB: Started; log sequence number 0 44233 110124 18:59:49 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist 110124 18:59:49 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended --- これでわかりますでしょうか。 mysql_upgradeを実行した場合は --- # mysql_upgrade Looking for 'mysql' as: mysql Looking for 'mysqlcheck' as: mysqlcheck Running 'mysqlcheck with default connection arguments mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) when trying to connect FATAL ERROR: Upgrade failed You have new mail in /var/spool/mail/root --- となります。
すいませんちょっと教えてください。 初めてMySQLをインストールしたのですが、 外部からODBC経由でMySQLに接続しようとすると 以下のようなエラーが出て、接続できません。 Connection Failed: [HY000] [MySQL][ODBC 5.1 Driver]Can't get hostname for your address なお、MySQL5.5 を WindowsXP SP3 にインストールしています。 Localhostから接続すると問題なく接続できました。 (CSEおよびACCESSで接続してOKでした。レコードの修正も可能でした。) ググってみたところ、 my.cnfファイルのとある箇所を修正するような記述が散見されたのですが、 わたしのサーバにはmy.cnfが見当たりません。 サンプルファイルも見当たりません。 なお、ユーザの接続設定は以下のようにしています。 mysql> select user,host,password from mysql.user; +----------+-----------+-------------------------------------------+ | user | host | password | +----------+-----------+-------------------------------------------+ | root | localhost | ***************************************** | | testuser | % | ***************************************** | | | localhost | | +----------+-----------+-------------------------------------------+ 3 rows in set (0.00 sec) どちらのユーザで接続しても失敗します。 なお、ファイヤウォールやアンチウィルス等のアプリケーションはすべてOFFにしています。 以上、なにかアドバイスをいただければ幸いです。 よろしくお願いいたします。
windowsにインストールしてんだったら my.ini なんじゃ? 標準でインストールしてんだったら C:\Program Files\MySQL\MySQL Server 5.5\ にあると思うけど 5.5になってるかどうかは知らないけどオレの5.1では Server 5.1\ってなってたからそうかなと w
30 :
28 :2011/01/24(月) 21:49:28 ID:???
31 :
29 :2011/01/24(月) 22:16:00 ID:???
32 :
28 :2011/01/24(月) 23:05:40 ID:???
>>31 俺の拙い英語力だと理解に時間がかかりそうな文章なのですが、
斜め読みした結果・・・・・・
つまり・・・バグ? ってことですか?
しらべたら私のの使っているバージョンは「5.5.8」でした。
>>27 /etc/my.cnf の [mysqld] セクションに
skip-grant-tables
をつけてもう一回service mysqld startを実行。
起動したらmysql_upgradeをかける。
あとmysql_upgradeはOSのmysqlユーザで実行すること。
最後まで通ったらservice mysqld stopして
skip-grant-tablesの記述を削除。
34 :
NAME IS NULL :2011/01/25(火) 07:52:00 ID:KWJnChon
>>33 おぉ!?
その方法で実行できました!
ありがとうございます!
すみませんが、理由教えてもらうことってできますか?
・mysql_upgrade実行しろってログに書いてあったのでする ・mysql_upgradeはmysqldが起動していないと動かない ・mysqldはmysqlデータベース内のユーザー認証関連テーブルが古くて起動できない状態 ・そこでskip-grant-tablesでユーザ認証機能をOFFにして起動させる ・起動したらmysql_upgradeを実行して各種内部テーブルを直す ・直った後はskip-grant-tablesは外してよい まあハマりどころかもしれない
36 :
NAME IS NULL :2011/01/25(火) 21:58:35 ID:xwMatVZn
SELECT `a` FROM `table` WHERE `key`='aaa' or `key`='bbb' or `key`='ccc' SELECT `a` FROM `table` WHERE `key` IN ('aaa', 'bbb', 'ccc') 同じ列をキーに、OR検索をしているのだけど、filesortになってしまう。 where in と or 両方試したのですが、複数指定したとたんにインデックスが使われなくなる。 a列、key列にインデックス作成済み。 実際の運用時、OR検索は多くなると100を超える可能性があるかもしれません。 今の状況だとまず実用は無理なのですが、いい方法はないでしょうか。
37 :
36 :2011/01/25(火) 22:04:41 ID:???
ざっと思いついた1つの方法で、 mysqlだけで解決させるのとは違うけれど、 SELECT `a` FROM `table` WHERE `key`='aaa' SELECT `a` FROM `table` WHERE `key`='bbb' SELECT `a` FROM `table` WHERE `key`='ccc' インデックスが有効になる単一のキー検索をした結果を、 cacheliteなどで一定時間保存しておき、 同じキーへのアクセスは再利用して、出力時に結果を結合する。 ということを思いつきましたが。 mysqlクエリで解決する方法がありましたらぜひ…。
SELECT `a` FROM `table` WHERE `key`='aaa' UNION ALL SELECT `a` FROM `table` WHERE `key`='bbb' UNION ALL SELECT `a` FROM `table` WHERE `key`='ccc';
二つのテーブルから抽出し合計値を表示したいです。 色々調べてsqlでは下記でできたのですが、 これをphpで処理をして表示させるにはどうすればいいのでしょうか? 例 t1 code|name| 001|aaa| 002|bbb| 003|ccc| t2 code|suuryou|id| 001|60|aa1| 003|10|cc1| 002|30|dd1| 001|25|bb1| やりたい事 code|name|goukei| 001|aaa|85| 002|bbb|30| 003|ccc|10| CREATE TEMPORARY TABLE TEMP_B SELECT code, SUM( suuryou ) AS goukei FROM t2 GROUP BY code; SELECT a.article, goukei FROM t1 AS a LEFT JOIN TEMP_B ON a.code = TEMP_B.code
Innodb hotbackup買おうと思って予算つけたら、なんかEnterprise用サブスクリプション買わないといけなくなってんだけどー(;_;)$5,000/年なんて無理だぽ
XtraBackupでがんばれ
レプリケーションについて質問させてください 家庭用のLinuxパソコンとYahoo!ADSL環境にてレプリケーションの練習をしてみたいのですが出来ますでしょうか? server-idにてサーバ毎に設定するのは分かるのですが、master-hostでマスターサーバ名 or IPアドレスを指定する所でどのようにすればいいのか分かりません IPアドレスはモデムからの動的アドレスになっていますし、マスターの方も特にレンタルサーバ等にあげているわけでもありません こういった自分の環境下ではどのような過程を経ればレプリケーション環境を作れルのでしょうか?
初めまして。誰か助けていただけませんか。 Select結果に対してupdateを行いたいのですが、うまいコマンドが見つかりません。 代替案としてSelect結果を一時テーブルとして格納して、それに対してupdateをかければ・・・ と思ったのですが、一時的にテーブルを保存することも見つけることができませんでした。 どなたかよろしくお願いします。
>>44 SELECT文の処理結果は(テーブルではなく)レコードセットでしかないから、
レコードセットをUPDATEする事そのものが不可能だよ。
もし一時テーブルを使うなら、一時テーブルへのINSERT文に
ソーステーブルへのSELECT節を組み合わせることで可能になると思う。
>>43 Linuxパソコンをもう一台買うか仮想化して家庭内でやればいいと思う
質問です innodbでinnodb_file_per_tableの設定をしてテーブル毎にデータファイルを作成するようにしているのですが、 テーブル毎のデータファイルを任意のサイズまで大きくする方法はありますか? (データファイルを大きくする理由はディスク上のファイルの断片化を避けるためです)
>>45 ,46
迅速かつ丁寧な解答をありがとうございました。今から試してみるつもりですが、
とりあえずお礼までにとレスさせていただきます。
>>49 機能としてはないと思う
ダミーデータをINSERTしてDELETEするくらいしか思いつかない
>>48 誤ってアンカーを外しておりました、申し訳ありません。
回答ありがとうございました。
その機能ほしいねえ
>>51 ,54
レスありがとうございます
innodb_autoextend_incrementという設定があるんですか。勉強になりました。
MySQL ヤンキーDQN PostgreSQL エリートビジネスマン どうして差がついたのか・・・ 慢心、環境の違い
ヤンキーDQNの方が年収が高い業界で何を言ってるんだろうか…
58 :
NAME IS NULL :2011/01/30(日) 21:20:08 ID:7GhU5U/J
START TRANSACTION UPDATE t SET value=1 WHERE id=1; UPDATE2 t SET value=1 WHERE id=3; UPDATE3 t2 SET value=1 WHERE id=1; COMMIT このようにトランザクションを使った場合、 各UPDATE文が実行される際にロックを取得すると思いますが、 ロックを取得するタイミングと開放するタイミングはいつなのでしょうか? START TRANSACTIONを開始した直後に、 tテーブルのid=1 tテーブルのid=3 t2テーブルのid=1 各行のロックを同時に取得して、COMMIT直後に全て開放する、 という認識で合ってますか? それとも各UPDATE文が実行される時に各々取得するのでしょうか? それだとトランザクションの意味が無いような気もしますが。
それ実現するにはSTART TRANSACTION叩いた瞬間に すべてのテーブルのすべてのレコードをロックすることになってしまうだろう > それとも各UPDATE文が実行される時に各々取得するのでしょうか? YES 何をやりたいかは知らんけど START TRANSACTION WITH CONSISTENT SNAPSHOT; を調べたら幸せになれるかも
60 :
58 :2011/01/30(日) 23:28:36 ID:7GhU5U/J
>>59 ご丁寧にありがとうございます。
でもそれだとロックを取得する意味ってあるのですか?
複数のSQL文をまとめて一つの単位として実行したいからトランザクションを使っているのに
途中で割り込まれたら意味が無いように思うのです。
それともロックとトランザクションは全く別の機能として考えた方がいいのでしょうか。
質問ばかりですみません。
START TRANSACTION WITH CONSISTENT SNAPSHOT;
これは私の環境で実行すると
Query OK, 0 rows affected
としか出てこないようです。。ドキュメント読んで勉強してみます。
割り込まれたくないなら、最初に SET TX_ISOLATION = 'SERIALIZABLE'; BEGIN; SELECT * FROM t WHERE id = 1; SELECT * FROM t WHERE id = 2; SELECT * FROM t2 WHERE id = 1; までやっておいて、それからUPDATEをかける
>>60 そのトランザクションが各テーブルに最初に触るのがUPDATEの時なんだから
そこで初めてロックをかけるだけで問題ない。
仮にトランザクション開始からUPDATEまでの間に他トランザクションが
テーブルに何らかの更新を行った場合と、トランザクション開始時点から
その状態だった場合とではトランザクションの結果に差はない。
失礼します。質問させてください。 Windowsのコマンドプロンプト上でjavaプログラムを実行したときMySQLの Select文の結果が表示されるプログラムを作りたいのですがうまくいきません。 誰か教えてくれませんか? 実行例↓ C:User>java Select +---------+-----------+ | pref_cd | pref_name | +---------+-----------+ | 1 | 北海道 | | 2 | 青森県 | +---------+-----------+
>>61 googleが1秒以内に検索結果を出してくるネット上で「そんなの知ってた」の後出しか…
ここまでの馬鹿は初めて見た
エスパー!出番ですよー!
同じテーブルをUNIONで結合すると、当然重複列が出来るわけですが、 それをサブクエリにしてSELECTすると重複が消える。 select * from ( select * from A where ... union select * from A where ... ) as u; こんな感じにすると結果はdistinctされたように重複が消えています。 何故ですか???
重複列じゃなくて重複行ね? サブクエリにしなくても消えると思うけど
68 :
NAME IS NULL :2011/02/04(金) 01:09:57 ID:aqeIqHcN
日本語文字列の前後にカーソルを動かすと、表示がずれるのですが、 対処方法はないでしょうか? たとえば、mysql -u test -pでログインした後、 select c1 from t1 where match(c1) against('夏'); と入力して、このコマンドの結果自体は正しく表示できるのですが、履歴を使っての 日本語文字列の修正がうまくできない場合が多いです。 環境はMySQL-server-5.0.87-tritonn(Fedora14)で、 Gnome-Terminalから行っています
69 :
68 :2011/02/04(金) 01:29:01 ID:???
それから、文字コードはUTF-8を使っています。 set names utf8;しても状況に変化はありません
CのAPIについてもここでいいんですか?
71 :
70 :2011/02/06(日) 13:44:35 ID:???
70ですが、総合よりもバージョンインディペンデントなスレに移動しました。 お騒がせしました。
>>68 とりあえずあるあるとだけ
回避方法は私も知らない
すいません、テーブルの内部結合によるSELECTはわかったのですが 逆に2つのテーブルに同じ値を挿入するときのINSERTがわかりません。 テーブルA… name_id(AUTOINCREMENT), name テーブルB… id(AUTOINCREMENT), name_id name_id は同じ値を持つ。 INSERT INTO テーブルA (`name_id` ,`name`) VALUES (NULL , 'foo'); このときにテーブルBのname_idを同じにするためには どうしたら良いのでしょうか??
last_insert_idでぐぐるといいよ
つまりテーブルBのname_idは、AUTOINCREMENTにする必要は無い。 というか、しちゃいけないというところでしょうか。
ここってMySQL信者しかいない系? PostgreSQLとか嫌い系?
phpMyAdminで標準となっている1ページ30行の表示数を 常に100行ぐらいに変えたいんだけどどこをいじるんだ? ローカルのphpMyAdminなのでどのファイルにでもアクセスできる。 多少スレ違いですまん。
rootユーザーのパスワードを設定しようと思い「mysqladmin -u root password 'root'」 としたのですが mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)' とエラーがでてパスワードを設定できません、どうしたらいいのでしょうか・・・
>>79 using password: YES
で試してみる。
かなり大きいテーブル3GiBほどのテーブルが壊れました。 repair table hoge としてみたのですが Not enough memory for blob at 3607767920 (need 1851466134) と出て失敗します。 メモリー使用量を抑えつつ 修復する方法、オプションとかってないですか? mysqlのバージョンは4.0.27です。 さくらのスタンダードプランのレンタル鯖です。
レンサバならあきらめれ。 バックアップからリストアするべし。
質問です パーティション切ったテーブルのパーティション名と区切り値を項目ごとにカラムで取得する方法はありますでしょうか? show create tableで定義は確認できますが、パーティション名と値を個別で取得したいです。
>>83 mysql> select * from information_schema.PARTITIONS where TABLE_NAME = 'ptest'\G
*************************** 1. row ***************************
TABLE_CATALOG: NULL
TABLE_SCHEMA: scott
TABLE_NAME: ptest
PARTITION_NAME: p1
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: 1
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: RANGE
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: id
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: 100
TABLE_ROWS: 0
AVG_ROW_LENGTH: 0
DATA_LENGTH: 16384
MAX_DATA_LENGTH: NULL
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: NULL
UPDATE_TIME: NULL
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP: default
TABLESPACE_NAME: NULL
*************************** 2. row ***************************
TABLE_CATALOG: NULL
TABLE_SCHEMA: scott
TABLE_NAME: ptest
PARTITION_NAME: p2
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: 2
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: RANGE
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: id
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: MAXVALUE
TABLE_ROWS: 0
AVG_ROW_LENGTH: 0
DATA_LENGTH: 16384
MAX_DATA_LENGTH: NULL
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: NULL
UPDATE_TIME: NULL
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP: default
TABLESPACE_NAME: NULL
85 :
NAME IS NULL :2011/02/10(木) 16:43:45 ID:eEqqb7a6
クエリキャッシュを最近知りました。 これって、同じselect文のばあい、2回目以降は最初の結果を返すってことですよね? マニュアルを読んでいたら以下の部分がよくわからなかったんですが >後でまったく同じクエリを受け取ると、サーバはそのクエリの解析と実行をもう一度繰り返す代わりに、 >クエリキャッシュから結果を取り出します。 >注意:クエリキャッシュから古いデータが返されることはありません。データが変更されると、 >クエリキャッシュの関連するエントリがすべてフラッシュされます。 これは最初のselect結果がキャッシュされた後にテーブル情報がupdateやdeleteされたら そのキャッシュは適用されないってことですか?
YES 不整合は起こさないようになってる ブログみたいに一度書いたらあとは読むだけみたいなシステム向きの機能
会社のWEBサービスを初めて1人で立ち上げたのですが、MySQLの知識が無くてヒヤヒヤの毎日です。 最近やっと1日のPVが30万ぐらいになったのですが、DBバックアップを全く行っていません。 ネットで調べてみるとレプリケーションという手法でデータ冗長化するのが正攻法のようです。 稼動済みのWEBサービスをレプリケーション化しても問題起きないでしょうか? また、正しいサービスの運営の仕方としては、やはり最初からレプリケーションするべきだったのでしょうか? 現状ではサーバー費用の問題もあり、サービス開始時は1台のサーバーにApacheもMySQLも全て詰め込んでおります。
ポスグレに変えるべき
>>87 >稼動済みのWEBサービスをレプリケーション化しても問題起きないでしょうか?
事前にバイナリログの設定をしていない場合、稼動中にスレーブ追加はできない
>正しいサービスの運営の仕方としては、やはり最初からレプリケーションするべきだったのでしょうか?
サービスの規模次第
技術的に頼る人がいないなら、偉い人と調整して
・毎週日曜4時にサービス停止
・mysqldを停止してdatadirをまるごとバックアップ
・5時にサービス再開
みたいなスケジュールを組んだ方がいい
サービス停止するまでも無い mysqldumpで十分だろ
>>90 ひどいアドバイス
それで解決するなら誰も苦労せんわ
93 :
87 :2011/02/12(土) 18:12:06 ID:???
返事が遅れてしまいすいませんでした。
返信してくれた方、ありがとうございます。
>>89 バイナリログという言葉自体初めて聞いたので、
おそらくレプリケーションは無理そうです。。
偉い人と相談して定期的にバックアップ取る方針で行きたいと思います。
cronでdatadirコピーしてしまえば自動化できそうですね!
とても参考になりました。ありがとうございました。
>>90 >>92 この方法は問題なのでしょうか?
ネットで調べるとmysqldumpという言葉もよく見たので候補にはあったのですが。
mysqldumpで整合性のあるバックアップをとる場合は
a)InnoDBしか使っていない前提で--single-transactionを入れる
b)MyISAMを使っている場合は--lock-all-tablesを入れてロックをかける
のいずれかを行う必要があって、
>>87 の質問文だけではどちらが適切なのかを判断できないし
b)案は更新SQLをストップさせるので実質的にサービス停止になる。
そこまで踏み込まないと回答できないのを分かってて
>>90 みたいな
答え方をすると「ひどいアドバイス」と言われる
その情報をもっと引き出す為の質問者の煽り 10年前からある手法だろ…
88が一番近道なのにな
97 :
NAME IS NULL :2011/02/13(日) 06:31:57 ID:BqWPrtr4
はじめまして。完全初心者で、一昨日からxamppでmysqlを使っています。。
コマンドプロンプトでmysqlをいじり始めたのですが、
日本語表示が文字化け(全部????になってしまう)してしまいます。
ひと通り調べて、my.iniをいじっているのですが、
ここ(
http://www.adminweb.jp/xampp/mysql/index4.html )や、
ここ(
http://a-programmer.blog.so-net.ne.jp/2007-08-18 )に書いてある方法で変更したら、
今度はxampp control panelの時点でmysqlが起動されなくなってしまいました。
コマンドプロンプトでのmysql起動時に、default-character-set=sjisと記述しても、
server charactersetとdb charactersetはlatin1のままで、
結局日本語が文字化けしたままになってしまいます。
どうすれば文字化けが解消されるのでしょうか。。
バージョンは5.5.8です。
どなたかご教授いただけたら幸いです。
よろしくお願いいたします。
98 :
NAME IS NULL :2011/02/13(日) 06:35:10 ID:BqWPrtr4
はじめまして。完全初心者で、一昨日からxamppでmysqlを使っています。。
コマンドプロンプトでmysqlをいじり始めたのですが、
日本語表示が文字化け(全部????になってしまう)してしまいます。
ひと通り調べて、my.iniをいじっているのですが、
ここ(
http://www.adminweb.jp/xampp/mysql/index4.html )や、
ここ(
http://a-programmer.blog.so-net.ne.jp/2007-08-18 )に書いてある方法で変更したら、
今度はxampp control panelの時点でmysqlが起動されなくなってしまいました。
コマンドプロンプトでのmysql起動時に、default-character-set=sjisと記述しても、
server charactersetとdb charactersetはlatin1のままで、
結局日本語が文字化けしたままになってしまいます。
どうすれば文字化けが解消されるのでしょうか。。
バージョンは5.5.8です。
どなたかご教授いただけたら幸いです。
よろしくお願いいたします。
>>98 MySQL 5.5から、サーバの設定としてdefault-character-setは使えなくなった。
代わりにcharacter-set-serverを使う。
default-character-setはMySQL 5.1の時点で非推奨パラメータになっている。
コマンドプロンプトでのmysql起動時にdefault-character-setを指定するのは
クライアント側の設定を変えるだけなので、関係ない。
100 :
NAME IS NULL :2011/02/14(月) 10:53:52 ID:ozbtbTzR
WorkbenchのDataModelingでDiagramを書いているのですが、複数のテーブルを同時に開く方法はありませんか? タブみたいになっているのに、新しいテーブルを開くと既存のタブに上書きされてしまって同時に開けません。 テーブルとレイヤーとか別の種類なら同時に開けるみたいなんですが…。 編集項目が名前と色だけのレイヤーとか開けても全然うれしくないですし、こんな糞仕様とは考えにくいのですが。
101 :
NAME IS NULL :2011/02/15(火) 22:53:59 ID:0ZefTt9S
本を読んでselectとかupdateとかのSQLは出来るようになったものの、 処理の高速化を前提にしたテーブルの効率的な構成はどうしたら良いのかわかりません。 たとえば、漠然とした質問で申し訳ないんですが、カラムが5つくらいのテーブルがあります (構成はこんな感じで> id[int,主キー,autoincrement]/数値[int]/数値[int]/テキスト[text]/datetime) こんなテーブルのデータが30万件に達した場合、バックアップや処理の高速化はどうしたら良いんでしょうか? 条件は以下のような状況です。 1)UPDATE処理,DELETE処理はほぼなし 2)全体へのSELECT処理はある というのは今食べログを見てたんですが、「口コミ120万件」て書いてるんですが、 120万行のログに対して select * from t_review where tenpoId=123 みたいなことやってるのかなぁと。 120万件なら平気だとしても1200万件になった時どうするのか、どういう処理や テーブル構成で対応できるのか知りたいなと思いました。 “「口コミをもっと見る」ボタンを押されることは滅多にないから limit 5 で立派な対応だ” っていうのでもわかるんですが、もっと技術的なノウハウを知りたいなと。。 本の紹介でも良いので、教えてくれると嬉しいです。 みんな、プロの人はどうやってそんなの勉強してるんですかね?
キャッシュ 適切なインデックスを張る memcached / KVS メモリにデータが乗るかどうか(乗り切れないとHDDへの物理アクセス発生して劇遅) などで調べてみると少し入り口が見えるかもしれません
103 :
6 :2011/02/16(水) 09:50:30 ID:XM7AGT4t
カラム数が80個ほどでレコード数が1000万件くらいのテーブルが 40個あります。 40個のテーブルには随時更新がかかる状態なんですが、 この40個のテーブルのある瞬間のデータを取得したい時って どうすればよいですか? データを取得するときには更新とかを行わせたくないのですが、 ロックするしか無いのでしょうか?
>>101 データ件数によるパフォーマンスの劣化を気にするなら、30万件なり1200万件なり用意して
テストしてみるのが一番だと思う。
技術的にどうしているって訊かれても、実際に近いデータを用意して色々試して、EXPLAIN
でその違いを調べる、の繰り返しかな。
本とかに書いてある知識は、その調査のための手がかりかきっかけみたいなもので、そのもの
ずばりとノウハウにはあまりなってない。少なくとも自分はそう思っている。
105 :
NAME IS NULL :2011/02/16(水) 10:12:12 ID:INPydtdt
主キーが数値で、件数が増えるごとに1,2,3,4…とauto_incrementされてくテーブルは よくありますが、この主キーを16進数や64進数にして10進数と同じ処理を実行することは 可能でしょうか? カラムの型をintにすると10進数になるから、他の何かにするのかと思ったんですが 調べてもわかりません。 無理でしょうか。 データのinsert時に64進数にしたidをプログラムで生成して入れていくしかない? それじゃ auto_incrementにならないですが…
intはいつから10進数になったの?
phpがmysqlにデータ書き込みしてる最中に pythonのプログラムも同じテーブルに重複して書き込みするとどうなるの?
プログラムの巧拙とテーブル設計の巧拙による・・・としか言いようがないな。
mysqlの排他制御を自動でしてくれるのはphpぐらい?
いやトランザクションなやInnodbがやってくれるじゃん
111 :
NAME IS NULL :2011/02/17(木) 13:53:32 ID:Q1IYVTaB
テーブルの主キー(autoincrement)のインデックスを1でなく10000からスタートさせるには どうやったら良いんですか?
ALTER TABLE tbl AUTO_INCREMENT = 10000;
113 :
NAME IS NULL :2011/02/17(木) 16:42:45 ID:CUZWRZbZ
不要なテーブルtbを削除しようとしたところ、外部キーの関係と思われるエラーで削除できません。 制約やインデクスの削除もできないため、試しに関連のfrmファイル等を直接削除(移動)してみました。 動作上は現在のところ何ごともないようなのですが、 別に管理データが残ったりなど、何か問題起こりうるものでしょうか。
114 :
113 :2011/02/17(木) 16:49:02 ID:CUZWRZbZ
(補足) 外部キーの参照テーブルはすでに削除されているらしく tbはどこからも参照されていない状況です
FROMがFORMになって全然気づかなくて困ったことあるヤツ挙手
mysqlは fromキーワードが指定の位置にありません って言われないのか
接続時間・負荷テストをしたいんですが、 みなさん数万件レベルのデータってどのように取得しているんでしょうか? MySQL データ 数万件 サンプルあたりで調べてもヒットせず…
趣旨がよく分からん プログラムでランダムに文字列作ってinsertするんじゃ駄目なのか? 数万行のinsertなら数秒で終わるだろ
適当に数十件程度の元データを作って、select,insertを繰り返していけば 倍々に増えていくから何件だろうが 作業自体は簡単。
122 :
NAME IS NULL :2011/02/18(金) 02:18:32 ID:AKSHwj8u
sqlでjavaの変数を参照するにはどうすればいいですか?
123 :
NAME IS NULL :2011/02/18(金) 23:57:07 ID:nVNzwfTM
MySQL5+PHP5で勉強している初心者です。 現在、架空の倉庫を想定して勉強しているのですが、 UNIONした後にJOINするとこでつまずいています。 phpで実行する前にphpmyadmin上でテストしているのですが… <商品リストテーブル> 商品ナンバー,商品名 <在庫テーブル> 商品ナンバー,ロットナンバー,在庫数 <出庫テーブル> 商品ナンバー,ロットナンバー,出庫数 上記のような3つのテーブルを用意しています。 まず、商品ナンバー毎の総合計数(在庫合計-出庫数)を出したかったので SELECT 商品ナンバー,SUM(在庫数) as 在庫合計 FROM ( SELECT 商品ナンバー,在庫数 FROM 在庫テーブル UNION SELECT 商品ナンバー,-(出庫数) as 在庫数 FROM 出庫テーブル ) as test group by 商品ナンバー で出庫データを反映させた現在庫数が表示されるところまで出来ました。 で、最終目的としては 商品ナンバー,商品名,在庫合計 と表示させたいので 商品リストテーブルをJOINしたいのですがなかなかうまくいきません。 どうすれば最終目的に辿りつけるのでしょうか? ご教示お願い致します。
> 商品リストテーブルをJOINしたいのですがなかなかうまくいきません。 どのようにうまく行かないのですか? どんなSQLを書いてみたかもわからないから応え難いです
125 :
123 :2011/02/20(日) 01:44:29.68 ID:???
言葉足らずで申し訳ありませんでした
>>123 から試行錯誤した結果、
SELECT * FROM 商品リストテーブル RIGHT JOIN(
SELECT 商品ナンバー,SUM(在庫数) as 在庫合計 FROM (
SELECT 商品ナンバー,在庫数 FROM 在庫テーブル
UNION
SELECT 商品ナンバー,-(出庫数) as 在庫数 FROM 出庫テーブル
) u1 group by 商品ナンバー) as test ON 商品リストテーブル.商品ナンバー=test.商品ナンバー
上記で一応は期待する結果が得られましたが、
これでいいものなのでしょうか?
>>123 「マイナス出庫数」を並べてSUMを取るって筋悪じゃね
mysql> SELECT * FROM item;
+---------+-----------+
| item_no | item_name |
+---------+-----------+
| 1 | apple |
| 2 | orange |
+---------+-----------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM stock;
+---------+--------+-----------+
| item_no | lot_no | stock_qty |
+---------+--------+-----------+
| 1 | 1 | 100 |
| 1 | 2 | 50 |
| 2 | 1 | 80 |
| 2 | 2 | 40 |
+---------+--------+-----------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM delivery;
+---------+--------+--------------+
| item_no | lot_no | delivery_qty |
+---------+--------+--------------+
| 1 | 1 | 15 |
| 1 | 2 | 25 |
| 2 | 1 | 35 |
| 2 | 2 | 45 |
+---------+--------+--------------+
4 rows in set (0.00 sec)
SELECT i.item_no, i.item_name, s.s_q - d.d_q total FROM item i,
(SELECT item_no, SUM(stock_qty) AS s_q FROM stock group by item_no) s,
(SELECT item_no, SUM(delivery_qty) AS d_q FROM delivery group by item_no) d
WHERE i.item_no = s.item_no
AND s.item_no = d.item_no
;
+---------+-----------+-------+
| item_no | item_name | total |
+---------+-----------+-------+
| 1 | apple | 110 |
| 2 | orange | 40 |
+---------+-----------+-------+
2 rows in set (0.00 sec)
こんな感じ
どなたか以下の問題エスパーしていただけないでしょうか。 InnoDBでINNER/LEFT OUTER JOINを30くらい(大半はINNER JOIN。ネストしてるものも有り。)つないでるSELECTが もっさりしてます。 EXPLAINで確認しましたがtypeは全てeq_refでした。 profilingで見てみるとstaticticsという部分が99%以上時間を占めているのですが パラメータ設定などで見直すべきところはどこでしょうか…? innodb_buffer_pool_sizeをデフォルト値から増加させたところ若干は改善しましたが、本当に若干でした。 join_buffer_sizeなど、説明を読む限り今回関係なさそうなパラメータも増やしてみたりしましたが、案の定意味が無いようでした。 また、上のクエリにさらにLEFT OUTER JOINを1つ(typeはref)を加えると 応答しなくなりました… 1つのテーブルにはそれぞれ数件程度しか登録しておらず、SELECTの結果も10件未満になるようなデータでテストしています。 試しにOracle XEで同じデータに同様のSELECTを投げてみると瞬殺でした。 MySQLのバージョンは5.1/5.5で試しましたがいずれも同じ結果でした。
>>127 30クエリバラバラにしたほうが早そうだな。
1つのテーブル内にあるフィールド2つをまとめて ひとつユニークキーみたい(重複不可能)に したいのですが、どうやるのでしょうか? MyISAMです。
>>127 MySQLでテーブル二桁JOINする時点でたぶんダメ。
Oracleと同じJOIN順になるようにFROM句並べ替えてSTRAIGHT_JOINつけてみて、
改善されないようならOracle買うかPostgreSQLで。
132 :
NAME IS NULL :2011/02/23(水) 23:45:12.50 ID:wqoyNLa8
質問させてください。 shell> mysql -u root -p としてパスワードを入力すると接続ができるのですが、 shell> mysql -u root -p < dump.sql Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) とリストアしようとすると、はじかれてしまいます。 これはなぜでしょうか。お願いいたします。
>>132 mysql -u root -pパスワード < dump.sql
だったらどうなる?
「MySQLは1つのクエリーで1つのテーブルに対し、1つのインデックスしか機能しない」 というのを見かけたのですが これって5.1でもそうなのでしょうか? 1つのテーブルに複数のインデックスをつけても意味が無いというわけ?
137 :
127 :2011/02/25(金) 00:19:10.67 ID:???
>>129 >>131 クエリをバラすと、テストデータ程度の件数に置いては他のDBMSと遜色ないレベルに
なることがわかりました。
が、データ量が増えた際の不安が残っておりますので、他のプロダクトへの
乗り換えも含めて検討したいと考えています。
ありがとうございました。
138 :
NAME IS NULL :2011/02/25(金) 10:37:31.19 ID:+dGHTk5o
今まで5.1.53とか使っていたのですが、MySQLの最新版5.5.9をtarで取りにいき ./configureしようとしたらコマンドが見付かりませんと出ました インストール方法変わったんですか? どうしても出来ないのですが cmakeとかになったとか見つけましたが、centOSにはリポジトリにcmakeは無いですし、コンパイル時の引数も今までの が使えなくなりそうだし
Aテーブルに、 c1, c2, c3, c4, c5, c6 という6個のカラムがあり、 このうち3個以上がnullでない行を取り出したいのですが、 SQLでどう表現すればいいのか分かりません。 分かる方がいましたら教えてください。お願い致します。
>>138 CentOSならRHEL用のRPMを使えばいいのでは
>>139 WHERE IF(c1 IS NOT NULL, 1, 0)
+ IF(c2 IS NOT NULL, 1, 0)
+ IF(c3 IS NOT NULL, 1, 0)
+ IF(c4 IS NOT NULL, 1, 0)
+ IF(c5 IS NOT NULL, 1, 0)
+ IF(c6 IS NOT NULL, 1, 0) >= 3
へーこんな書くんかー
144 :
140 :2011/02/26(土) 02:10:28.43 ID:???
>>141 ありがとうございました!
無事期待通りの動作を実現できました。
JOINとかサブクエリとかごちゃごちゃ使わないと無理だと思っていたので目から鱗でした。
145 :
139 :2011/02/26(土) 02:11:04.37 ID:???
すいません名前間違えました。
147 :
NAME IS NULL :2011/02/26(土) 20:51:10.32 ID:+NrYsy5E
>>103 InnoDBなら、トランザクション分離レベルを適切に設定してあげればできそう。
現場で使えるSQLという本のP221の 「商品IDを引数で指定し、その卸単価を商品マスタから取得するストアドプロシージャを作成せよ ただし、卸単価は引数に格納し、該当商品が無い場合は卸単価に-1、その他のエラーの場合は-2を格納せよ」 という問題にて、色々と試しまくって、結局 DROP PROCEDURE SP; DELIMITER $$ CREATE PROCEDURE SP ( IN id int, OUT price int ) BEGIN DECLARE CONTINUE HANDLER FOR SQLWARNING SET price = -2; DECLARE CONTINUE HANDLER FOR NOT FOUND SET price = -1; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET price = -2; SELECT 卸単価 INTO price FROM 商品マスタ WHERE 商品ID = id; END $$ DELIMITER ; CALL SP(15, @price); SELECT @price; とし-1が表示されました。 しかし、CALL SP(a, @price); 等とすると、-2と表示されるのかと思ったら、普通にエラーが出ました。 自分のSQL文がどこが間違っているのかご指摘願えませんか? そもそも、-2を出力するような、その他の例外と言うのがどういう状況の事を言っているのか分かりません。
既存のテーブルのcreate文を確認する方法ってありますか? ご存知でしたら教えていただきたいです。
>>150 どうやってバックアップとるんですか?
って聞いてくるだろ。
MySQLのデータフォルダで
rm -rf ./*
だな。/じゃないから優しいだろ。
>>149 >>150 mysqldump でバックアップを取得すれば、テーブルのCREATE文を確認できると言いたいのですね?
>>151 かなり優しいですね。これなら心も体もスッキリしますねw
MySQL Community Server 5.5.9のSolaris 10 x86_64用パッケージで DTrace使おうとしてるんだけど、mysqlプロバイダというやつが動きません。 # dtrace -p 741 -n 'mysql$target:::handler-rdlock-start' dtrace: invalid probe specifier mysql$target:::handler-rdlock-start: probe description mysql741:::handler-rdlock-start does not match any probes pidプロバイダなら動いてます。 # dtrace -p 741 -n 'pid$target::*ha_external_lock*:entry' CPU ID FUNCTION:NAME 0 65526 __1cHhandlerQha_external_lock6MpnDTHD_i_i_:entry 何か設定が必要なんでしょうか?
>>149 show create table テーブル名
5.5.8のファイル出力で権限エラーになります。 select * from TABLEはOKですが、 select * from TABLE OUTFILE 'C:/tmp/FILE.TXT' で次のエラーになります。 ERROR 1045 (28000): Access denied for user 'ユーザ'@'%' (using password: YES) Windows7でフォルダの権限はフルコントロールにしています。 フォルダの区切りは、/のほか\と\\でも試していますが同じです。 MySQLのユーザと同じ名前のアカウントはWindows7側にはありません。
MySQL側でそのMYSQLユーザーに FILE権限を与えていないんでしょ
すいません自己解決しましな
mysl 5.5.8 perl 5.12.3環境で日本語utfコードを扱っています。 DOS画面で、set names sjisは有効になりますが、 perl+dbiで、set names sjisがうまく効きません。 OUTFILEで出力しても、UTF8のままです。 何か他の設定が必要なのでしょうか?
mysql 1.7.3をwindows7で使っているんですが my.iniを変更しても、言語がlatin1のままです 環境変数も設定しましたが変わりませんでした どなたかお願いします。
MySQL5.5って実際のところパフォーマンス的にどうなの? 快適になってるの? 検索してもあんまり情報ないから使ってる人いたら教えて欲しい。
nullポ
EXPLAINすると確かにBatched Key Accessが効いてるようだ。 が、実速が変わったとはとても思えない。
すみません、C言語ライブラリの情報が少ないので質問させてください。 MySQL5.077、InnorDBのテーブルに、C言語のアプリケーションと、 Javaサーブレットから接続しています。 C言語側はmysql_real_connect()で接続後、select文しか発行しません。 Java側で追加、削除を行っています。 で、この環境でJava側でinsertした行をC側で検索しようとすると、 値を取得できない問題にはまってます。 eclipse等から同じ状況(先に接続した後insert、selectで追加された行を検索)で 結果が帰ってくるので、C側の問題かと思うのですが、 何か原因として思い当たるものはあるでしょうか? キャッシュを疑ってmysql_refreshやFLUSH PRIVILEGESを試してみましたが、 効果はありませんでした。
>>164 きっと凡ミスだと思うけど
・JavaでINSERTして別のJavaでSELECTするとどうなるか?
・InnoDBの場合COMMITしてるか?
ぐらい
166 :
164 :2011/03/04(金) 18:36:40.81 ID:???
>>165 アドバイスありがとうございます。
>・JavaでINSERTして別のJavaでSELECTするとどうなるか?
>・InnoDBの場合COMMITしてるか?
どちらも問題なしです。
C側もアプリを再起動するとSELECT結果が帰ってくるので、
どこかがキャッシュしてそうな感じなんですが・・・
普通は繋ぎっぱなしで問題ないものですよね?
167 :
NAME IS NULL :2011/03/08(火) 15:48:31.75 ID:8rW/XaEj
一度作成したユーザの権限を削除するにはどうしたらいいですか? grant all privileges on *.* to user@"host-name" identified by "password"; flush privileges; してから revoke all privileges on *.* from user@"host-name" identified by "password"; flush privileges; しても、 show grants for user@"host-name"; で確認すると GRANT USAGE ON *.* TO 'user'@'host-name' IDENTIFIED BY PASSWORD '*pass' とのこったままになります。
>>167 その状態でどのテーブルに対する何の権限が残っている?
権限のあるほかのユーザーをSHOW GRANTSして
表示内容を比較してみると?
あ、ユーザー自体を削除したいならDROP USERでおk
ニコニコ大百科というサイトがデータベースエラーで落ちたみたい エラーメッセージ データベースにエラーが発生いたしました。もう1度リロードしてみてください。(Can't connect to MySQL server on '192.168.69.101' (111)) ダメじゃん
170 :
NAME IS NULL :2011/03/08(火) 19:40:23.40 ID:8rW/XaEj
>>168 レスどもです。
show grants;
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD '*pass'
show grants for user@"host-2";
GRANT ALL PRIVILEGES ON *.* TO 'user'@'host-2' IDENTIFIED BY PASSWORD '*pass'
show grants for user@"host-2のipアドレス";
GRANT ALL PRIVILEGES ON *.* TO 'user'@'host-2のipアドレス' IDENTIFIED BY PASSWORD '*pass'
こんな感じです。
>あ、ユーザー自体を削除したいならDROP USERでお
drop user user@"host-2のipアドレス"で
>GRANT ALL PRIVILEGES ON *.* TO 'user'@'host-2のipアドレス' IDENTIFIED BY PASSWORD '*pass'
これが消えました。
これが理由でしょうか?
http://dev.mysql.com/doc/refman/5.1/ja/revoke.html "REVOKE は権限を削除しますが、user テーブル エントリのドロップはしません。それは DELETE か DROP USER を利用して"
usage権限って、全ての権限無しって意味っしょ。
http://dev.mysql.com/doc/refman/4.1/ja/grant.html だから、
>revoke all privileges on *.* from user@"host-name" identified by "password";
の後には、
>GRANT USAGE ON *.* TO 'user'@'host-name' IDENTIFIED BY PASSWORD '*pass'
これで当たり前。
173 :
NAME IS NULL :2011/03/10(木) 16:42:40.89 ID:mHQFBpTb
質問させてください selectしたデータを一部だけ別のテーブルに入れる方法ってありますか? 例:insert into table2 (aaa,bbb,ccc) select aaa as aaa,bbb as bbb,ccc as ccc from table1 この場合table1のデータがすべてtable2に入るのでaaaだけ別のデータを入れたいと思っています。 よろしくお願いします。
>>173 >selectしたデータを一部だけ別のテーブルに入れる方法ってありますか?
>この場合table1のデータがすべてtable2に入るのでaaaだけ別のデータを入れたいと思っています。
言ってる事違ってね?
あるクエリを実行して、mysqldumpみたいなスタイルの 出力を取得する方法はありますか? SELECT * FROM hoge WHERE a='unko'; ⇒ INSERT INTO hoge VALUES (a,b) AS ('unko',2),('unko',3),('unko',5),('unko',7); みたいな感じで取得したいかなーって
176 :
173 :2011/03/10(木) 20:52:37.61 ID:mHQFBpTb
>>174 間違ってました。ごめんなさい。
一部じゃなくて二部です。と言うことでよろしくお願いします。
177 :
NAME IS NULL :2011/03/14(月) 04:35:03.16 ID:gnWaLDBM
#sql-123_456e7.MYD #sql-123_456e7.MYI #sql-123_456e7.frm のようなファイルがデータベースディレクトリにあり、容量をかなり食っています。 このファイルは何でしょうか?
>>177 リペア中に強制終了したとき、そんな名前のファイルが残ってたような気がする。
>>178 1GBを超えてる。
>>179 インデックス作成時のテンポラリ、という情報が見つかりました。
強制終了時の残骸かな…と思ったのでさっくり消しました。
データベースは問題なく動いてます。
>>180 DB稼動中に消した?それとも停止してから消した?
>>181 止めてから消去。
rm -rf "#sql-123_456e7.MYD" で。
なんで -r が要るんだ?
perlのモジュールのDBD::mysql が正しくインストールできません。 この場所にどなたかお詳しい方はおられますでしょうか?
187 :
NAME IS NULL :2011/03/25(金) 01:33:34.95 ID:NIeHWslM
基本的なこと聞きますけど、テーブルをMyISAMにしている場合、 同時接続が100以上あった時、データが壊れたり INSERT/UPDATEが正しく行えない可能性はありますか?
>>187 素人だけど、
たぶんselectは大丈夫じゃないかな。書き込みはテーブルロックだから待たされる可能性ありか。
どんくらいで待ちが発生するかはやったことないからわからんが。
MySQL 5.5からはinnoDBがデフォルトだし、MyISAMでないといけない場合(全文検索とか)以外はinnoDB推奨らしい。
>>188 innoDB推奨になるんですか!?
自分はてっきりMyISAMが推奨(多く使われている)とばかり思っていました。
MyISAMでもLOCK〜UNLOCKの処理をするとロックをかけられるようですが、
ファイルロックと同じような感じだと思うので、
>>187 の点はどうなのかな?
っと思い、質問しました。やはりinnoDBのトランザクションが良いんですかね
いつの話してんだw
8年前だな
読み込み中心なら、速度重視であえてMyISAMを選ぶこともあるけどね
Webアプリなんかでアクセスログを保存する時は テーブルをInnoDBにして BEGIN→INSERT→COMMIT としてるけど、間違ってないよね?ね?
アクセスログをDBに突っ込んで何がしたいの?
1つのSQLなら別にトランザクション使わなくてもいいのでわ。
>>194 自分もDBにいれてるよ。そんなアクセス多くないから。
Archiveエンジンで。
OSSのシステム見ると、InnoDBにしているの多いよね
ログ程度ならMyISAMにしてるな。 トランザクションも制約も要らんもんね。
UTF-16は使えますか?
>>198 そうなの?俺はMyISAMのログテーブルを
これからInnoDBにしてトランザクションかけようかと悩んでいるんだけど
>>200 ログ以外のテーブルとの整合性が必須なほど大事な案件だったら、それもいいんじゃない?
>>200 ログ程度になんでトランザクションが必要なんだ?
アクセス過多でMyISAMのテーブルロック回避のためinnoDBの行ロックに変えるってんならわかるけど。
>>202-203 オンラインゲームみたいなの作ってて、ポイントのログを取得してるんだよ。
誰がどのゲームでいくらのポイントを得たかっていうログを。
今まではMyISAMで問題無さそう(に見えた)だんだけど、
今回リニューアルするから、どうしようかなと悩んでる。
リニューアルはアクセス過多が原因だったわけだし。
そりゃ単なるログじゃなくて、機能部だろ。
mariadbの話題はこのスレでいいの?
208 :
KOUZOU TAKAHASHI :2011/03/28(月) 16:13:38.27 ID:cdA0H2BD
MYSQLの質問はここでいいですか? よろしくお願いします
>>208 まず日本語を話せるようになってから来てください。
>>208 知恵袋か教えてGooへ行ってらっしゃい!
おまえらMySQLやってるのにMariaDBの話題がないのは事情を知らないだけ?
MySQLを実務で使っているからこそ今のところは様子見とか? Oracleフリーである以上のメリットってなんかあったっけ?
>>211 綺麗な姉ちゃんに育ったマイは嫁に行ったよ
ブサイクでforkなマリアは行くあてが無くてね、父ちゃんと二人暮しさ
前スレでも見たら?
SELECTで登録済みか確認後INSERTするより、 REPLACEした方が速い、というのを見たのですが、 auto incrementする項目がある場合でも、 REPLACEは使えますか? テーブル構造がこんな感じで… id(auto increment), name(unique), text"
適当なテーブル作って試してみればわかることだろ
>>215 それを言っちゃおしまいよ。
忙しすぎてそこまで考えられんのだろう。
ほら、擁護してやったんだからなんかくれよ。
このスレで質問書く暇はあるんだな
218 :
NAME IS NULL :2011/03/29(火) 16:41:05.61 ID:3WiGRkt7
【OS名】Linax 【PHPのバージョン】5.3 【連携ソフトウェア】MySQL 【質問内容】 チャーハン1 チャーハン2スペシャル チャーハン定食1 チャーハン定食1デラックス を引っ掛けたい こんな感じのデータを SELECT * FROM AAA WHERE menu LIKE 'チャーハン%' とすると、全部マッチしますよね。 それをチャーハン1とチャーハン2スペシャルだけ引っ掛けたいんですけど どうすればいいですか? おねがいします。
どういう理由で、チャーハン1とチャーハン2スペシャル をSELECTしたいのか・・・ その脳内、意味不明 君の質問に対する一般的な回答は、 SELECT * FROM AAA WHERE menu = 'チャーハン1' OR menu = 'チャーハン2スペシャル' こうなるな
先頭がチャーハンで始まるデータを引っ掛けたいんです チャーハン4とかチャーハン王様とか全部引っかかるような
定食を抜きたいならnotかな。 チャーハンの後が漢字のを除去したいなら正規表現使う。
>>220 > チャーハン4とかチャーハン王様とか全部引っかかるような
なら LIKE 'チャーハン%' でいいじゃん
>>219-222 うん。承知で聞いてみました。
もらったデータの分割が不十分だったので。。。
凄いテクニックを教えてもらえるかもと甘えてしまいました。
素直にデータの見直しをしてみます。
数万行あるけどwww
WHERE menu REGEXP 'チャーハン[0-9]+.*'
結局、質問者がどんな条件でどんな行をSELECTしたかったのかすら分からなかったというオチ
OS名を見ろ。釣りだ。
>>226 釣りじゃないです。
達人がみてそうなので聞くけど、
while ($rows = mysql_fetch_array($result, MYSQL_NUM))
などで、その時に参照している行と、1行先の行を比較する時は
どうすればいいですか?
お願いします。
一行先と比較ではなく、 一行前と比較すればよい
>>228 ありがとう。
脳味噌を塩水で洗ってくる。
>>226 >OS名を見ろ。釣りだ。
あえてスルーしてたんだけど、改めて見るとおもろいわ
【OS名】Linax
>>230 ごめん。スルーしてよw
ただのtypoというか脳がカビてた。。。
なんなら"TOTO"でもスルーしてw
+id+-pra-+--sab--+ | 1 | 牛丼 | ネギ濁 | | 2 | 牛丼 | ネギ濁 | | 2 | 牛丼 | + 生卵 | | 3 | 牛丼 | 生 卵 | id2を一行として出力するのはどうすれば良いですか?
233 :
232 :2011/03/30(水) 00:11:35.65 ID:???
出力というか、同一データとして処理するにはという事です。 | 2 | 牛丼 | ネギ濁 + 生卵 | こんな感じで。
そんなのはSQLの仕事じゃない ストアドでも書いとけ
sab ww
sabの型ををvarchar(10)ぐらいにして”ネギ濁 + 生卵”という文字列をデータにする
238 :
NAME IS NULL :2011/03/30(水) 21:55:30.96 ID:7xrkyPyI
すみません、意味の分からない質問かも知れないですが、 mysql用のポート(3306)があると思うんですが、これは別のサーバーから別のサーバーの中の mysqlを操作する時に必要なんでしょうか? 同じサーバのwebアプリからのみ使うときは開放しなくてもいいものですか?
240 :
NAME IS NULL :2011/03/30(水) 23:29:31.63 ID:7xrkyPyI
>>239 ありがとうございます
知識不足でよくわからなかったので、その127.0.0.1:3306をキーにググってみたら
接続対象ホストとしてlocalhostを127.0.0.1:3306に置き換えるというのがありました
localhostでも127.0.0.1:3306でもどちらでも大丈夫ってことでしょうか?
ためしに、今mysqlで動いてるサービスで接続ホストに127.0.0.1を指定して、iptablesで
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j DROP
を設定したんですが、無事にsql実行できています
ポートが閉じてるから動かなくなるのかなと思ったのですが…
考えていること、まったく勘違いしてるんでしょうか?
また、最初からiptablesには
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
なんてなかったですがmysql動いていました
>>240 RH-Firewall-1-INPUT というチェインはlocalhostからlocalhostへのアクセスに関係してるのか?
基本的にデータベースへの操作はコネクションを確立し、通信で接続して操作をおこなうようにできています。 なのでポート:3306は開放しなければいけません。 ただ、mysql側の通信を受け付けるIPアドレスの設定をlocalhost(127.0.0.1)に設定し、それ以外のIPアドレスからの接続は受け付けないようにしなさいという意味です で、iptableの解説 ”-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j DROP” ↑これは確かに3306番ポートは閉じているのですが さらに同じ設定ファイルの先頭のほうに次のような設定は書かれていませんか? ”-A RH-Firewall-1-INPUT -i lo -j ACCEPT” ↑これは”-i lo”つまりlocalhost(127.0.0.1)からの通信はすべてACCEPTにしますという設定です なのでMysqlがインストールされているホストからはSQLが問題なく実行されているのです。 わかる?
243 :
238 :2011/03/31(木) 02:05:05.72 ID:???
>>241 うう、iptablesの知識不足でわかりません。お恥ずかしいです。
勉強し直します、ありがとうございました
>>242 なるほど!凄くわかりやすいです
たしかに「-A RH-Firewall-1-INPUT -i lo -j ACCEPT」と書いてありました、わかりました
簡単なmysqlの使い方みたいな本見て触ってただけなので、
ポートとかiptablesとの関係なんてのってないし考えたこともなかったです
聞いて良かったです、ありがとうございました。勉強します
socket使用でもいるんだっけ? skip-networking!!!!!!
246 :
NAME IS NULL :2011/03/31(木) 12:31:13.88 ID:DLbNnEWK
ユーザーテーブルにbirthdayカラムが格納されており、 このデータを元に毎日どのユーザーが誕生日なのかを検索したいと考えています。 具体的には以下のような感じです。 SELECT * FROM users WHERE date_format(birthday, '%m%d') = [今日の日付]; 毎日実行することになるためbirthdayカラムにインデックスを貼りたいのですが、 上のように、birthdayを直接使うのではなく関数の入力として使う場合でもインデックスは有効になりますか? もしならない場合は解決法などあるのでしょうか? よろしくお願い致します。
>>246 > 関数の入力として使う場合でもインデックスは有効になりますか?
ならない。
> もしならない場合は解決法などあるのでしょうか?
あらかじめbirthdayから年を抜いて文字にした列を作っておく。
alter table users add column (birth_mmdd varchar(5));
create index idx_users_birth_mmdd on users (birth_mmdd);
update users set birth_mmdd = date_format(birthday, '%m/%d');
select * from users where birth_mmdd = [今日の日付];
248 :
246 :2011/03/31(木) 15:01:42.69 ID:DLbNnEWK
>>247 ありがとうございます!
なるほど、カラムを増やさないといけないのですね。。
データ量が増えるのが少し怖いですがやってみます。ありがとうございました。
>>246 MySQLには詳しくないが[今日の日付]の型をbirthdayに合わせればいいのではないのか?
SELECT * FROM users WHERE birthday = 日付型に変換([今日の日付]);
で、birthdayにインデックスを貼る。
いや、毎年のことだからね DBに1984/3/31って入ってたら3/31部分で マッチングかけないといけないから フィールド側に演算が必要になる
>>246 SELECT * FROM users WHERE birthday LIKE '%/3/31';
>>252 必要ない。
データベース検索速度なめすぎ。
1万人ぐらいならインデックスなくても平気だろうね。 ただ高性能サーバを使っても インデックスありの性能>インデックスなしの性能 が変わるわけではなく東京電力にやさしくない
件数もハードスペックもわからない状態でパフォーマンスについて言い切るアホを見た。
>>253 俺もレコード数30万件程度のテーブルにLIKE検索かけてるけど4、5秒程度で終わる。
しかも今日の誕生日の人検索ってことは1日1回だけの検索ですむんでしょ?
それだけのためにindexは付ける必要はないと思います
>>256 俺は同じ処理に、PHPがメモリ不足になるんだが・・・
さくらの専鯖だけど、PHPの書き方に問題あるのかな
>>257 検索結果が多すぎるんだよ
LIMIT 0 , 100 で検索結果を小分けにしろ
全部のフィールドにインデックスつければどんな検索でも快速になりますか?
たった30万件で4,5秒って恐ろしいぐらいに遅いな 俺は1000万件以内で1秒以上は全てバグ扱いしてるわ
>>260 1000万件でインデックスもつけずに常に1秒未満って、よっぽど素晴らしいマシンをお持ちなんですね。
羨ましい。
1000万件のレコードだけどフィールドはidしかないからね
素人設計の神髄を見た
僕の人生をMySQLに全て格納したい 僕が死んでも僕が成し遂げた偉業を後世に残したい akiyan
じゃぁ俺はPostgresに格納することにする
>>265 それならスキーマレスで柔軟なMongoDBを進める
>>265 エクセルサイズの人生なのにもかかわらずか
270 :
NAME IS NULL :2011/04/01(金) 22:04:36.50 ID:5mLjWvkY
種別dateをmdb2で `birthday` BETWEEN '1900-01-01' and '2000-03-01' のようにやると範囲指定して抜き出せるんですが、 これを頭の四桁は問わず、後ろの2桁、2桁がこの範囲内の場合、という抜き出し方はできませんでしょうか? 具体的には星座で絞込をしたいので、 01-20 と 02-18の間、というようなのだけを出したいです。
`birthday` BETWEEN '2011-02-15' and '2011-03-15' じゃだめなの?
>>271 それじゃ赤ちゃんしか引っかからないじゃん
273 :
270 :2011/04/01(金) 23:09:06.89 ID:5mLjWvkY
自己解決しました 最小の生年と最大の生年を取得して、 その間をforでまわして $horobetween = $horobetween." or `birthday` BETWEEN '$i-$date' and '$i-$date'"; ($iが最小の生年から最大の生年まで増えていく) みたいにやってwhereを複数にすることにしました
Drizzle 1.0 と MySQL 5.5 はどっちが強い?
プライマリーキーをIDに設定して EXPLAIN SELECT ID FROM table WHERE data IS NOT NULL とやったらTypeがALLになったんですが、このまま使っても問題ないでしょうか。 もっといい方法あったら教えてほしいです。
一人の初心者(自力で学習する気力を持たないタイプ)が、とことん楽して解決しようとする場に・・・
>>275 自己解決しました。
複合インデックス貼ったらインデックス使われました。お目汚しすみません。
>>276 なんでIT系の古い奴ってこういう考え方してるやつが多いんだろ
だから優秀な人間がみなIT系から逃げていく。結局土方レベルの人間しか育たない。
基本的な技術はストレートに答えを教えてやるほうが先につながっていくのにな
>>279 なんで今時の若造ってこういう考え方してるやつが多いんだろ
自分で考えて解決しようという気構えが見られない。そんな奴は結局使い物にならない。
基本的な技術は自分で本でも読めばマスターできる。その程度のことをいちいち人に聞いてるようでは先はない。
>>281 ×ゆっても
○いっても(言っても)
日本語もまともに使えないようなガチゆとりはこれだから
何れにしても、脊髄反射で
>>276 みたいに 自分で調べろ が頭をよぎる奴は
気を付けた方がよい。 明らかに2ちゃん脳である。 特にIT系板におおい2ちゃん脳である。
俺も
>>279 側の人間だな
質よりも数。数が多ければ質の高い奴もいつのまにか現れる。いまのIT業界の産業構造は最悪だ
>>280 のように技術の伝達もしないまま足の引っ張り合いばかりしてるから新しい技術や発想も生まれてこない。
いい発想やアイデア持ってる奴はたくさんいるのに、みんな離れてく。かなしいことですね
>>276 そういって若い奴が育ってこなけりゃ自分は新しい技術を勉強しなくても、でかい面してられるっていう作戦だろ?
うん、よくある、よくある。
でもここ会社じゃないし。若い奴を育てる必要ないし。 若い奴が育つと俺の仕事なくなるし。 ということ
>>284 いや、どの業界に行ったって一緒だからw
どんな質問にも簡単に答えてもらえ、自分で物事を考える必要がないような
くだらない業界に行きたいのならご勝手に。
IT業界の行く末を案じていただかなくても結構です。
>>288 そうは言ってもヒントぐらいは出すよ。
じゃないと後継が育たないじゃん。
ここは会社じゃないので後継を育てる必要がない むしろ育たないほうがいい
どうして?そうやってMySQLが発展していったり、使う人が増えればいいじゃん
>>287-288 フリーソフトウェアやGPLについて、社会的貢献という視点でどう思われますか?
293 :
NAME IS NULL :2011/04/03(日) 03:59:42.14 ID:kwd0MNCA
質問させてください。
http://q.hatena.ne.jp/1172390238 ここの3レス目に
どうしてもLIKEや!=でしか現せないような式の場合のみLIKEや!=を使うようにすればいいかと思います
とありますが、 != って多用するものではないのでしょうか?
!= をindexの使える他の形のクエリに書き換えるとしたらどのような書き方になるのでしょうか。
ご教示いただけると幸いです
>>293 != の代替は X<n AND n<X
ちなみにこれを括弧で囲みたくなると思うが、括弧の数も可能な限り減らすこと。
>>291-292 2chのスレごときで社会的貢献とか語るのはおこがましいということに気づかないのか?
お前らは後継者である未来ある若者の代表じゃなく、ただのクズの集まりだと自覚せよ。
298 :
292 :2011/04/03(日) 10:39:38.15 ID:???
>>295 そんな質問してないけどなぁ。 フリーソフトウェアやGPLについてどう思うか
質問してるんだが答えられないのかい?
そうやって脈絡のない質問するからおまえは空気が読めないと周りから思われてるんだよw
>>299 あんた見聞狭そうだねーw 会社で虐げられてるんだろうけど掲示板だけじゃなく会社でも強く生きろよw
春休みか・・・
大学受験英語のスレに、「This is a book.のisって何ですか?」とか質問してこいよ、ゴミクズ。
喧嘩はよくないと思います
知恵袋、okweb、2ch、どれも同じくらい低レベル。 まだ2chには知識ある人がスレにいるからアホな質問には厳しい。
>>303 isも知らないんだ・・・かわいそうに。
自分で質問する勇気が無くて他人任せですか?
だからゆとり世代とか馬鹿にされるんですよ。
質問が低レベル杉だということを忘れてないか? 誰しも迷う問題であったり、間違えやすい事だったりすれば、初歩的な質問でも人から教わってもいいと思う。 だが、ここ数日沸いて出た質問者は、ただ単にラクしたいだけとしか思えないほど低レベルだ。 空気読めずに、まだ質問してやがるしな
カリカリしなさんな
310 :
293 :2011/04/04(月) 02:22:03.10 ID:ORXRnSlM
>>294 ありがとうございます。けっこう面倒なことになりそうなんですね・・
自分が今までやってきた中では!= の代替として X<n AND n<X を使うようなのって
見たことなかったのですが、結構これって常識なのでしょうか?
↑ほんとコイツ空気読めねえな・・・ 質問内容はバカだし
じゃぁほっとけばいいだろ。 そうやって初心者をいじめて楽しいのか? ちょっと知識が着いたらすぐに図に乗りやがって。最近の若者はこれだから全く。
>294 名前:NAME IS NULL[sage] 投稿日:2011/04/03(日) 06:34:20.18 ID:???
>
>>293 >!= の代替は X<n AND n<X
>ちなみにこれを括弧で囲みたくなると思うが、括弧の数も可能な限り減らすこと。
だれも突っ込まないのか?
5.5.8で、selectの結果をOUTFILE文でファイル出力してます。 そのときの文字コードを、SJIS,UTF-8と任意に指定したいのですが、 set names xxxを実行しても画面出力は変わりますが、 ファイル出力はデフォルトの文字コードでしか出力されません。 デフォルトは変更できませんので、iniファイルを変更することなく、 ファイル出力をコマンドラインから変更したいのですが、 どのように指定すればいいのでしょうか?
315 :
NAME IS NULL :2011/04/04(月) 12:18:54.59 ID:MneC9twQ
データを全件取得場合は以下のsqlをどのように書き換えればよいでしょうか SELECT * FROM `{TABLE_NAME}` LIMIT 0, 30
解決しました LIMITから後を削除したら取得できました
PC知識が付いてくると、自分は偉いんだ と勘違いし始める人間は多い。 自分はそうならないようにしたい。 プロ野球選手も飲み屋に行けばただのおっさんなのですよ。
>>317 自己弁護するな アホのくせに
こうも低レベル過ぎる質問をよくも立て続けに出せるもんだ・・・
自分が偉いとかいうハナシじゃねえよ
オマエがアホ過ぎるだけだ
>>317 アホを育てる意義を感じてる奴もいるようだ
そんなアホ担当が答えてくれるさ
>>318 掲示板に よくこんなアホな文面書き込めるよなぁ。 コツ教えてくれよ
どうあっても他人に答えを求める低レベル脳君が、ついに暴走し始めたようだな。 さらにまた「教えてくれ」ときた。
だからな、「教えて」って言う奴には教えればいいし、 「教えたくない」って思えば教えなくて良いんだよ。 こんなの誰だって出来るだろ。
さあ、アホ担当の方々 そろそろ出てきて、低レベル脳君にいろいろ教えてあげて下さい 今回はアホな文面を書くコツを教えてほしいそうです
質問書きにくいからお願いだから荒らさないでください
傍観するつもりでいたけどさすがに最近質問連発してる
>>325 もどうかと思う
空気読めない彼は、さらに質問する気マンマンだしな・・・
質問内容はカスそのものだし困ったもんだ・・・
>>324 >今回はアホな文面を書くコツを教えてほしいそうです
低レベル脳君の質問文章そのものがアホなので、自身の文章が一番参考になるってオチだな
sqlのsとpとlって、それぞれどういう意味ですか? 優しく教えてくれる人、なんて答えてくださる?
>>326 本当に傍観してる人はこんなレスしてない
supper query language
だからpは含まれてないってば。
データベース言語国際標準としてのSQLは何かの略語ではない[1]。 ^ SQLは、Structured Query Languageの略と思っている人やそう紹介しているサイトも少なくないが、多くの場合、これは正しくない。 IBM社がかつて提供していたSQL/DSなどのRDBMSのSQLなら、これで正解である。一方、標準SQLは、IBM社のRDBMSのDB2の仕様を多く取り入れており、影響を受けていることは疑いようもないが、「SQLは、何かの略語ではない」としている。
バカだなあ、釣りの質問にまともに答えちゃって よく読めってのpq あんたら、おちょくられてるのに気がつかないの?
>>335 あんたこそ、人を疑うのは良くないことだよ。
このスレで釣りの質問をする人なんているはずがないじゃないか。
低レベル過ぎる質問の数々が、釣りそのものなんだけどね テヘッ
むしろ、高レベルの質問が未だかってあったのだろうか
じゃぁ試しに何か高レベルな質問してみてよ
いいのか? 死んでもしらんぞ?
何このくだらない会話
イヤなら見なきゃ良いだけのもんだろよ 理解しろっての
何を理解すればいいのか理解できないのですが
教えたくなければ教えなければいいだけ! とか、当たり前の事をゴチャゴチャ言いたがる奴だから察してあげて
言いたがるだけなら放っておけばいいが言ってしまったら放っておけない性分です
役に立たないレスばっかり
お前モナー
どうりでこのスレにキチガイが多いわけだ
お前らモナー
おっさんって何で場違いな所で身の上を話したがるんだろうな
おっさんだから。先が無いから。昔の栄光だけが心の支えだから。
正直どんなに困っていようと軽く困っていようと、質問内容がきちんとしてればそれでいいんだがなぁ。
つべこべ言わずに黙って回答すりゃいいんだよクズが
っていうか、適当に持ち上げて旨くその回答者を乗せて使うってのも知恵だよ。 旨く乗せれば無駄にプライド高いから頑張ってくれるだろ? そういうのをうまく使えないのは優秀ではないよね。
>>351 逆に言えば若年は経験も浅く、結果がまだ出ていなかったりで 話すほどのものがたいしてない
荒らしてるのは質問してる人でも回答してる人でもないんだな プライドだけが高い人が上から目線でスレを汚しているだけ 高レベルな会話がしたいのならレベルの高い人が集まる場所に行けばいいよ
ナントカとハサミは使いようって奴だよ。 まぁ本当にプライドだけで使えないのも居るけど、ナントカからでも有用な物を搾り出すのも技術。 このスレがどうかってのはまた別だけど、調子乗せてアレコレ動くような書き方ってのがあるだろ?w で、レベルが低いっていうなら、高い場所を選ぶってこともまた頭使うって事だよな。 間違っても「黙って答えろ」って言って機嫌よく乗ってくる奴は中々いないぜw
ここで文句を書き並べてる奴ら、 全員、Suiton したい と、思うのは私だけでしょうか?
お前も文句書いてる件
俺は、おめぇらみたいなパソコンオタクじゃねぇ。
>>362 普通の奴が言ってもだめだよー。キチガイジジイがテメェ棚に上げて見下す視線が笑いどころなんだからw
流石に「お前みたいな頭の悪いキチガイじゃねぇ!」って言い返したくなるわなw
詳しくなくても私信をMLに投げるか?もう、常識とかってレベルでおかしい。
ttp://twitter.com/fcr1228 あわてて名前だけ変えてもねぇ?w自分のおつむ棚に上げて酷ぇこといってるよw
まともに呟けもしないのにWebサーバにデータベースねぇ?w
こういうのを見ると、MLとかより2chの方がいいと思える。
大差はないだろ?あっちは「荒らされる」こっちは「荒れる」 でも、こういう荒れ方ってある意味平和だと思うよ。 誰も本当は困ってないから、質問であふれないんだからさ。 見た感じはよくないけどなw
見た感じが良くないとか決め付けてんじゃねよw そういうお前の書き込みが荒らしだと自覚しろ
>>365 個人的には「荒らされる」は不健全で「荒れる」は健全だと思ってる。
まあどうでもいいけど
自分が知ってる事に対して質問する人を荒らし扱いするキチガイが1匹
ガキの相手は疲れるぜwハ〜
372 :
NAME IS NULL :2011/04/08(金) 16:29:58.28 ID:dnOIIUgb
インデックスの種類のUNIQUEの使い道がいまいちよくわかりません。 UNIQUEじゃなく、PRIMARY_KEYではいけないのでしょうか? 既にPRIMARY_KEYが存在しているけど、別のフィールドでユニークを保証したい場合に使うのでしょうか?
SQLに関する質問全般を荒らしと認定す
>>372 > UNIQUEじゃなく、PRIMARY_KEYではいけないのでしょうか?
PRIMARYはUNIQUEかつNOT NULL。
NOT NULLであることが分かっているならPRIMARYにしてもよい。
> 既にPRIMARY_KEYが存在しているけど、別のフィールドで
> ユニークを保証したい場合に使うのでしょうか?
既にPRIMARYがあるテーブルに追加でUNIQUEを作るケースは
テーブルをきちんと正規化してればあまり発生しない、はず
>>373 頼むからIPかコテハン付けて
あぼんしとくから
>>375 誰がIP晒すかよw
テメェこそID出しやがれ
オートインクリメントすると思うけどそれだとユニークじゃなくてプライマリキーじゃないとダメジャン
378 :
372 :2011/04/08(金) 17:43:57.27 ID:dnOIIUgb
ほとんどがPRIMARY_KEYで済むので、UNIQUEっていつ使うのだろうと思っておりました。 NULLを格納したい場合に使うのですね。 と、同じ会員IDを登録できない仕様のものがあるとして、通し番号はPRIMARY_KEY+AutoIncrement、つけるのなら会員IDはUNIQUEという認識でよろしいでしょうか?
>>375 俺のIP(アドレスな)は
127.0.0.1
だ。頼むからクラッキングとかしてこないでくれよ。
>>379 ひゃっはー よし、いまそのアドレスでアクセスしたらネットワークドライブを見つけたぞ
FORMATされて泣きついてきてもオレはもう知らんからな
Mac初心者質問スレッドで誘導頂きました。 質問させて下さい power bookG4 OSバージョン10.5.8を使用しています。 macportsを利用してmysql5をインストールしました。 $ sudo port install mysql5-server port version 1.9.2です。 インストール自体は何ら問題なく完了し $ sudo -u _mysql mysql_install_db5 で初期化も問題なく完了しました。 mysqlの起動も問題なく完了しました。 $ sudo /opt/local/share/mysql5/mysql/mysql.server start Starting MySQL SUCCESS! 無事起動したので $ mysql5 -u root を実行したところ ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) アクセスがはじかれてしまいます。 同じく $ /opt/local/lib/mysql5/bin/mysqladmin -u root password 'hogehoge' $ /opt/local/lib/mysql5/bin/mysqladmin -u root -h MacPPC.local password 'hogehoge' を実行しても同じエラーではじかれてしまいます 。 おそらくmysql.userを編集しないとどうしようもない状況なのでしょうが アクセスがはじかれてしまいどうしようもありません。 それともDHCP環境下で使用しているのが問題なのでしょうか。 よろしくお願い致します。
>>383 $mysql5 -u root -p
でもだめ?
>>384 さん
だめでした。
$mysql5 -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
だそうです。
そもそもrootパスワードを設定する、
/opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'
/opt/local/lib/mysql5/bin/mysqladmin -u root -h MacPPC.local password 'new-password'
を実行すると
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
でアクセスがはじかれてしまう状態なので -pオプションを付けても
現状ではpassword自体がない状態にあると思います。
もうportsでのinstallはあきらめなくてはならないかもしれないので、
MacOSX PPC用mysqlバイナリの配布先ご存じの方はいらっしゃいませんか?
私の探し方がへたくそなせいで x86, 64-bit しか見つけることができませでした。
よろしくお願い致します。
>>385 自分もmacportsでいれたけど問題ないな。
たしか、起動オプションでパスワード認証をスキップするオプションがあったはず。
tp://nippondanji.blogspot.com/2011/04/mysql-dba273.html?m=1 rootユーザーのパスワードを忘れたときの回復手順 --skip-grant-tablesオプションを使う。このオプションをつけてmysqldを起動するとパスワードなしでログインできるようになるので、 とかやってみたら?
>>385 いや、既にパスワードが設定されてるんだろ?
インストール時か直後に何か設定した記憶は無いの?
mysqladmin にしたって現在設定されているパスワードを入力しなきゃ
新しいパスワードには変更できないんだから Access denied になって当然
>>387 さん
ご教示いただきましたとおり、実行してみました。
$ sudo /opt/local/share/mysql5/mysql/mysql.server start --skip-grant-tables
を実行したところパスワードなしで無事アクセスできました
ありがとうございました。
>>388 さん
私もご指摘の通りと思い、何度か
$ sudo port unistall mysql5-sesrver
$ sudo port unistall mysql5
を実行して
$ sudo port install mysql5-server
を再実行して、クリーンインストールしているつもりでした。
ちなみに、現状
mysql > use mysql;
mysql> select * from user;
Empty set (0.00 sec)
となっております。
何かコピペしたときにデータが入っており、そのデータが引き継がれてしまっているのかなと思いきや、ユーザーが一つも入っていなかったという落ちでした
みなさま、ご教示ありがとうございました。
インストールの仕方によっては初期にuserが全く登録されないなんてことがあるのか。 聞いたこと無いな。
>>390 さん
最初のインストール時に別サーバからmysqldumpではき出した
データを復元したのですが、データの復元を失敗してしまいました。
その際にmysql.userのデータを削除してしまったのかもしれません。
それで、mysql5の再インストールはしましたが
データdir削除はしていなかったため、既存の(つまりmysql.userのがemptyな)
データは残ったままでした。
再度インストールしてもそのデータが生きていたというのが真相だと思います。
なぜなら、試しに--skip-grant-tablesオプション起動の状態でmysql.userにrootをinsertし再度mysqlを削除し
インストールしたところ、データは残ったままだったからです。
お騒がせ致しました。
余談ではありますが、結局XAMPPのMySQLで権限設定を行いそれらをdumpして
リストアし使用できるようにしました。
理由としては
mysql.userの他に
mysql.db
mysql.host
の3テーブルの設定が必要になったからです。
なるほどね
393 :
293 :2011/04/10(日) 20:42:45.47 ID:tzyV+5ID
突っ込んだら負けに見えるが X<n AND n<X ではなくて X<n OR n<X
293はまじで分からなかったのか?釣りと信じたいw
rootもないんだっけ?
398 :
NAME IS NULL :2011/04/11(月) 12:21:22.69 ID:qVCbLHf1
テーブルの照合順序(文字コード)を一括変換したいのですが、 ググってもひとつずつ変更する方法しかありません。 一括で変更できないのでしょうか?5.0.67を使っています。
>>398 照合順序を変えた新しいテーブルを作ってデータを移すのが早いんじゃない?
あ、ごめん。複数のテーブルを、って話か。
401 :
NAME IS NULL :2011/04/11(月) 16:48:01.58 ID:NUeUTNL+
テーブル member no 姓 名 1 田中 角栄 2 小泉 純一郎 3 阿部 4 福田 5 小泉 太郎 でselectで姓を検索するとき、レコードの「名」に値がある場合、 それを検索対象に入れての完全一致の結果を得たいのですが、 どう書けばいいんでしょうか? 「小泉」で検索、結果 0 「阿部」で検索、結果 1 「阿部」+「晋三」で検索、結果 1 「小泉」+「純一郎」で検索されたとき、結果 1 こんな感じで結果を得たいのです わかりにくくてすみません…。
姓・名・姓名で3回select回せば?
インデックス使われないからあまりやりたくないけど select * from member where 姓 = '安部' and (名 is null or 名 = '晋三') でいいんじゃないの
> 「阿部」+「晋三」で検索、結果 1 晋三が見当たらないんですが
だから、何?
406 :
NAME IS NULL :2011/04/11(月) 17:51:03.16 ID:NUeUTNL+
>>403 それでいけそうです。ありがとうございます!
where 性=’性条件’ AND 名=’名条件’ だけでいんじゃねーの。空白は空白
性条件って何?童貞とか?ww
>>408 私はあなたをSuitonしたいと本気で思いました。
>>409 そうですか。それならば謝罪いたしましょう
MyISAMならFULLTEXTにすればいいんじゃないか
>>411 そのページに書いてあるとおりにすればOK
> col_name(length) 構文を使用してインデックス接頭辞長を指定することによって、
> カラム値の先頭の部分のみを使用するインデックスを作成できます。
CREATE TABLE test (c1 VARCHAR(1000));
CREATE INDEX idx1 ON test (c1(200));
文字列のお尻で高速に検索かけたいときはどうしてますか?
>>415 じゃないけど、LIKE REVERSE('%/db/1295436346/') で前方一致になるからindexが効くという認識でよい?
お尻を責めるならあらかじめひっくり返しておけ ということか。万事に通ずる法則だな。
一万件も同様の事があると思えんw
422 :
NAME IS NULL :2011/04/14(木) 16:01:32.32 ID:hMS2SY+z
質問です mysqlって何件くらいのデータ数で重くなりますか? カラムにもよると思いますがおおよその答えでいいのでお願いします。
カラムによります。
425 :
422 :2011/04/14(木) 20:32:50.06 ID:hMS2SY+z
まあ答えるの難しいよね なんて質問したらいいのかな でも言いたいことはわかるよね?
>>425 適切な例を示せばいいんだよ。
そうすれば今度は「実測しろ」って言われるから。
とりあえず、メモリに入り切るかどうかだろ。
429 :
422 :2011/04/14(木) 22:54:11.36 ID:hMS2SY+z
>>426 実測とかそんな高等テクニック持ってないし
ググっても見つからないからここで聞いてる
例を出して聞くと揚げ足取られるからなかなか難しいんですよ
でもこれって誰もが聞きたいことじゃないかな?
自分でやってみればいいのに メモリやCPUによっても変わってくるし答えようが無い
>>422 100万件ぐらいまでならたいしたこと無い
ってどこかの大規模サイトの人がゆってた
何万件だろうが適切にindexが設定されてて単純なクエリーなら重くない。 今度はindexのサイズが問題になるが元のtableのレコード数だけで示すことはできない。
>>422 150万件くらいのデータと8000件くらいのデータ、innodb。
SELECTでJOINあり、条件あり。
my.cnfデフォで95秒くらい。
innodb_buffer_pool_size = 6G
query_cache_size = 64M
sort_buffer_size = 64M
join_buffer_size = 64M
とかで、3秒弱。
インデックスを使うようにすると、どちらも一瞬で終わる。
パフォーマンスはデータベースの設計により大きく左右されるが、最近のマシン(メモリ4Gとか)だと、
ほとんどをメモリに乗っかるようにしておけば、何も考えなくても数百万件くらいなら余裕なんじゃなかろうか。
3秒って、そりゃまた随分と遅いなぁ
よくデータをメモリに全部乗っけるという表現がなされますが、具体的にはどうすればいいのでしょうか? ストレージエンジンをMemoryにするわけでは無いですよね MyISAMのバッファをデータサイズ以上に設定しておけばOSが勝手にやってくれたりするのでしょうか
>>437 あぁ、それウソだから。
データを全部メモリに乗せるなんて現代の技術では不可能だから。
デマに惑わされないように気をつけたほうがいいよ。
ORDER BYでDESCとASCが両方あるときはどうしたらいいの?
ORDER BY a DESC, b ASC,c DESC
トホホな質問が続きます
質問端折り過ぎた ORDER BYでDESCとASCが両方あるとき インデックスが効かないんだけどどうしたらいいの?
仮に、両カラムをDESCに揃えたらインデックス利くの?
>>441 低レベルSQL講座が始まってんだよ
察してやれ
アホ担当の方、さあ出番ですよ
ガムバって
知っているかたがいらしたら教えてほしいのですが、 UNIQUE キーは SELECT 文等でも使われるのでしょうか。 それとも、重複チェックに使われるだけで、 INDEX キーのようには使われないのでしょうか。
>>443 インデックス格納順にアクセスすることにより
ソート処理を省く最適化のことを言っているなら、
ASCとDESC混ぜたらどうしようもないと思う
至って普通のLAMP構成でアプリ動かしてますが MySQL5.1.50 InnoDBプラグイン使用で スローログを見てると単純にINSERTするだけのログテーブルのINSERTに時間がかかっています これは何が原因なのでしょうか レコード数は現在800万程度です
使わない手は無いと考えるはずだよ、MySQLの設計者としても。
>>451 なんか一回の問合わせで一つのテーブルにはインデックスは
一つしか使われないとか、なんかそういうのがあったような気がするんで、
実際使われるかどうかは、EXPLAINで確かめた方がええんじゃないか。
>>452 だから中途半端な知識で適当なこと言ってんじゃねぇっつーの
>>453 とりあえず中途半端な知識だと思うなら補強してあげればいいだろうに。中途半端なままだからテキトーなレスをするんだろ?
ユニークな方ですね
>>448 explainの結果の話ね
どうしようもないのかなぁ
SELECT * FROM unko ORDER BY a DESC, b ASC; ようするにこれのORDER BY最適化を実現したいわけだけど 数値なら、インデックス用に -つけた数値もこっそり入れて ASC,ASCに揃えてソートするとかのズルも出来るんだけど 両方文字列だとお手上げだわ・・・
>>457 文字列を文字コードで数値化して-つければいいじゃん
つーか、どのみち複数のindexキーに対するorder byではindexは無効だから。
サーバー上のPHPMyAdminをローカルにもコピーしようと思って、 エクスポート->SQLで書き出して、 それをローカル側のSQLで実行するとタイムアウトしてしまいます 大きすぎるからかもしれません どうするのがよいでしょうか?
>>457 create indexはカラム毎にASC/DESC指定できるだろ。
wikipediaの編集履歴のような物を付けたいのですが どのようにしたらいいでしょうか?
>>460 create indexのASC/DESCは無効だろうがw
>>452-454 結局、UNIQUE キーは INDEX 使われる、
ということで間違いないでしょうか…?
>>459 細かく書き出す方法があるので小分けにして何度かやる
あるいはデータを圧縮して書き出すと成功しやすい
それでもダメな規模ならmysqldumpとかで調べてください
最近、ほんとアホな質問多すぎないか?
467 :
NAME IS NULL :2011/04/19(火) 01:21:57.85 ID:jwljFgPx
誰か知っていたらヒントだけでも 2台のマシンで、mysql clusterを使ってるんだけど 差分バックアップはbinlogでいいのだろうか? mysqlbinlogでバイナリログをsqlに戻すと、大量のUnknown eventがでて困ってる。 MySQL Clusterは6.3、SQLノードはMySQL5.1 そもそもbinlogじゃだめだったりするのか? Cluster使ってる人、障害対策ってどうしてる?
>>466 かといって467みたいにちょっと高度な質問には答えられないんでしょ?お高く止まってる場合じゃないって もっと危機感持てよsqlite3に抜かれるぞ?
>>469 BLOBやascii_binとかのカラムに、文字列
バイトの補数データをいれとけば?
>>470 100桁の数値として扱うってことか。なるほど。
過去100レスくらいにはMySQL依存の質問しかないみたいだけど
474 :
762 :2011/04/19(火) 18:06:24.03 ID:4KoCmCJG
>>472 MySQL上級者スレってわけじゃないんだからどんな質問でもいいじゃん
そうやって初心者を排除していくと過疎化するだけだぞ
>>472 じゃあお前早く467の質問に答えてやれよ
どうせ答えられないくせに上級者ぶって初心者馬鹿にしてスレの過疎化に貢献してんじゃねーよ
476 :
NAME IS NULL :2011/04/19(火) 18:52:16.91 ID:pVcTtZv8
テーブル作成でint型のところに文字を入れて更新してしまい、 該当レコードが0になる問題が発生しました。 「UPDATE user SET age='age+1'」 みたいなSQLを実行してしまったのです・・。 こういうミスを避ける為に、 テーブル側で、数字しか受け付けないような設定って出来ないでしょうか?
制約
>>476 STRICTモードでそうならないか?
テーブル単位ではないけどな。
mysqlにsighupを送信すると、mysqlは何をするのでしょうか? また、mysqlにこのシグナルを送れば、こういう処理をする、といったような情報は どこを見ればわかりますでしょうか?(プログラムソースを見るしかないでしょうか?マニュアルを見たのですが見つけられませんでした。)
>>476 sqlモード、どうなってんですか?
俺んとこでは
int型のところにそのようにupdateで入れてみたら
1366 - Incorrect integer value:
でエラーになって返ってきたんですけど。
ちなみにsql-modeは
STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
にしてますが
483 :
NAME IS NULL :2011/04/19(火) 22:46:56.86 ID:jwljFgPx
やっぱMySQL Cluster使ってる人少ないのか・・・ 難しく考えずに、「MySQL クラスタ」で検索したら少しわかった。 チェックポイントなるものがあって、ログはDB自体に入ってるようないないような。 引き続きMySQL Cluster の障害対策方法知っているかたいましたらヒントだけでも・・・
484 :
NAME IS NULL :2011/04/19(火) 22:56:48.59 ID:pVcTtZv8
>>478 ,482
sqlモードっていうのを指定したら
>>476 のような問題は回避できるんですか?
今まで特に意識したことはありませんでした
>>476 それはintにしています。
ググって調べて
>>478 さんや
>>482 さんの言うように
my.cnfに「sql-mode="STRICT_TRANS_TABLES"」と追記して
改めて
>>476 を実行したところ、エラーになって更新できませんでした。
sqlモードの件、非常に勉強になりました。ありがとうございます。
お前ら俺の質問がスルーされてるんだけど、早く答えろよ
>>488 ストレージエンジンはMyISAMかInnoDB、mysqld起動後に
SELECT COUNT(<non_primary_key>) FROM <target_table>;
を打ち込んで、すべてのデータをOSのファイルキャッシュか
InnoDBバッファプールに読み込ませるというテクニック
>>489 それだけじゃ分からん。
まずは他のトランザクションがそのINSERTをとめていないか
SHOW ENGINE INNODB STATUS;
SHOW FULL PROCESSLIST;
を何度も取ってみて考える。
あとinnodb_buffer_pool_sizeが極端に小さくないか、
long_query_timeも極端に小さくないかを確認する。
そんな説明じゃ伝わらないな
あれで分かるよねヤッパ
495 :
NAME IS NULL :2011/04/20(水) 15:06:17.60 ID:o2haFwx5
コマンドラインでデータベースにログインすると unknown variable 'tmp_table_size=◯◯MB' と出てしまいます。 tmp_table_sizeは使えないのでしょうか?
>>495 ログインしたときの画面表示を省略しないでそのままコピペしてみて
>>495 使えません。いじった設定ファイルは元に戻してください。
バックアップを取って無かったなら市ね。
WordPressがMySQLでしか動かないからしぶしぶMySQLを使ってるが 早くこんなクズ共のいるスレから移動したい
Postgresスレはもっとクソだらけだがな
500 :
495 :2011/04/20(水) 17:44:49.85 ID:o2haFwx5
>>496 こんな感じです。
# mysql -u ユーザ名 -p DB名
mysql: unknown variable 'tmp_table_size=512MB'
といった感じで表示されて、
ログインできませんでした。
tmp_table_sizeを設定している行をコメントアウトすると
ログイン出来ました。
>>497 まじっすか。
色んなサイトを見てると設定されている方の文献を見つけますし、
MySQLAdminでもtmp_table_sizeに関するアドバイスが出ていたので
使えるものかと思っていました。
バックアップは取ってあるから大丈夫です。
501 :
495 :2011/04/20(水) 17:54:20.83 ID:???
MySQLAdminじゃなかったphpMyAdminでした おはずかしい。
>>500 tmp_table_size って mysqld のパラメータであって
mysql client のパラメータじゃないよね。
[mysql] とかで設定してるだけじゃないかな
503 :
495 :2011/04/20(水) 18:14:27.87 ID:???
>>502 おっしゃるとおりでした。
[mysql]に設定していました。
本来の目的は
[mysqld]に設定したかったので
修正しました。
ありがとうございました。
DELETE FROM MySQLスレ WHERE user = アホ
オンラインマニュアルを本にして売ってくれんもんかねえ。
逆行
紙で読みたい
キンコーズ持ってって印刷から製本までしてもらえるよ
オライリーブランドでマニュアル売り出せば、危篤な方が大量に買ってくれそうだ。
511 :
NAME IS NULL :2011/04/21(木) 05:57:07.13 ID:0m0MMwnf
質問させてください phpmyadinでcsvファイルをインポートするときに、 上からcsvファイルに記述した順にインポートしてほしいのですが、 csvファイルで記述した順にインポートされません なぜか順番が違います どうしたらいいのでしょうか?
>>511 そもそもMySQL自体が、入れたときの順番で出すという仕組みになってない。
OracleもPostgreSQLも一緒。順番は適当。
何かの順番で出したければSELECT文にORDER BY句をつけること
513 :
NAME IS NULL :2011/04/21(木) 08:24:40.82 ID:0m0MMwnf
>>512 そうだったんですか、なんだか不思議ですね
どうもありがとうございました
>記述した順にインポートしてほしいのですが こういう感覚のズレは、センスのなさの現われだなw こんなアホな思考回路持った奴、学生でもいねえよ
>>514 プログラミングとか慣れてなきゃ当然の感覚だろうに。どうでもいいトコ突付いて蔑むな。
>516 >当然の感覚だろうに 自己弁護しなさんな これを当然と捉えるお前って、自分はバカですって言ってるようなもんだぞ アホと同レベルってこった 「記述した順にインポート」なんて発想、最高に笑えるよ ネタ帳に追加しとくわ
joinするだけで200msかかってんだけどどうすれば早くなりますか? indexは張ってあって1万件くらいです
>>498 >WordPressがMySQLでしか動かないからしぶしぶMySQLを使ってるが
>早くこんなクズ共のいるスレから移動したい
自身の頭のレベルは棚に置き言いたい放題
>>518 鯖のスペック書け
あと、MySQLに割り当て可能なリソースもだ
チューニングはそれからだ
>>518 インデックスを 有効に働くように適切に設定すれば 速くなる
>>519 何、WP更新するたびに一々他のDBに対応させる修正をしないといけないってか
なんだかんだ言って、やさしい奴が多いな あんな質問に答えようとしてる ほっこりしたよ
527 :
NAME IS NULL :2011/04/21(木) 17:20:41.57 ID:e9JnJWF0
サイトID|ページID|アクセス数 1 | 1 | 100 1 | 2 | 150 2 | 3 | 120 テーブル内のレコードがこういう状態だとして、 アクセス数が一番多いサイトのページをランダムで1件表示したいと思います。 ORDER BY アクセス数 DESC で並べ替えるのは分かるのですが、GROUP BY サイトID をすると「ランダムで」という条件が出来なくなります。 サブクエリで一旦、集計してそれからORDER BY RAND() にするしかないのでしょうか?
そりゃそうだろ
>>528 いや、ちょっと待ってろ。 そうでもないことが判明した。
二つ指定すればいいだけの話では?
531 :
NAME IS NULL :2011/04/21(木) 21:58:42.14 ID:e9JnJWF0
自分では想像つきません・・。 どういうSQLか教えてください
ただでは教えられへんなぁ
>>527 データベース側じゃなくて、
プログラム側でランダムに1-30の中から1つ数字だしてオフセットにすれば?
俺の清めた体で払いますので
5分間煮沸消毒してください
536 :
NAME IS NULL :2011/04/22(金) 20:19:14.08 ID:SnCFSXDp
初歩的な質問ですみません ORDER BYした結果をGROUP BYするにはどうしたらいいでしょうか? 1行でお願いします
副問い合わせる
GROUP BYしてSORTするんじゃダメなのか?uniqとは違うから。
40個のカラムを持つテーブルに 1000万件レコードが登録されていて そのなかの1000件ほどを抽出しようとすると select 〜のクエリを実行するのに1分かかってしまいます。 インデックスもはってるのに 1分というのは結構な時間が かかっているように感じます。 そんなものなのでしょうか? innodb_buffer_pool_sizなどのの使用量も 512MBまで増やしているのですが・・・。
3秒以上かかったら重大なバグと見なしてる俺には どう見ても何かがおかしいようにしか見えない
>>539 1000件じゃなくて100件とかはどうなの?
>>539 > 40個のカラム
select でカラム絞れ
543 :
539 :2011/04/23(土) 12:54:11.18 ID:aAzoxdx1
>>540 ですよねー
かかりすぎですよね
>>541 100件とかでも1件とかでも時間がかかります。
>>542 40個あるカラムのうち
必要となるのが35個ほどあるので
カラム名をSQL内では指定しているのですが
やっぱり時間かかってます。。。
SQLはPHP内に記述しているのですが、
PDOの設定とかも関係してくるのでしょうか・・・
インデックス使われてないんじゃないの
>SQLはPHP内に記述しているのですが、 >PDOの設定とかも関係してくるのでしょうか・・・ んじゃとりあえず、同等のSQLをMySQLから手打ちしてみたら? それでも遅いかどうかでPDOが関係してるかどうか分るじゃろ。
1件でも時間かかるって異常だなw
547 :
539 :2011/04/23(土) 13:47:11.59 ID:aAzoxdx1
>>544 EXPLAINで確認して、インデックスが使われていなかったとしたら、
インデックスの張り方に問題があるということでしょうか?
SQLの記述にも注意すべき点があるのでしょうか?
>>545 コマンドから同等のSQLを実行したところ、
同じように1分近く時間がかかりました。
CPUもメモリも30〜40%程しか利用していないようなので
どこかチューニングに問題があるのでしょうか?
>>546 ですよねー。私もそう思います。
何とかならないものなのでしょうか。。。。
549 :
539 :2011/04/23(土) 14:03:45.04 ID:aAzoxdx1
>>548 あ、まだわかんないっす。
今から調べてみようかとしているところです。
書いてる暇あったら調べれば? これだけ人巻き込んでおいて「調べてみようか」って何様? そもそも遅いのを問題にしてるくせに初めから一度もexplainしてないとか有り得なくね?
コマンドから同等のSQLを実行するときに 先頭にEXPLAINってつけるだけなんだぜ
データが無いとexplainできない ってのは 構造的欠陥だと思うんだ
553 :
539 :2011/04/23(土) 15:25:23.46 ID:???
>>550 気を悪くしたのならごめんなさい。
explainもこちらに書き込んだ当初は知らなかったのです。
皆さんの知見にたよりつつ
並行して自分でも手探りで調べている状態です。
で、結果は?
555 :
539 :2011/04/23(土) 18:59:02.98 ID:???
気にしてくれてる皆さん、 ありがとうございます。 ただ今、別件で外にいまして、まだ実行できておりません。ごめんなさい。 月曜までには必ず報告しますのでしばらくお時間をください。
絶対に許さない
>>555 とりあえず今日のパンツの色を教えてくれ
赤紫とシャンパンゴールドのストライプに群青色のイチゴのプリントが入っています。 脱ぎたてが欲しい方は速達で送りますのでメールアドレスをお知らせください。
色ややこしいわw
>>558 群青色のいちご、ってそりゃ別のベリーじゃないの?
564 :
539 :2011/04/25(月) 12:08:39.90 ID:b0NRbWiN
おはようございます。 本日exlplanを使用して、 インデックスが利用されているかを確認してみました。 結果、こちらが意図する動きではなく、 インデックスも使用されていませんでした。 検索用に追加したインデックスの列の項目と 実際にSQLで使用している列とに1個差異があったので、 検索で使用する列のみを指定したインデックスを 追加作成しました。 そうしたところ、今まで1分弱掛かっていたクエリも 1秒で終わるようになりました。 あとは、登録処理にどれほど影響が出ているのかを 確認していこうと思います。 皆様にはたいへんお世話になりました。 まずはご報告まで。
ほほう
インデックスを貼る効果はこれぐらいあるんですよ〜って教科書に載りそうなお話 w
インデックスを貼ってるカラムを削除する場合、 インデックスを削除してからカラムを削除しなけれなばならいのですか? それともいきなりカラム削除すればインデックスも削除されるのでしょうか?
>>567 すごく不思議な消え方をした。
mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`c1` int(11) NOT NULL,
`c2` int(11) DEFAULT NULL,
`c3` int(11) DEFAULT NULL,
PRIMARY KEY (`c1`),
KEY `test_ix1` (`c2`,`c3`),
KEY `test_ix2` (`c3`,`c2`),
KEY `test_ix3` (`c2`),
KEY `test_ix4` (`c3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> alter table test drop column c3;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`c1` int(11) NOT NULL,
`c2` int(11) DEFAULT NULL,
PRIMARY KEY (`c1`),
KEY `test_ix1` (`c2`),
KEY `test_ix2` (`c2`),
KEY `test_ix3` (`c2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
不思議でもなんでもない。それをするのがDBMSの役目。
すみません教えてください。
http://d.hatena.ne.jp/omiyan/20110118/p1 この通りバージョンアップして、mysql --version をしたら、
mysql Ver 14.14 Distrib 5.5.11, for Linux (x86_64) using readline 5.1
となっていたのですが、mysqlに入ってselect version();したら、
5.0.77 と返ってきました。
これはどちらが正しいのでしょうか。
RENAME DATABASE をしたらエラー(ERROR 1064 (42000))に
なったのですが、ということはまだ5.0.77ということなのでしょうか。
ご教示いただけますと幸いです。
見てるmysqlが違う
573 :
571 :2011/04/27(水) 03:20:24.53 ID:???
>>572 ご教示ありがとうございます。
やったことは、
yum remove mysql mysql-server php-mysql
yum -enablerepo=remi mysql mysql-server php-mysql
といったようなことなのですが、これで2つのmysqlが
共存しているような状態になっているのでしょうか。
>>571 どちらも正しい
mysql --version はmysql のバージョン
select version() はmysqld のバージョン
mysqld は 5.0.77 なのでRENAME DATABASE はできませんねん
ではmysqldをバージョンアップすればよいのでしょうか。 yum remove mysqld mysqld-server php-mysqld yum -enablerepo=remi mysqld mysqld-server php-mysqld としてみましたが、うまくいかないようです。
576 :
571 :2011/04/27(水) 15:12:45.75 ID:???
>>574 ありがとうございます。
なるほど。mysqldがバージョンアップされてないんですね。
>>575 さん同様、私も同じ方法でうまくバージョンアップ
できていないんですね。困りました。。
困ったときはお互い様です。
579 :
571 :2011/04/27(水) 23:19:34.31 ID:???
require_once("MDB2.php"); で呼び出して、 $res = $mdb2 -> query("SELECT * FROM `foo` where `id` = '$id'"); という感じで繋いでるんですが、サーバーでは繋がるんですがローカルでは繋がらず Call to undefined method MDB2_Error::fetchRow() というエラーがでるんですが、どうしたらいいでしょうか pear listで確認したら MDB2 mdb2_Driver_Mysql mdb2_Driver_Mysqli がはいってます PHP Versionは5.3.1です xamppのバージョンは1.7.3です
>>580 DB_FETCHMODE_ASSOC を指定してるというオチじゃないだろうな
>>583 次の行に
while ($row = $res -> fetchRow(MDB2_FETCHMODE_ASSOC)){
ってやって受け取ったデータを処理してます
585 :
571 :2011/04/28(木) 01:55:47.14 ID:???
>>584 じゃぁサーバーとローカルで環境が違うからだろう。
その辺を具体的に書かなきゃエスパーでない限りわからんな。
MySQL で DB サーバ上のシステム時刻をミリ秒またはマイクロ秒精度で 取得するにはどうしたらいいですか? そもそも TIMESTAMP 型が秒精度 なので SELECT CURRENT_TIMESTAMP() じゃどうしようもならんし。
ユーザー定義関数でもいいけど、MySQLを呼び出す側のPHPとかからmicrotime渡したほうが早い気がする
24時間365日動くシステムでMySQLを使っているのですが、 皆さんはバックアップはどの様にされてますか? どこかで、MySQLのダンプの機能は バックアップとしては使えないといった 書き込みを見たような気もするのですが・・・。 ストップできないシステムなので、 データフォルダをコピーするといったことが 難しいので、皆さんはどの様にされているか 教えて頂けないでしょうか?
mysqldumpをcronで毎日実行して別サーバーへ転送してる 最新の状態ではないが最悪前日の状態には戻せる mysqldumpでちゃんと復元できるよ
mysqldumpで復元できるってのは、mysqldumpでバックアップしたデータでもちゃんと復元できるって意味な
594 :
591 :2011/04/28(木) 14:44:56.04 ID:???
なるほどです。 ありがとうございます。 私もmysqldumpを使ってバックアップを取るようにします。
レプリケーションしてスレーブのハードディスクからスナップショット作ってる
596 :
591 :2011/04/28(木) 15:40:51.94 ID:???
なるほど。 レプリケーションを利用されているのですね。 今回はシステム規模も小さく、 サーバを1台しか用意できなかったので、 レプリケーションは選択肢から外しておりました。 今後の参考にさせていただきます。
597 :
NAME IS NULL :2011/04/28(木) 20:15:35.43 ID:9EvrpqTs
phpmyadminをxamppにインストールしたんですけど、 いきなりパスワードを聞かれます rootっていれて、パスを空でインしようとするとIDかパスが違うって言われるんですが、 初期設定ではなにをいれたらいいんでしょうか?
横槍で申し訳ないが mysqldumpってそこそこ時間かかるしバックアップ中はサイトにアクセス出来なくなるし 毎日mysqldumpって現実的な手段になるの?
InnoDBならバックアップ中でもアクセスできる MyISAMなら仕方ない
サービス規模によるね 停止しても15秒程度なら問題無いとかね。 実際いくつかmysqldumpを朝4時頃回してる
602 :
NAME IS NULL :2011/05/02(月) 01:08:34.66 ID:8rRRCVud
質問です mysql+phpを使用していますが $sql = "select * from table"; $rst = mysql_query($sql,$con); while($rows = mysql_fetch_array($rst)){ $sql2 = "select count(id) as cnt from table where title = '$rows[title]'"; $rst2 = mysql_query($sql2,$con); $rows2 = mysql_fetch_array($rst2); $cnt = $rows2[cnt]; } とかやるとめっちゃ遅いです。表示されるまで10秒くらいかかります。 titleが何件あるか取得したいだけなのですが、これでは遅すぎるので もっと早く処理するいい方法あったら教えてください。よろしくお願いします。
select * from table だと title が同じレコードを複数持ってきて 全行に select count(id) ... を実行するから遅くて当たり前 @select * from from table を select title from table group by title にする Aselect title, count(*) from table group by title とにかくSQLの勉強をしなさい
>>603 Group 使うのと distinct はどっちが早いんかな。
まぁ、自分で試すか。
インデックスの有無も気にした方が良い
SQL文を解釈して実行するプログラムはプログラミング言語を処理するコンパイラの様に 字句解析、構文解析といった処理を行ってるのかな? コンパイラの作り方の本を読めば参考になるかな? それとも全く別で関係ない?
>>606 MySQLはインタプリタにbisonの字句解析が入ってるはず
(インストールするときにbisonがないって文句言われた)
SQL文なんてプログラミング言語に比べたら解析簡単だろ 参考にはなるけどレベル高すぎると思う とりあえず SQL 構文解析 で調べたほうがいい
>>608 いや、たぶんそんなにカンタンでもない。
厳密なSQLだと、yacc/bisonのような
字句構文解析系が使えないだろ。
>>607 のいうとおり、MySQLは使ってる
ようなんだけど、それ由来の制限も
ドキュメントに書いてあったはず。
予約語がどうこうとかみたいな?
MyPhpAdminみたらいいんじゃないの
スマン関係ないか
phpMyAdminなら関係あるのか?
あれはそのままSQLに渡してるだけじゃねーの
「一応」「ちょっと」「解析っぽい」w
何が笑えるんだろう?? 結構的確な表現だと思うのだがー
曖昧な言葉を3つも並べて何が「的確」だよw
ソース見れば的確かどうかわかるのにね
620 :
NAME IS NULL :2011/05/04(水) 09:42:46.01 ID:2ZdGWZNh
ショートURLサービスを作ってみようと思うんですが、
「
http://bit.ly/パラメータ 」のあのパラメータは64進数の数値だそうで、
あらかじめ一定の範囲のパラメータをDBにパラメータテーブルとして持たせておこうと思います。
構成は
id(主キー、auto_increment)/param/is_used(使用済みチェック)
1/abc1/0
2/abc2/0
3/abc3/0
こんな感じにしたいのですが(数値は適当です)、たとえばパラメータの値を100000〜300000まで
あらかじめ入れておくとして、
プログラム(php)のfor文で「indexを64進数に変更してinsertを20万回ループ」させるのは
おかしい気がします。
Mysql5の機能だけでスマートに実現する方法はあるでしょうか?
あと、上のパラメータテーブルの構造はおかしいでしょうか。
idは要らないのかな、is_usedも無用で利用されたパラメータの行は削除の方が良いんでしょうか。
俺ならオートインクリで36進数使うかな
>>620 ショートURLサービスは特許登録されていますから、手法が似てると侵害で訴えられますよ
>>623 金儲けしなかったら特許侵害してもいいのか。
知らなかった。
じゃあ、非営利団体はやりたい放題できるな。
>>624 とりあえず
>>623 の揚げ足取りたかった事は理解したが、脊髄反射のそれは馬鹿にしか見えんぞ。
それ揚げ足じゃねぇだろ
>620が無料サービスしたせいで、ビジネス機会損失したら 余裕で損害賠償請求始めるわ
628 :
602 :2011/05/04(水) 21:41:42.00 ID:f+jsRo3a
>>603 レスありがとうございます。
教えられた通りやったのですが速くなりませんでした…
>>605 インデックスは使ったことがありませんでした。初心者ですみません。
そこでインデックスを数日勉強してやってみたのですが
@テーブル作成
CREATE TABLE goods(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255),INDEX title_index(title));
Aselect count(title) as cnt from table where title = '$rows[title]' でcntを取得
これで間違ってないでしょうか?よろしくお願いします。
629 :
620 :2011/05/05(木) 10:04:52.48 ID:zYH1Ia7Y
>>621 すみません、どうしてその方法を選んだのか良かったら教えてください
>>622 え!そうなんだ!?知らなかった…
既存の自分のサイトにだけリンクする機能として使おうと思ってるんだけどそれでもダメなのかな
うーむ、でも聞いて良かった。ありがとうございます
>>629 冗談だボケ
まぁ本当に特許取ってるかも知れんけど俺は知らんよ
631 :
620 :2011/05/05(木) 15:21:54.71 ID:C4QwRBw+
>>630 そうなの?安心したー
あらかじめ20万行くらいのテーブルを作る件は、やっぱりプログラム(php)で
20万回insertするしかないんでしょうか?
データを20万件作ってバルクインサートすればよろしいのでは?
>>630 それは冗談とは言わんな。 嘘 と言うんだよ
いずれにせよ、2chの書き込み「だけ」で判断するなと
NAME IS NULLさん、ありがとうございます。 おかげで解決しました。
うむ
いいってことよ
今後も精進してくれたまえ。
641 :
NAME IS NULL :2011/05/06(金) 19:05:32.10 ID:5aOEnpcJ
1つのデータベースに、複数のストレージエンジンによる テーブルを混在させるのは良くないのかな? そういうことを書いたブログがあったんだけど…。 phpmyadminで見たら、innoDBのテーブルのレコード数が マイナス?(「-3322」みたいな)で表示されてたりします。
phpmyadminのバージョン上げろ
>>642 上げてもかわらんだろ。
innodbはmyisamと違ってレコード数は実際に数えないとわからんから概算ってことだ。
そもそもphpmyadminでも、正しい数字ではありません、って注意書きある。
644 :
NAME IS NULL :2011/05/06(金) 22:43:11.14 ID:5aOEnpcJ
>>643 なるほど、参考程度に見ておけってことですね。
基本innoDBでfulltextキーはMyISAMだわ
646 :
NAME IS NULL :2011/05/07(土) 12:22:24.32 ID:m1TpCaqb
mysqldumpslow とかその辺のツールを試したいんだけど、いろいろな解析を試してみるのに良いサンプル的なスロークエリログってどこかにない? 5.0 だから long_query_time = 0 も出来ないし、すぐに試せるログがあれば嬉しいんだけど・・・。 やっぱ 5.1 入れてテスト用 DB 作ってログ取得するしかないかな?
>>646 スローなクエリをちょっと実行しちゃえば。
サブクエリとか
ストアドとか
文字列処理とか
select sleep(10); で、とりあえずスロークエリはすぐ出せる
>>648 が天才すぎてびっくりした。いやマジで。
なんつーか死にたくなってきたわ。
こういう小ネタはいいな 俺も知らなかった
スロークエリって何ですか
スローなクエリにしてくれ
653 :
NAME IS NULL :2011/05/09(月) 00:33:50.73 ID:WP+BCa3r
654 :
NAME IS NULL :2011/05/09(月) 18:22:12.80 ID:ovU3C3FZ
ここで聞いていいのかわからんけど、SQLってのは常駐ソフトの一種で別のソフトからアクセスして使うものっていう解釈で合ってる?
656 :
NAME IS NULL :2011/05/09(月) 18:53:41.08 ID:ovU3C3FZ
そうか、ありがとう
ちくしょう、つぼったww 電車の中で笑わせんな
>>483 データノードを専用で3台 NoOfReplicas=3
SQLノードを専用で2台
マネジメントノードをしょぼいサーバーで専用で2台
データノードは3台ずつ追加
SQLノードは1台ずつ追加
SQL文は実行回数が多いクエリにjoin使わない。
でどうでしょう?
データノードが落ちてから復旧した場合、勝手に同期とって
マネージメントノードでOKとかでたら復旧成功とかでしょうか?
なんだかんだ言って、全部一つのPCに納めちゃうのが楽
create table tbl (id int(8), ts datetime); alter table tbl add index (id, ts); なテーブルで select * from tbl where id in (1, 2) order ts; ってするとfilesortが発生するけど、どうやったらソートにindex使ってくれますか?
以下のクエリを実行したらエラーが出来ました どのように修正したらよいでしょうか? CREATE TABLE `citest`.`testtbl` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `date` DATE NOT NULL DEFAULT CURRENT_TIMESTAMP , `name` TEXT NOT NULL ) ENGINE = INNODB; MySQLのメッセージ: #1067 - Invalid default value for 'date'
>>663 DEFAULT CURRENT_TIMESTAMP を削除する
型のdateって所をTIMESTAMPに変えたら出来ました お騒がせしました
668 :
NAME IS NULL :2011/05/11(水) 17:37:02.05 ID:TXivELb9
すみません 5.1を使っているのですが、cactiやmuninはmysql5.5に対応していますでしょうか?
>>669 無責任なこと言ってんじゃねぇよ
お前が作ったのかよ
ウザイからYahoo!知恵袋で質問してくれる?
>>671 Yahoo!知恵袋で質問したところ、スレ違いと言われてこのスレに誘導されました。
ウソをつくな
ここの人って、MariaDBとかPercona Serverとか試したりしてる?
ウザイからYahoo!知恵袋で質問してくれる?
677 :
NAME IS NULL :2011/05/12(木) 07:02:45.19 ID:lTT2AWNK
UPDATE するときに、ある特定のクエリで必ず Duplicate entry 'hoge' for key 1 が出るのだけど、 hoge を SELECT しても結果はゼロ、見つからない。 ぐぐったら「テーブルが破損しているかも、REPAIR TABLEで直ることも」 と合ったが、リペアしても直らない。 特に重要なレコードでもないから問題は小さいけど、気になる。 対処方法はないですか? ハードウェアの障害とかだろうか…。 該当列の構造は、varchar / utf8_bin MySQLは5.0.41
679 :
NAME IS NULL :2011/05/12(木) 07:58:56.81 ID:lTT2AWNK
ああ…バッチ処理中の重複がありえるというのを失念してた…。 正直すいませんでした。
カスが
ガスか
カズが
ガズが
トゥーッス!
685 :
NAME IS NULL :2011/05/12(木) 23:28:40.93 ID:qBNB3GBW
知恵袋とマルチなんですが、文字制限でかけなくてこちらでお願いします。 商品テーブル ユニーク 商品ID, 商品名, 値段, 仕入れ日, 在庫 001, りんご, 100, 2011/5/11, 10 002, なす, 100, 2011/5/11, 10 003, みかん, 100, 2011/5/11, 10 004, にく, 100, 2011/5/11, 10 005, バナナ, 100, 2011/5/11, 10 商品産地テーブル 産地ID, 商品ID 青森,001 青森,002 岩手,001 岩手,003 香川,001 香川,004 宮崎,002 宮崎,005 商品問屋テーブル 問屋ID, 商品ID 丸紅,001 丸紅,002 丸紅,003 伊藤忠,001 伊藤忠,002 伊藤忠,004 伊藤忠,005 商品種類テーブル 種類ID, 商品ID 冷凍,004 生,001 生,002 生,003 生,005 商品サイズテーブル サイズID, 商品ID 大,001 大,002 大,003 大,004 中,001 中,005 小,005 みたいなのがあったとき、「青森」かつ「丸紅」かつ「生」かつ「大」を商品テーブルから抜き出すにはどうすればよいですか?
>>685 俺なら適切なクエリーでSELECTする
687 :
685 :2011/05/12(木) 23:41:53.46 ID:???
>>686 適切なクエリェ
SELECT 商品.*
FROM 商品産地
INNER JOIN 商品問屋 ON 商品産地.商品ID = 商品問屋.商品ID
INNER JOIN 商品種類 ON 商品問屋.商品ID = 商品種類.商品ID
INNER JOIN 商品サイズ ON 商品種類.商品ID = 商品サイズ.商品ID
LEFT OUTER JOIN 商品 ON 商品サイズ.商品ID = 商品.商品ID
WHERE 商品産地.産地ID = 青森
AND 商品種類.種類ID = 生
AND 商品問屋.問屋ID = 丸紅
AND 商品サイズ.サイズID = 大
みたいなの考えましたが、1つしかレコードが帰ってきません
688 :
685 :2011/05/12(木) 23:55:12.34 ID:???
ごめんなさい、出力するphpが間違ってました ああ・・・
解決したわけね?
690 :
685 :2011/05/13(金) 01:02:12.58 ID:???
ザコを呼び込んだ奴、責任取れ 相手にするからこうなる
テーブル・カラム名に全角かぁ。
最近は全角が主流なんですが。 金融機関などの大規模DBでも殆どが全角ですよ。
全角カラムって一見分かりやすそうだけど,似た漢字があったりするとかえって混乱するんだよね.
以前は半角カタカナが主流でしたが、全角漢字が利用できるようになって以来、 出来るだけ漢字を使わないとクライアントの偉いさんが納得してくれません。
>>697 信じられないだろうが本当。
使ってみるとこれが意外に便利だったりする。
関係無いけどエクセルのファイル名とかに漢字使う?
702 :
NAME IS NULL :2011/05/13(金) 11:08:33.08 ID:Z7KNlo4p
SQLServerだったけど、とある証券システムでDBからテーブルからカラムから 全て日本語だったよ
703 :
NAME IS NULL :2011/05/13(金) 15:39:56.16 ID:AYV0ieN1
全角をつかって不具合が出たりはしないものなのでしょうか? もう今は全角が普通なのかな。 いちいち日本語の単語から英語にするのに 頭使ってるのが馬鹿らしくなってきますね。
>>703 最初に文字コードを決めてそれなりにテストを念入りにおこなえば
あとは特にトラブルはないな。
ただ記号文字、特に括弧とか〜系の文字は必ず避けてる。
705 :
NAME IS NULL :2011/05/13(金) 17:33:12.41 ID:qBSqB9ZR
centos5でmysql 5.1.52 を使用しています。 Mysqlが起動しなくなりました。 ログを見たところ、 110513 17:30:17 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28) 110513 17:30:17 [ERROR] Can't start server: can't create PID file: No space left on device 110513 17:30:17 mysqld_safe Number of processes running now: 0 110513 17:30:17 mysqld_safe mysqld restarted とでました。 /var/run/mysqld/をlsで見たらmysqld.pidが出現したり消えたりしています。 ps aux | grep mysqld でプロセスを見ると mysql 6857 9.0 0.4 82892 13136 pts/1 Rl 17:31 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --federated --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock root 6865 0.0 0.0 5088 748 pts/2 R+ 17:32 0:00 grep mysqld root 20872 17.5 0.0 7340 2776 pts/1 S 17:22 1:35 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --federated --basedir=/usr --user=mysql とでて、起動してないはずのmysqlが何故か起動しているような感じです。 これはどうしたら対処できるんでしょうか? よろしくお願いします。
>>705 ハードディスクがいっぱいだな。
エロ画像を放流してスペースを空けるんだ
>>706 >>707 は偽者です。
エロ画像は削除してみましたが、どうやらエロ動画がディスク容量を圧迫しているようです。
でもこれを削除してしますと、またMXで入手するのは大変だし、どうしたらよいでしょうか。
>>706 >>708 も偽物です。
本当に解決しました。エロ画像45GBとエロ動画280GB消しました。
今は記憶だけで抜けるので大丈夫です。
ありがとうございました。
時系列で株価の終値のデータを持っています 前営業日の終値と比較してその変化率を出したいと思っています やり方、色いろあるとおもうのですが、どうやるのがスマートですかね?
正確にいうと、変化率を出して、それをテーブルに戻そうと思ってます 土日や、終値がない日が存在したりすることを考えると、 どうやったら効率がいいのか。。。
営業日テーブルというのがまず必要かな。前の営業日を SELECT max(date) FROM businessday where date < :today; という感じで取る
そういう感じですることにします 変数を宣言しようと思ったらお壊れて DECLARE next_day date; なにがいかんのやろ
まさか、next_dayが予約語だとは
WHILE @n_day <= '2010-03-31' DO これって間違ってる?
stored procedureで以下の文章が使えませんでした。 SELECT aaa INTO bbb FROM ccc; cccがユーザ変数だったのですが、ストアドプロシージャでは テーブル名にユーザ変数が使えないんですか?
初心者なんですが、例えば idが3の列のデータを全部削除した場合、id 4をid 3につめるという方法はあるのでしょうか?
>>717 本名の他に、芸名を付ければいいんじゃないの?
deleteしたあとupdateでもしてろよ
>>720 ALTER TABLE table AUTO_INCREMENT=3;
はぁ?
4以上をすべて -1 すればいいだけじゃね。 ちょっと考えれば思いつくと思んだが。 プログラムってアイデア勝負だな。
MySQLはそこでorder byとかやらないとキー重複でエラーになるんだっけ?
プライマリキーをオートインクリメントで設定すると どんどん増えていくじゃないですか。 だからidをつめた方がいいのかなと思ったんであります。 でも調べたら1日100万レコードの追加してもエラーがでるまで 12年くらいかかるっぽいんですね。だから気にすることはない。 この認識であってますか?
>>725 馬鹿?
AUTO_INCREMENT付ければ勝手に連番付与してくれる
>>728 RDBなんだから普通はIDが他のtableから参照されたりするだろ。
だから特定のtableのIDを詰めるようなことは行わない。
そもそもレコードを削除してしまうと情報が消えてしまうので
削除フラグを立ててレコードは残しておくことが多い。
>>728 レコード削除でオートインクリメントカラムの数字を詰めたい・再利用したい ってのは
独学初心者の典型的な発想。
詰める必要はないし、データ管理という観点でも「詰めちゃいかん」のだよ
>>730-731 なるほど
まあDBは初心者なわけですがw
ではチャットみたいなやりとりもDBでは消さないで保存するシステムになってるのですかね?
チャットをDBに保存する意味があるかどうかは別として、基本的には削除する必要はないだろ 何かあったときのための証拠として残しておけ!
734 :
728 :2011/05/17(火) 06:15:47.52 ID:???
>>733 >チャットをDBに保存する意味があるかどうかは
まさにこの部分なんですよ
何かしら一時的には保存してるわけでそれがDBに保存する場合、古いのは消していかないと
容量がどんどん増えていくんじゃないのかということで上記の質問をしたわけです。
>>734 そういうのを必要に応じて消すというのはよくあるが
IDを振り直すというのはありえない
というのが結論
>>728 どうしても空き番を再利用したいなら
オライリーのMySQL Cookbookのvol2に載ってるから
買って読むといいよ。
>>735 >プログラムってアイデア勝負だな
馬鹿丸出しの文章恥ずかしくないの?
>>738 一日遅れで随分離れたレスにツッコむお前が馬鹿丸出しだぞ。
>>739 何て回答するか一日悩んだのだから仕方あるまい
twitterじゃあるまいし昨日だろうが去年だろうがいいだろボケどもが
そんなに長く考えてたらこのスレ終了しちゃうよ
743 :
NAME IS NULL :2011/05/18(水) 17:58:39.48 ID:NDLQlcle
複数行をまとめてinsertするinsert文で、プライマリキーが被っているものはスルーして かぶっていないもののみinsertする方法はありますか? insert into table values (), (), (); という形のSQLです。
>>743 いちいち人に聞かずに少しは自分で調べろ
>>745 ここで調べてるんだよ。何か悪いか?
って、本気で言われたことがある。
自分で調べろと言って何か悪いか? って、本気で言われたことがある。
同じ値を集計して多い順に並べる、よくある感じのsqlだけど、 using tempとfilesortがどうしても掛かる。 致命的に遅いわけじゃなく許容できそうな遅さだけど、 これはどうしようもない? example) select hoge,count(hoge) as cnt from tbl group by hoge order by cnt desc limit 10
バカを育てる事に意味があると思っている奴がいるんだ そんなバカ担当にお任せしようじゃないの
>>748 full scanがかかるのはしょうがないとして、hogeのカーディナリティが
高いのに対してsort_buffer_sizeが足りてないとか?
752 :
748 :2011/05/19(木) 03:08:45.76 ID:???
>>751 あー、sort_bufferか。ちょっと増やしてみる。
order by のソート速度が上がるかもしれない。
ありがとう。
大丈夫だ 問題ない
最近mysqlを習い始めた新参です お知恵を拝借させていただくべく質問させていただきます ID、名前(日本語)、歳が登録されてるテーブルにselect文にて検索を行うべく mysql> select id,name,age from tsumiki_tbl where name like '%えらちょんぺ%' order by id limit 0, 10; とうつと、idでソートされたデータが10件表示されると思いますが、これを mysql> select id,name,age from tsumiki_tbl where name like '%a%' order by id limit 0, 10; とうつとすべて条件が無視されすべて表示されてしまいます いろいろ調べては見たのですが、これといった情報がわからず手を拱いております お知恵を貸していただければ幸いです。
「手を拱く」なんて難しい言葉を知っていますね!
こんな漢字だとは知らなかった。
書けなくても漢字変換してりゃ出てくる それだけの事
「漢字」じゃなくて「言葉(単語)」を知っていることに驚きました!
>>755 文字コードがlatin1とかになってんじゃないの?
文字コードがえらちょんぺじゃないか?とえスパ(ry
>>760 レスありがとうございます
文字コードはすべてutf8で統一しております
たとえば%b%にすると妥当な検索結果を表示しますが、aという文字に対してだけselect以下のコマンドが
無視されるようです
>>756 お褒めいただき恐縮ですm(__)m
>>762 >文字コードはすべてutf8で統一しております
show variables like 'char%';
で確認しましたか?
PHP等からアクセスするなら、PHPから上記SQLを発行して確認してね。
ところで「select以下のコマンドが無視される」ってどういう意味だろう。
>>763 レスありがとうございます。
文字コードは確認しております、以下が結果です
mysql> show variables like 'char%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.12 sec)
理由はわかりませんが、mysql> select id,name,age from tsumiki_tbl where name like '%えらちょんぺ%' order by id limit 0, 10;と入力すると10件を表示するとおもうのですが
%えらちょんぺ%を%a%にすると11件目以降が表示されてしまいます、ゆえにselect以下のコマンドが認識できなくなった?のかは不明ですがそういう状況に陥りました。
なんかよくわからんのでは外してたらスマソですが、 もしかして、11件目以降ってのは select id,name,age from tsumiki_tbl where name like '%a%' order by id limit 0, 10 id name age 11 abc 10 12 asdf 55 13 qaz 44 14 piza 33 .. .. って話?
limit 0, 10 が機能していないということでは。
プログラム側で %a% あたりが特殊文字扱いされてるとかないのか?
エスパー初心者ですが、sprintf が噛んでない? '%%a%%' とやるとどうなりますか?
DBに保存するデータを暗号化したいので、 AES_ENCRYPT使おうとしてるんだけど、 これって結局ソース読まれたら意味ないですよね。 平文で読めなくなるという気休め程度か…。 公開鍵暗号とかするの面倒そうだしなー…。
>>768 >%えらちょんぺ%を%a%にすると11件目以降が表示されてしまいます
他の人も書いてるけど、limit 0,10 が効いてないって意味?まぁそんなことがあるとは思えないけど。
結果の件数は何件表示されたの?10件以内なら正常な動作だと思うけどね
>>765 普通、
select id,name,age from tsumiki_tbl where name like '%ザク%' order by id limit 0, 10
id name age
1 プロトタイプザク 10
2 旧ザク 55
3 ザクII 44
4 量産型ザクII 33
5 陸戦型ザクII 22
6 デザートザク 11
7 ザクキャノン 22
8 ザクマリン 33
9 高機動型ザクII 44
10 作業用ザクII 55
こう表示されて11件目以降は表示されてないはずですよね
ただ、aにたいして同じことをすると
select id,name,age from tsumiki_tbl where name like '%a%' order by id limit 0, 10
id name age
select id,name,age from tsumiki_tbl where name like '%a%' order by id limit 0, 10
id name age
1 プロトタイプザク 10
2 グフ 11
3 旧ザク 55
4 ザクII 44
5 プロトタイプドム 12
6 量産型ザクII 33
7 陸戦型ザクII 22
8 デザートザク 11
9 ゲルググM 20
10 ザクキャノン 22
11 ザクマリン 33
12 高機動型ザクII 44
13 ガルバルディα 40
14 作業用ザクII 55
.
.
.
とテーブルの上から全部取得してしまいます
>>766 そうです・・・
>>767 mysql自体にそういう文字があるのかとおもい質問させていただきました
>>768 >>771 a意外ならヒットする件数が10以上でも10件だけ表示してくれます
aだとヒットするしないにかかわらずテーブル全体を表示してしまいます・・・
>>773 Mysql付属のclientから接続して同じクエリやっても結果一緒?
ザクが大好きです。でもジムはもっと大好きです。
>>773 repair table tsumiki_tbl;
>>773 optimize table tsumiki_tbl;
>>773 alter table tsumiki_tbl;
>>773 delete table tsumiki_tbl;
>>773 curieit table tsumiki_tbl;
>>773 updeit table tsumiki_tbl;
>>773 deleet table tsumiki_tbl;
本当に limit 節がサーバーに届いてるのか?
× limit 節 △ ソーラン節 ○ かつお節
llinuxのmysqlで、outfileを使って/tmpに出力したら、 ファイルのオーナーとグループが両方mysqlで,rw-rw-rwなんだけど、 mysqlを操作したユーザから消せなかった。 ファイルがあると上書きしないみたいだし、 ファイルも消せなくて困ってます。 デフォルトのパーミッションの変更方法か消し方を教えて。 linuxのアカウントは、一つしか使えないです。
innodbでinnodb_file_per_tableを設定して
テーブルファイル .idb を分けた場合、
MyISAMと同じデータディレクトリdatadirに保存されるのだけど、
これを別のディレクトリに保存する方法はない?
innodb_data_home_dirは設定済だけど、
ibdata1/ib_logfile0/ib_logfile1の3ファイルしか入ってくれない。
できればMyISAMとinnodbのディスクを分けたい。
>>786 rootにはなれないの?
rm -rf file.dmp
mvしてホームディレクトリに移動すれば見れる・削除できることも。
mv /tmp/file.dmp /home/www/file.dmp
テーブルAAA フィールドaaa テーブルBBB フィールドbbb select〜で作るフィールドccc SELECT BBBと結合されていたらAAA.aaa+BBB.bbb 結合されていなかったらAAA.aaa AS ccc from AAA〜 みたいなことってできないですかね? CASE WHEN BBB.bbb IS NULL〜ってやってもBBBがないってエラーになる。
PHPMyAdminでエクスポートできる容量の制限ってあるのでしょうか 約100MBのサイズをエクスポートしようとしてるのですが 500 内部サーバー エラーがでます
>>789 時間かかってるんで殺してエラーになってるから
時間かかってもいいようにphp.iniとかを設定する
>>787 [mysqld]
datadir=〜
の部分を好きなところに変更したら?
>>790 契約してる鯖ではphp.iniの設定を変えることができそうもないので困っています。
エクスポート用のbigdump.phpのようなものがあればいいんですが・・・
>>792 ならphpmyadminのソースを自分で書き換えればいいだろ。
もっと頭使えよ。
794 :
NAME IS NULL :2011/05/24(火) 09:03:25.84 ID:V+PJwoKM
質問させてください。mixiであるような「いいね」の管理って、どうすべきなんでしょうか 日記/写真/つぶやきetc.. と、「いいね」のついてる機能ごとにテーブルを作るのか、 一つのテーブルにまとめて登録するのかどちらが良いのでしょうか? 前者なら、t_nice_diary(id|diary_id|diary_owner_id|nice_user_id|date) ※diary_idは日記のID、diary_owner_idは日記書いた人のID、nice_user_idは「いいね」した人のID 後者なら、t_nice(id|func_type|func_id|func_owner_id|nice_user_id|date) ※func_typeは機能(diaryなど)、func_idは機能のID、func_owner_idは機能のユーザID、他同じ こんなイメージなんですが、アプリケーションの機能として、 「機能ごとの「いいね」を貰ってる数ランキング」はもちろん、「ユーザごとの「いいね」を貰ってる総数ランキング」も 作りたいと思っています。 前者だと「ユーザごと…」の処理のときjoinなどが発生して負荷なのかという気になり 後者だとテーブルの行数が極端に増えて面倒なことにならないか気になりなります。 今思いついたのが ユーザのイイネ総数専用テーブルとして t_users_nice_num(id|user_id|nice_num)を作って、 「イイネ」されるごとにトランザクションでnice_numを+1でupdateするのも良いかもしれませんが… どういうやり方が良いと、理由つきで教えてもらえると嬉しいです。 質問長くてすみません
796 :
NAME IS NULL :2011/05/24(火) 13:55:32.24 ID:V+PJwoKM
>>795 ありがとうございます。個別管理とは一つのテーブルでですか?
それだと、上で書いたうちの2番目のやり方で良いんでしょうか?
>>794 負荷を考慮するなら情報は重複するが別テーブルで管理
>>793 phpmyadminは初めから鯖に用意されているものなので書き換えできません。
共有レン鯖ってphpmyadminは最初から入ってることが多いと思うぞ
>>798 じゃ、自分でDLして、自分のパーティション内にアップすればいいだけじゃん。
DLとかパーティションとかどういう意味だよw 専門用語知ってますって自慢したいのか?www
そもそも話が噛み合ってないな。
>>801 その「自分でDLして」のやり方を聞いてるんだとおもうぞw
DL=ディーゼル機関車
>>802 自分でphpmyadminをダウンロードして、レンサバの自分のパーミッション管理下にアップロードしていじろ、ってことだ。
すまんな、iPhoneからなんで、変な変換単語のまま投稿しちまった。
tp://www.phpmyadmin.net/home_page/index.php ここからソース落として設定やらエクスポートの制限時間やら書き換えて、鯖にアップしてdumpしろってこと。
>>806 iPhoneだと変な変換が当たり前だと言いたいのか
iPhoneを使っていることを自慢したいのか
>>807 tp://www.phpmyadmin.net/home_page/index.php
このURLをブラウザに貼り付けましたがWeb ページ表示不可と出ました。
>>808 いちいちダルいとこつっこんでくるなぁ。
いまどきiPhoneが自慢になるとでも?
>>809 URLなんだし、普通httpから始まるよな?
>>810 そこまでのあほじゃないだろ。それじゃアホを通り越して池沼レベルだ。
馬鹿にしすぎだぜ。
phpmyadminなら100メガ程度ならそれでもできそうだが、 DBの容量がギガ超えた場合不可能なんじゃないの
>>810 アクセスできました。httpのhtを書き忘れたんですね。
次はソースを落とす?
ソースって何でしょうか。どこに落とすのですか。
>>812 どっかの借り物サーバでrmysqlがインストールされてて
phpmyadminが設定変更不可でootが取れないってところ
でしょ? DBの容量にギガも許されてないと思うよ。たぶん
DBの容量の制限なんて聞いたことない ふつう契約している鯖の容量内なら使える
さくらみたいにDBは別鯖の場合がある ユーザー容量制限とは別扱いだったような
要するにphpmyadminを使う方法以外は わからないってことだよなw
いやその方法すらわからないw
言い方は厳しいが、よくそれくらいの知識でレンサバ借りたな、と。 仕事上押し付けられたなら同情するが、 も少しローカルでいろいろ試してからの方がいいんじゃないか? それか、プログラムも鯖管理もしないけど、ただMySQLのデータだけダウンロードする、ってことなのか?目的は知らんけど。 そうであるなら、一度レンサバ業者に相談してみては? 金払う、言うたらやってくれるんじゃないか? 俺ならやるw
知識があるんなら教えてやればwww
地図読めて道を知ってても、今向いてる方向と場所を教えてもらわんと、ナビゲート出来ない
>>814 XREA+ で、ファイル(物理)サイズが1GB超えるくらいになったことはあった。
インポート/エクスポートでphpmyadminは使い物にならなかったよ。
安いレンサバでやることじゃあなかった…
サーバーでどれだけ制限されてるかはわからんが、 phpなんかのシェル関数で直接mysqldump叩いてサーバー上にdumpファイル作ってダウンロードするのが一番楽そう。 今はもう安いしVPS使うのがいいな。
>>821 phpmyadminを使わずに1GB超えるくらいのDBをエクスポートする方法
インポートはbigdump.phpでできるから
>>824 mysqldumpでよくね?
それか自分でちょっとずつ吐く
>>826 じゃあphpmyadminではスキーマだけ落として
残りは自分でちょっとずつ吐けばいいんじゃね?
タイムアウトになんない範囲で。
>>821 カーナビの話はこの際関係ないと思います
VPSよかVPNがお勧め。
VPNよかVCNがお勧め。
vipに逝け
vipよかhipがお勧め。
hipよかnipがお勧め。
nipよかnicがお勧め。
nicよかciaがお勧め。
ciaよかgepがお勧め。
一つのテーブルに収められるデータ量の上限は4G程度とのことですが、 これって画像データなどの場合はすぐに限界が来てしまいそうです。 大規模サービスを運用している場合、データ量が限界に近づくたびにテーブルを分割するなどして対応しているのでしょうか?
4GB以上入るよ それどこ情報よ
>>837 データベースには画像のリンクを保存して
画像は他のサーバーのフォルダに保存とかでは
CentOS 5.6 に用意されてるパッケージ(5.0.77)を yum install mysql-server でインスコしたんですが、 プロセスを見ると mysqld はちゃんと起動してるのにデータベースに接続が出来ずに困っています。 環境としてはインスコ直後の状態で、サンプル・データベースがあるはず(実際 /var/lib/mysql にある)で、 それらには接続できないとおかしいと思うんですが、 $ mysql -h localhost -u root で mysql> use mysql; としても ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' となって見せてくれません。アホな質問をしているという自覚はあるんですが、 どうやったら繋げるのかワカランで困っています。ここ読めボケ!とか、基本はこうやろ!とか、 何でもいいので取っ掛かりを教えて下さい。パスワードの設定とかもどうすればいいのやら。。。
>>842 ええ?2Gも入りますか?
以前800MBでエラーになったことあるんですが。
もう一回作りなおしてみては? /etc/init.d/mysqld stop mv /var/lib/mysql /var/lib/mysql.org /etc/init.d/mysqld start
ストレージエンジンによるんじゃね MyISAM?InnoDB? OSのファイルシステムによるんじゃね Linux ext3? FeeBSD zfs? Windows ntfs?
ファイルサイズはOS(ファイルシステム)が扱える最大サイズが限度だろ。 別にMySQLに上限があるわけではないな。
趣味サイトならともかく仕事でやるなら画像はDBに入れておかないと怖すぎるなぁ バックアップとか特に。
>>847 仕事でやると、レプリケーションが大変なことになりそうだが。
レプリケーションって何?
ggr
>>849 意味が分からないんだけど…DBに画像を格納するとどうしてレプリケーションが大変に??
いや、画像云々じゃなくて、仕事でやると大変ということ。
DBに画像保管とか、素人乙としかいいようがない設計
>>855 あまり初心者をいじってやるなよ。かわいそうだろ。
>>841 -h localhost ←これを付けなかったらどうなるかな?
>>858 画像とかサイズあるから、大量にくるとレプリケーション遅延するっしょ。
スレイブの状態がバラバラになる可能性も出る。
そりゃサイズ次第だな。 スレイブの状態がバラバラってのは意味がわからん。 MySQL ClusterはBLOBの一貫性に問題があるってこと?
巨大データが届くと遅延が発生してバラバラって事でしょ 掲示板とかに書きこんだ文字がなかなか表示されなかったりね バイナリデータに差異が起きるのでなく、時間的に差異が出る
そういう現象が発生するとしたらクラスタとして成り立っていないことになるが… MySQL Clusterにそういう問題があると言っている? いずれにしても、画像を外出しにしたらその同期のところを全部自前で用意しなきゃ ならんわけだよ。
863 :
841 :2011/05/29(日) 14:54:29.35 ID:???
クラスタって何?
>>862 あぁ MySQL Cluster ってオンメモリだけなお大臣ソリューションあったなw
一般的なレプリケーションの時の話ですね。
同期のところを自分で〜ってのも多分HTTPサービスだろうからリバースプロキシ+キャッシュとか、rsync でえっちらおっちらとか、そちらの手法も色々確立されてるし
画像をDBにつっこんで幸せな状況もあるし。
うちは両方やってるよ
レプリケーションでもあんまり事情は変わらんと思うがなぁ。 画像は同期が取れていないことがあってもいいから通常レコードの 同期だけは早く終わらせたいとか、そういう暗黙の前提があるのかね。
>>866 通常マスタは更新専用で読み出しはスレイブからになる。だから、スレイブの最新データがそれぞれ違うと大問題。
大手サイトのケーススタディみたいなの見るといいよ。
ほぼみんな同じ運用。
画像はDBとは別管理で、DBはレプリケーションで、マスタ・スレイブ。スレイブ増やして負荷分散。
最近はAmazonS3に画像などファイル預けるのがデフォになりつつあるもうな気もする。
だからさ、DBと画像の同期ズレは許容すんのが前提なの?で、スレーブ間の同期は そんだけシビアなの? そもそも、スレーブ間の完全な同期が必要だったらレプリケーションでやっちゃダメじゃんw それを、画像が含まれないなら無視できる範囲だからやっちゃえ、てなもんか。
レプリケーションって何?
>>868 画像はそもそもDBとは別に管理するもんだ。DBスレイブには画像は置かない。
まぁ自分はそこまで大きなシステム触ったことないけど、静的ファイルの配信は負荷分散というより、冗長化による信頼性なんじゃないかな。
バックアップするだけで、レプリケーションするわけじゃないと思う。
詳しい人教えて。
大学の卒業研究でMySQL、PHPを1年ほど使用してデータベースサーバを の構築をした経験があり、実務経験がないのですが、転職ってできますかね? 現在大学4年なので新卒向けのサイトを見て就職するのが一般的なのですが 給料等の面から、同じ正社員であれば転職のほうが良いなぁと考えています。 お詳しい方教えてください。
環境構築云々より何を作ったかが大事
実務経験がないなら新卒以下の待遇だろうな
>>871 その程度の人材なら二束三文で手に入るので別にどうでもいいし
それしかウリがないのなら むしろいらないんだけど
というのが正直な回答になるよね・・・申し訳ないけど
素直に新卒枠で見ていった方が良さそうですね。 ありがとうございました。
画像をDBへの話は、画像を入れるタイミングが 人によって想定がバラバラに見える。 多少の信頼性の低さを許容出来るような WEBサービスを 前提とした場合の話になってしまうが、 画像を管理者が更新する場合はスレーブの遅延は気にならないはず。 # 更新頻度が低く、画像を公開するタイミングをコントロールできる 画像アップロード掲示板みたいなユーザー更新で 画像が追加される場合は、頻度が多いので 遅延を許容して専用DB用意するなり、KVS なりに逃がすのが いいんじゃなかろうか ちなみに、うちの場合は「ユーザー更新のサービスはしてない」、 「画像の合計容量が数Gしかない」という条件なので、 一番性能が良いと考えて、WEB用サーバ自体にファイル同期してる。 # サーバは300台前後
状況によって変わるから絶対の解は無いよね 画像が入ったテーブルのダンプがでかくて嫌とかもあるな
バイナリファイルをダンプで出すこと出来ましたっけ?
基本を分かってあえて崩す技使うのはあり得るが、それを初心者にいきなり教えるなっつーこと。 あえてそれやるレベルの人間がここで「4G越えたらテーブルを分割して対応しているの?」なんて 質問するわけないだろう? だから、ここでの回答は一律「画像をDBに入れんな」 でいいんだよ
DBとDB管理外のリソースに分ける方が基本なのかw どうも常識が違うようだ。
自分が今まで勉強のために見たすべてのケーススタディは、バイナリは別管理だった。
テーブルのフィールドタイプがInnoDBで 全体のフィールドタイプがMyISAMになってることに気がついたんですが このままでも問題ないでしょうか
>>882 言ってることが良く解らん。
デフォのテーブルタイプがMyISAMと設定されてるけど、
いくつかInnoDBなテーブルも存在してしまってるってことか?
それは、もーまんたい。
>>883 そのとーりです。
特に支障なく動いているようなのですが、
気持ち悪いので統一したほうがいいのかとおもって
>>884 統一じゃなく、テーブルの使用目的に合わせて設定すべきだぞ。
MyISAMとInnoDBの違いとか勉強すべし。
>>887 最近は、調べていくと、InnoDB一択にしか
ならなくない?
よっぽどでなければそれ以外の選択肢に
ほとんど意味がない感じがする。
全文検索さえなければ
>>847 DBとファイルシステムを深く知らない俺には無理だ。
likeで実現できない検索機能は作らない。これでOK
893 :
NAME IS NULL :2011/06/01(水) 16:56:16.75 ID:NFtZrkjM
MySQL 3.23 から 5.0.90 にデータ移行したいのですが、 下記のシンタックスエラーで移行できませんでした。 ERROR 1064 (42000) at line 4: 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 '------------------------------------------------------- どうにか、移行する方法はないでしょうか。
894 :
NAME IS NULL :2011/06/01(水) 17:20:00.05 ID:NFtZrkjM
自己レスです。 line 4 を消したら移行できました。m(_ _)m
MySQL5.5.8でテーブルの列名を変更したいのですが、 ABC.DEFのように列名に「.」が含まれているため上手く変更できません。 ALTER TABLE z09_96 CHANGE COLUMN ABC.DEF ABC_DEF; などと入れると "Incorrect table name 'ABC'" といったエラーが出てしまいます。 .がテーブル指定の.と認識されていると思うのですが回避策は有りませんでしょうか。
>>895 バックスラッシュで囲む。
mysql> ALTER TABLE z09_96 CHANGE COLUMN `ABC.DEF` ABC_DEF CHAR(10);
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
>>896 書き方は合ってるけど、それはバックスラッシュじゃないよ。
バッククォートだな。
後で泣き見そうなカラム名だなや
ここにのせるのに適当な名に変えてんでしょ?実際にそうだったらプログラマは泣くだろうけど w
>>901 ググらなくてもエラー見ればどこを直せばいいかはわかるという・・・
でも英和辞典が必要だけどね!
>>904 自分が英語がわかるのを自慢したいのか?
それともわからないのにカッコつけてるだけか?
>>905 いやまじで、あの程度の英語を毎回辞書で調べてたらプログラミングなんかできなくね?
エラーも全部英語だし。
それにしても、日本人はほんまに英語できんのやなぁ。英語=自慢とか。
>>896 'とか"で囲って無理だったので諦めてました、無知でした。
ありがとうございます!
カラム名変えてます。
まるで他人ごとだなw 在日乙
質問です。phpからの操作になりますが、 id varchar(8), a00001 boolean, a00002 boolean・・・みたいなテーブルがあります (フィールドの数字は飛び飛びです、boolean型のフィールドは数百あります) ここでinsert文で特定の項目にだけ情報を入れることはできますか? 例えばa00100とa00300にだけtrueを入れて、後は全部falseみたいな時に(idにも適切な値を入れる) どのようにinsert文を作るのがよいでしょうか? 「このフィールド名を持つフィールドは前から何番目か」というのがわかれば、php側でなんとかできそうですが・・・
>>909 INSERT INTO unko SET hoge=1;
という話?
>>910 うおー、今までvalues(ごちゃごちゃ);って書き方しか知りませんでした
勉強になりました、解決しました、ありがとうございます!
tinkoとかunkoとか下品な言葉を使うのは止めてください。
バッククォートってキーボードでどうやって入力すればいいのでしょうか。
どのキーを押せば出るのでしょうか。
Shift+@ ちったぁggr
‘ ←こんなのが表示されましたが、これでいいのでしょうか。
゛←これじゃね?
(‘_ ‘ ) < んなわけねーだろ
mysqlが起動するmysqldの優先度(nice)を、 いつも -1 に固定するような設定を、 /etc/security/limits.conf でできませんか? MySQL 5.1や5.5では、my.cnf にて nice=-1 とすれよかったのですが、 MariaDB(5.2.6使用ですが, これに限らす) ではこれが機能しないのです。 よろしくお願いします。
mysqldumpの書き方で質問です。 特定のテーブルのみを指定したくて、以下のように書きました。 mysqldump --host=localhost -- user=ユーザ名 --password=パスワード DB名 user* admin* | gzip > ファイル名.gz しかし、バックアップファイルは出来ません。 テーブル名にワイルドカードを指定できないのでしょうか?
>>921 自分で実際にやってできないのにどうしてできると思うんだ?
/var/lib/mysqlを丸ごとコピーすればバックアップできると思うのですが、 敢えてmysqldumpを選ぶ理由って何かあるのでしょうか?
MySQLのSQLで質問があります。 回答して頂ける方が居られれば、宜しくお願いします。 下記の3つのテーブルがあり、itemごとに複数のcotegoryを設定できるため、 rel_item_categoryでitemとcategoryを紐付けています。 レコード数はdat_itemが5万行、dat_categoryが20行、rel_item_categoryが15万行です。 dat_item - item_id - price - date dat_category - category_id - name rel_item_category - item_id - category_id
category_idが1かつdateが指定日時以下のitemをpriceでソートして取得したいため、 下記のクエリを発行しました。 SELECT dat.* FROM dat_item AS dat INNER JOIN(SELECT item_id FROM rel_item_category WHERE category_id = '1' GROUP BY item_id) AS rel ON dat.item_id = rel.item_id WHERE dat.date < '2011-06-03 02:21:00' ORDER BY dat.price 意図した結果が取得できますが、 EXPLAINで確認したところ、Using temporary; Using filesortになっており、 relとdatが結合したあとでソートされているようで、非常にコストがかかっています。
コストがかかってしまいましたか。 なるほど、勉強になりました。
>>924 >>925 の続きです。
SELECT item_id FROM rel_item_category WHERE category_id = '1' GROUP BY item_id
この結果のテーブルrel_item_category_1をつくり、下記クエリを発行したところ
結合前のdat_itemでインデックスを使用してソートできました。
SELECT dat.*
FROM dat_item AS dat
INNER JOIN rel_item_category_1 AS rel
ON dat.item_id = rel.item_id
WHERE dat.date < '2011-06-03 02:21:00'
ORDER BY dat.price
最初に提示した3つテーブルだけで
「category_idが1かつdateが指定日時以下のitemをpriceでソートして取得」を高速に行うことはできないのでしょうか?
>>923 1つのファイルに収まる、圧縮して容量も劇的に減らして残しておける。
あとはDB全体をリストアするなど。
(mysqldump→全データベース削除、関連ファイル初期化→インポートしたらまっさらな状態からテーブルが作られる)
なるほどね…。 このケースだとそのような疑問がでるのか…。 ご報告ありがおう。 色々と勉強になりました。
SELECT dat.* FROM dat_item dat INNER JOIN rel_item_category rel ON dat.item_id = rel.item_id WHERE rel.category_id = '1' AND dat.date < '2011-06-03 02:21:00' ORDER BY dat.price; だと何か問題あるのか
>>923 丸ごとコピーは原則mysqldを停止しないとダメ
mysqldumpはmysqldを動かしたままとれる
932 :
921 :2011/06/03(金) 22:06:46.31 ID:???
>>922 「出来る方法があるのではないか?と思って質問した次第です・・。
データベース内にいくつもテーブルを作っているケースってあるでしょうし、
必要なテーブル名を全て列挙するのも面倒と思いまして。
それしか方法がないなら納得しますが、他に方法はあるのではないか?
自分が知らない事があれば教えて欲しい。そう思って質問しました。
バッククォートってキーボードでどうやって入力すればいいのでしょうか。 Shift+@ と昨日教わりましたが、 ‘ このように表示されてしまいます。 なお、IMEはPCに入っていたものを使っています。
` ←Shift + @ ‘ ←IME on で Shift + @ 結論:IME切れ、ハゲ
IMEを切れとのことですが、切るとはどのような行為を示していますか? 切るとハゲに関係があるのかしらん?
つまらない事聞きますけど、「PC用」「携帯用」とフィールドを分けるとき、 どういうフィールド名にしていますか? 電話番号の場合、telはPC用として、携帯はmobile_tel?ktai_tel?
サーバのバージョン: 5.1.44-community MySQL クライアントのバージョン: mysqlnd 5.0.5-dev とかいうときMySQL Connector Netはどのバージョンをインストールしたらいいのでしょうか?
>>930 そのSQLでUSE INDEXでdateとpriceの複合インデックスを指定するか、
WHERE句にprice>0を追加することで、インデックスを使ったソートが出来ました。
大変助かりました。本当にありがとうございます!
940 :
NAME IS NULL :2011/06/04(土) 11:23:45.20 ID:m9IbrQpl
941 :
NAME IS NULL :2011/06/04(土) 11:35:47.08 ID:m9IbrQpl
>>941 なんかオプションをつけるとだいたいインデックスがつく
主キーにはインデックスをはらなくてもって、 主キーこそがインデックスだと思うんだが、 自分の認識間違ってるのか。
お次の質問どうぞ。
正規化によって繰り返し項目を別表に分けた後は、どのように結合すればよいでしょうか?? SQL文を2つに分けたら解決しますが、1つで出来ないでしょうか? table1 id,table2id,name table2 id,data table1id name data1 data2... 1 'abc' 'abcの趣味1' 'abcの趣味2'...
>>937 Connector/Net, Connector/Jはクライアントライブラリ使わないので、サーバ側にあわせて何でもよいよ。
サーバ側5.1ならConnector/Netの最新版(6.3.6)でいいんじゃね?
>>948 ありがとうございます!
結果も1行で取得したいのですが、不可能でしょうか?
それともleft join等で複数行で取得するのが一般的でしょうか?
基本的には複数行で取得するのが一般的だな。 どのみち「abcの趣味」が複数あるわけだからプログラム側でうまく処理すればいい。
>>950 ありがとうございます!
プログラム側で対処する事にします!
952 :
NAME IS NULL :2011/06/07(火) 19:23:07.61 ID:Maj1FVhL
大量のSQL文の処理が終わらない…
処理を速くする方法はあるでしょうか?それとも根本的に何か間違えているのでしょうか…
http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-categorylinks.sql.gz このファイルは解凍すると500MBになり、最初の40行でテーブルを作成して
以下INSERTを繰り返すSQL文になっています
http://pastebin.com/7s10E71y localhostでこのsqlファイルを処理してるんですが1時間たっても終わらない…
こんなものでしょうか?
以下MySQLの使用環境です
mysql-5.1.49-3
OS: Linux (debian-squeeze)
以下実行したコマンドです
$ mysql -u user userdb < jawiki-latest-categorylinks.sql
<処理が終わらない>
最初の41行文(INSERT2行)だけならすぐに処理が終わり、SELECTで読み込まれていることが確認できました
$ head -n41 jawiki-latest-categorylinks.sql > test.sql
$ mysql -u user userdb < test.sql
500MBでしょ?5時間もすればおわるでしょ
>>952 見てないけど、sql文のはじめの方でインデックスを作成してる場合は、インデックスを作成せずに create table をやると多少というかかなり速くなる
で、タプルが全部 insert された後にインデックスを追加する
(たぶん、sqlファイルの最初のcreate table 文でキーの指定をしてるので、それを全部取り除く)
あと、ファイルサイズと関係なく、MySQLはタプル(行、レコード)の数が10万を超えると、検索の方も遅くなって使い物にならなくなるので、タプルが10万を超える場合は、かなり慎重に設計や最適化をする必要がある
(ちゃんとやれば、10万以上でもそれなりに速く動く)
>>952 のダンプデータは本当に MySQL のダンプなのでしょうか?
>>955 そりゃRFC違反だからな。弾きもするだろ。
957 :
952 :2011/06/07(火) 23:53:22.36 ID:???
>>953 まさに5時間ぐらいでした
こんなものなのかー
インデックス削れば速くできますよね、ありがとう気づかなかった
2分48秒でロードできたよ MySQL 5.5.11、Core i5-2400S、Intel X25-M G2 120GB innodb_buffer_pool_size = 2G
>>954 タプルってtableのこと?
そういう読み方流行ってんの?
>>958 Innodb なら log buffer sizeも関係ありそう?
まぁ、質問主がどんなSQLなんかわからんけど、1行ずつ入れると遅いし
insert .... values(),(),()
は常識だよな?
10万程度ならインデックスなくてもそれなりに早いよな。
962 :
952 :2011/06/08(水) 01:22:45.04 ID:???
ありがとおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお!
innodb_%_size 弄ったら劇的に速くなった!!
試しに↓でやってみたら5時間かかってたのが12分で終わった!インデックス削れば更に速くなるかもです。
[mysqld]
innodb_buffer_pool_size = 512MB
innodb_log_file_size = 128M
他にも複数コア使う設定とかもあるのかな?CPUパワーあまり使ってくれてない感じがする…
wikipediaが配布してるデーター読みたくてMySQL使い始めたんですが、
他にも良さそうな設定あればヒント頂けるとありがたいです。
>>960 こんなSQLでした。
http://pastebin.com/7s10E71y
>>962 Wikipediaのデータで遊びたいなら全文検索あったほうがよくないか?
それならMyISAMになるが。日本語だとちょいと工夫がいるけど。
groongaとかで遊んで見たら?
5時間が12分に短縮って、、、、 w
>>959 釣りだと思うけどw
タプル=セット=組=レコード一件
タプルって呼び方はPostgreSQLの人がよく使う印象
ID | NAME 1 | a 2 | a 3 | b 4 | c NAMEが重複しないIDを取得したいのですが SELECT DISTINCT NAME FROM テーブル名 だとNAMEしか取得できなくて困っています。 すごく初歩的なことかと思うのですがヒントだけでも教えてください。 お願いしますm(__)m
>>967 SELECT ID,NAME FROM unko GROUP BY NAME;
MySQL以外じゃろくに動かないから注意な
タプルはtupple 英語だとテュープルに近いw
970 :
967 :2011/06/08(水) 15:02:33.22 ID:???
>>967 ありがとうございました。
GROUP BYですね。
勉強してきます!!
971 :
967 :2011/06/08(水) 15:03:39.45 ID:???
あ、安価間違いましたorz
>>968 さんありがとうございました。
>>962 他の設定次第だけど insert が多い場合は
set global innodb_flush_log_at_trx_commit=0
も速くなるよ。
これするとクラッシュしたときデータが当てに
ならなくなるので大量の insert などが終わったら
set global innodb_flush_log_at_trx_commit=1
で元に戻しておいたほうがいい。
# 手元の開発環境とかならお好きに
本番環境でも大量にある参照用スレーブとかは
この設定にしておくとレプ遅延が起こりにくかったりする。
>>965 ,966,969
「ブ」じゃなくて「プ」なのか。タプルって用語を知らなかった。
>>956 RFC5321 4.1.2. を読んで言ってるんだろうね?
>>974 そりゃもちろん。メール絡みのRFCは全て読んだよ。
まあここはMySQLのスレだから これ以上は屋上いこうか。
>>975 顔から火が出るほど恥ずかしくなって屋上から飛び降りるってか?
読んだだけでまるで理解していないというのはかなりたちが悪いんだよね。
何事も半可通が一番迷惑なんだよ。
id, col, value 1, n, apple 1, c, red 2, n, banana 2, c, yellow 3, n, grape 3, c, green 3, w, 100 のような、各ID番号、列記号、値の入ったテーブルがある時、 id, n, c, w 1, apple, red, NULL 2, banana, yellow, NULL 3, grape, green, 100 のような出力を得たければ、どうするのが定石でしょうか。
ドットを使うくらいじゃRFC違反にはならないからね
>>978 たぶんこんな感じ。
select a.id, a.value, b.value, c.value
from table a left join table b left join table c
where a.id=b.id and a.id=c.id
>>980 やっぱり列の数に応じて必要なだけjoinするしかないんですかね…。
982 :
980 :
2011/06/09(木) 20:20:01.68 ID:??? 間違えた。こうか? select a.id, a.value, b.value, c.value from table a left join (select * from table where col='n') b left join (select * from table where col='c') c where a.id=b.id and a.id=c.id;