952 :
NAME IS NULL :2005/07/13(水) 01:16:23 ID:aWcHVZvA
>>951 MasterでInnoDBなテーブルをSlaveではMyISAMで保持したりとか、
レプリケーションのバックアップとしての利用は奥が深い。
ストレージエンジン固有の -例えばInnoDBHotBackupとか- バックアップツールというのも
あるわけだが、MySQLは全ての更新情報をbinlogとしてログを残すことができるというのが
大きな特徴でもある。
いわゆる「フルバックアップ+差分バックアップ」の考え方でいくと、単にbinlogを保存するだけだと
フルバックアップに相当するものがないけど、レプリケーションを使えば補える。
レプリケーションも、常時レプリケーションをさせるだけでなく、定期的にレプリケーションを
稼動させることで、「binlogという差分をフルバックアップに当てる」というようなやり方もできる。
MasterでInnoDBだったテーブルをSlaveでMyISAMにすることで、さらにそこから
バックアップを取ったりするのも容易になる。
↑ちょっとあまりまとまってないけれども、米国Yahoo!comとかのMySQLユーザ大手企業では
レプリケーションを中心に据えたバックアップ運用をしてるとか聞いた。
953 :
NAME IS NULL :2005/07/13(水) 08:05:30 ID:lDu7Hvfy
>>951 レプリケーションの最大の弱点は、Masterに対するDBAのオペレーティングミス。
間違えてTableをDropしちゃったりすると、もちろんそれがSlaveにも反映されてしまう。
そ、そ、そんなばかなー!!
( ゚д゚)?
>>952-953 俺も
>>953 のを想像したんだが、
>>952 の言う
間欠的にレプリケーションをさせるというのは、
俺的には新しい観点で、Masterの運用に影響もなく、
いいのかもしれないね。
956 :
NAME IS NULL :2005/07/13(水) 23:58:26 ID:B1MsBXgZ
RedHatLinux 9.0 にMySql5.0.7 beta を入れたいのですが、どれをダウンロードすればよいのでしょうか。
957 :
NAME IS NULL :2005/07/14(木) 02:44:15 ID:j1+loLdd
>>956 お前さんが使っているマシン(CPUアーキテクチャ)などによるのでそれだけじゃ何とも言えないね。
でもまあ、普通の32bit CPUにRedhat9.0入れているだけで、特に深い意味はない質問です、
というのなら、これなんてどうでしょう。
Linux (x86, glibc-2.2, static, gcc)
漏れ的にはRPM版よりもtar.gz版がお勧め。展開して/usr/loca/mysqlからシンボリックリンクを張れ。
958 :
957 :2005/07/14(木) 05:38:43 ID:j1+loLdd
>>957 × /usr/loca/mysql
○ /usr/local/mysql
orz...
960 :
957 :2005/07/14(木) 10:31:59 ID:j1+loLdd
>>959 /usr/local/mysql-x-xx-xxxx
/usr/local/mysql-y-yy-yyyy
/usr/local/mysql-z-zz-zzzz
という風にバージョンごとに実体は置いておく。
今現在使いたいMySQLに対して /usr/local/mysql -> /usr/local/mysql-x-xx-xxxx という風にシンボリックリンクを張り、
基本的にはこのシンボリックリンクの切り替えだけで、どんなバージョン、あるいはどんなMySQLのセットも1発で切り替え。
PATHは/usr/local/mysql/binに通しておく。
my.cnfは/usr/local/mysql-x-xx-xxxx/dataそれぞれに書いておく。
/usr/local/mysql/data/my.cnfを読んでくれるバイナリならそれだけでOK。
/etc/my.cnfじゃないと駄目なバイナリ対策として、さらに /etc/my.cnf -> /usr/local/mysql/data/my.cnf へシンボリックリンク。
このやり方にしてから、まあ検証環境がメインだけどしょっちゅう稼動バージョン変更だとかそういうのも一発でできてるお。
この手のノウハウについては英語圏ではいろいろ本とか記事?とかでてるみたいよ。
>>960 で、データーベースの移行はどうやるの?
962 :
956 :2005/07/14(木) 12:34:34 ID:???
>>957 どうもでありがとうです。
どこ見ても説明がみつからんもんで・・・。
CPUすんません。おっしゃるとおりで、Celeronです。
SQLの書き方で困っています TBL1 +----+----+----+ |FLD1|FLD2|FLD3| +----+----+----+ |1001|1AAA|1BBB| |1002|2AAA|2BBB| |1003|3AAA|3BBB| TBL2 +----+----+----+ |FLD4|FLD5|FLD1| +----+----+----+ |2001|1CCC|1001| |2002|2CCC|1002| |2003|3CCC|1002| |2004|2CCC|1003| |2005|3CCC|1003| TBL2.FLD5 の 2CCC で検索した時に Result +----+----+----+----+----+ |FLD4|FLD5|FLD1|FLD2|FLD3| +----+----+----+----+----+ |2002|2CCC|1002|2AAA|2BBB| |2003|3CCC|1002|2AAA|2BBB| |2004|2CCC|1003|3AAA|3BBB| |2005|3CCC|1003|3AAA|3BBB| のような感じでレコードを抽出したいんです SELECT * FROM TBL1,TBL2 WHERE (TBL1.FLD1 = TBL2.FLD1) AND (TBL1.FLD1 = (SELECT FLD1 FROM TBL2 WHERE FLD5 LIKE "2CCC")) と書いてみたんですが駄目でした SQLをどのように書けばいいのでしょうか? さくらのレンタルサーバー使用でMySQLのバージョンは4.0.20です
>>963 MySQL4.0.x系はサブクエリが使えないからツライね。
手元に4.0.x系がないので動くかどうか判らないけど、こんなもんでどうだろうか。
SELECT DISTINCT
tbl2.fld4, tbl2.fld5, tbl2.fld1, tbl1.fld2, tbl1.fld3
FROM tbl2
LEFT OUTER JOIN tbl1 ON tbl2.fld1 = tbl1.fld1
LEFT OUTER JOIN tbl2 AS t ON tbl2.fld1 = t.fld1
WHERE tbl2.fld5 = '2CCC' OR t.fld5 = '2CCC'
965 :
802 :2005/07/14(木) 16:08:19 ID:bLVhDXNB
初歩で申し訳ないですが... not null を指定してても、insertなどでそのカラムを指定し忘れた場合でもエラーが出ません。 create table test( i int not null, c char(1) not null, v varchar(10) ); insert into test(v) value("a"); # エラーは出ない。 こういった場合にはエラーが出るようにテーブルを作るにはどのようにしたら良いのでしょうか?
968 :
965 :2005/07/14(木) 20:01:22 ID:bLVhDXNB
>>966 有難う御座います。そうなんですね...。
アプリ側で考えます。
969 :
963 :2005/07/14(木) 20:06:38 ID:???
>>964 さん
ありがとうございます
JOINを使って結合していくんですね
うまく抽出が出来ました
>>967 さん
人事関係のデータベースで個人情報の部分のテーブルと取得資格のテーブルが分かれていて
○○の資格を持っている人の一覧だけなら取得資格のテーブルとの結合だけで良いんですが
○○の資格を持っている人は他にどんな資格を持っているかも表示を行いたかったんです
資格○○を持っている人の情報
<NAME>□□□</NAME><SKIL1>○○</SKIL1><SKIL2>▽▽</SKIL2>
<NAME>▲▲</NAME><SKIL1>○○</SKIL1>
こんな感じです(^-^;
>>969 どーでもよい話だが人事関係のDBをさくらのレンサバに預けるのも
ある意味凄いな。怖くないか?
>>961 本番データは、MySQL本体とは別の共通ディレクトリに
置けばいいじゃん。
972 :
NAME IS NULL :2005/07/15(金) 02:06:21 ID:0pzFxJt7
>>961 データとサーバのバージョンは分けて考える。
>>971 のいうように共通ディレクトリがいいのかも。
4.0系から4.1系にあげるときのようにファイルフォーマットが代わる場合には新しいディレクトリが必要。
(確か変わるよね?)
んー、4.0から4.1にするんなら同じデータ使えるよ。 逆だとあんまり良くないけど。
4.0と4.1ってめちゃくちゃかわってるとおもわれ
975 :
NAME IS NULL :2005/07/15(金) 21:27:08 ID:y8eO46wK
csvのデータをDBに保存するのですが、どうせなら利用しやすくしようと思って、 カラムごとに作ってみたのですが、 create table csv( _1 varchar(255), _2 varchar(255), _3 varchar(255), ・・・ ); と、どんどん増やして sql を発行したら以下のように怒られてしまいました。 ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs まあ、そりゃそうだなという感じなのですが、csvを保存するのに何か良い案は無いでしょうか? (mysql 4.1.11)
誤り1118(42000): 大き過ぎる状態でサイズをこいでください。 BLOBsを数えないで、 中古のテーブルタイプに、最大の列のサイズは65535です。 あなたはいくつかのコラムを TEXTかBLOBsに変えなければなりません。
コラム吹いた
>>974 ん? 現に使ってますが。
ISAM形式の奴が残ってて、それだけは駄目だったけど。
(コンパイルオプションに入れなかったから)
ま、いまさらISAMなテーブルが残ってるほうが問題ですが。
>>977 野暮なツッコミで申し訳ないがcolumnをコラムと読もうがカラムと読もうがどっちでもいい。
DB界隈ではカラムと読む方が一般的だけど。
4.1って強制UTF8のせいで マルチバイトキャラクタがテーブル名や列名にはいると互換性なくなってなかったか?
>>979 読む場合はどっちでもいいけど、書くときはコラムだと嫌だな
phpmyadminにある「次の行を編集する」みたいに、 自動的に次のレコードを表示させる・・・ような関数って無い?
テーブル名や列名をascii以外にはしない。 コーディングするとき面倒くさいから。
毎日 row がある程度増えて行くんですが、unique 性があればいいのは一定時間だけなんです。 こう言う場合は primal key ってどうすればいいんでしょうか? Oracle 使いに聞いたら、循環する int を使えと言われたんですが、 MySQL にそんなのありますか??
986 :
NAME IS NULL :2005/07/16(土) 16:18:24 ID:GKvS+qiJ
987 :
985 :2005/07/16(土) 16:30:00 ID:???
>>986 ネタ?
ちなみに mysql では 各column の値が定義領域を超えると、
最大値に丸められます。
なにこいつ
989 :
NAME IS NULL :2005/07/16(土) 23:19:48 ID:NbSXfESe
MySQL4.1で、文字コードを「ujis_japanese_ci」にして、PHPからEUC-JPの文字列を 登録したら、データが壊れて登録してしまいます。 どのようにデータを登録すればいいのでしょうか?
>>989 どのようなデータを登録すると、どのように壊れたデータが
登録されたのかを書きなはれ。世の中エスパーばかりでは
ないんで。
985がネタだろ
んー、 CREATE TABLE example ( date date not null, uid int unsigned not null auto_increment, unique (date, uid) ) とかは?
994 :
989 :2005/07/16(土) 23:35:02 ID:???
失礼。 文字列(文字コードEUC-JP) 「東京都|大阪府|愛知県」 SELECTで表示させたデータ(文字コードEUC-JP) 「東??」 ブラウザで見ると、?と黒い菱形の中に?があるものが所々ある。 単純に文字コードがEUCではなくて、UTFとかで入っているのかと 思ったけど、そうではないみたい(色んな文字コードに変換してみたけど駄目だった)
Update で join って出来る?
996 :
990 :2005/07/17(日) 06:08:59 ID:???
>>994 MySQLサーバーとクライアント間の文字コードが合っていないと
思われ。
PHPでMySQLに接続後、SET NAMES UJISを送る処理を追加すれば
直ると思うよ。
998
999 :
NAME IS NULL :2005/07/17(日) 12:42:18 ID:k8NW5frL
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。