MySQL 総合 Part26 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>65
レスありがと
innodb_buffer_pool_size は mysqld で128Mを指定、sort_buffer_size は見当たらないです show variables like '%sort%';
ではsort_buffer_size は 256kb(?)でした。 mysqldセクションでsort_buffer_sizeとinnodb_buffer_pool_sizの値を変えて試してみます。 mysqlなんですが
外部結合などの依存関係を無視して強制的に
データを削除したいんですがどうしたら良いですか? constraintを外すなら
alter table 〜 drop foreign key 〜
で消しちゃえば Likeの部分一致使ったり
Join使いまくったり
インデックスろくに使わなかったり
Entity Attribute Valueなるアンチパターンに沿った構造のテーブルを作って
更に大量のデータを入れたら
検索に二時間掛かったりするようになった
ユーザーがページをそっ閉じしても
二時間も忠犬の如く処理し続けるDBのエンジン 正確にはデュアルライセンス。
GPLか独自ライセンスの二択。 innodbが壊れたのでinnodb_force_recovery = 1で修復したけど
データが失われていないかどうかが気になる
壊れてたのはインデックスだけなのか?
データが消えてたらやばいよね innodbが壊れる環境自体がヤバい気もする。
システムとかハードウェアとか運用とか。
まあ、うちはそういう目にあったことがないから。 >innodbが壊れる環境
メモリが足りないのでスワップが発生しまくりでそこに負荷が生じた…とか? 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
NVRTDIY5WF utf8mb4でもINSERTできない文字があるのですが、どのようにすればINSERTできるようになりますか?
例えば
?( 'ω' )? insert into tt value ('\\\\?( ''ω'' )? ////'); 文字化けしているけど、
目の所のシングルコーテーションを二つにすれば上手く行きそう あ、そういうことですか。。。
すいません、初心者なもので
ありがとうございます
もうすこしがんばってみます MySQLのデータベースをWordPressで使っています。
Web上のレンタルサーバに置いているWordPressのミラーをローカルなサーバ上に作っています。
ただ、データベースの同期の方法がわからず、定期的に丸ごとコピーしていて、非常に時間がかかります。
変更のあった部分だけをミラーリングする方法について、
何かヒントや参考になるサイトをご紹介いただけないでしょうか。
よろしくお願いします。 >>88
丸ごととは?
ファイルコピー?mysqldump? >>89
ありがとうございます。
mysqldumpそのものを知らなかった、というレベルでして…。
日付指定のバックアップ、リストアができるんでしょうか? 素朴な疑問ですが、MySQLのSET型は、
1つのカラムにカンマ区切りでデータを格納できます。
しかし、カンマ区切りでデータを格納するのはバッドノウハウだと
データベース関連の書籍などで表示されています。
どうしてSET型があるのでしょうか? >>92
無能な著者が覚えたてのバッドノウハウという単語を使いたかっただけだから気にすんな
あとその本は自治体の古紙回収にだせば再生紙として価値があたえられるからオススメする >>92
その本は、MySQL限定ではなく、データベース一般についてだったのでは?
一般論としては、複数の値の記録にカンマ区切りテキストは使うな、正規化して別テーブルに割れ、となるはず。
MySQLには、SETとかENUMとかC言語っぽい特殊な型がある。便利だったり効率的だったりするので、MySQLべったりでよければ検討するべき。 いくらバカがマジョリティーだからといって
バカ向けの戒めを一般論とうそぶくのは図に乗り過ぎだと思うよ まぁ何でもメリットとデメリットを比較検討した上で使う分には問題ない
アンチパターンってのは何も考えずにやるのは止めとけってこと >>96
> バカ向けの戒めを一般論とうそぶく
意味不明。
何が言いたいのか? >>98
何か裏の意味があるんじゃないかとか気になっちゃってるの?
例えばキミがバカだとか?
まあそれは俺には否定できないけどw
安心しな>>96に書いてある通りだよw なお意味不明。
おまえがバカであることはわかったので、会話終了。 >>100
あらそうおめでとう
また一つ勘違いが増えたねw ☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆ MysqlがすぐおちるのですがMariaDBにすれば改善されるのでしょうか?
よく出るエラーメッセージはこんなやつです。
mysqli_set_charset(): Error executing query in DBのURL
MariaDBはMysqlに比べてどのぐらい優れているのかもわからないので教えていただければ幸いです。 MysqlがすぐおちるのですがMariaDBにすれば改善されるのでしょうか?
よく出るエラーメッセージはこんなやつです。
mysqli_set_charset(): Error executing query in DBのURL
MariaDBはMysqlに比べてどのぐらい優れているのかもわからないので教えていただければ幸いです。 >>104
設定がおかしいからだと
どういう設定しているか詳細を晒してみると良いかも エラーが出るから他のRDBMSに乗り換えるという発想が大胆! 8.0は性能二倍だって
MariaDBいらなくね?
MySQL 8.0正式版がリリース。性能が最大で2倍、JSONデータや地理情報などサポート。ロールによるユーザー権限の管理も可能に
http://www.publickey1.jp/blog/18/mysql_802json.html >ロールによるユーザー権限の管理も可能に
これが出来るようになるのか。 MySQLは、コミュニティ版でもスレッドプールが使えるようになった? varcharの文字列の途中にタブコード(\t : 0x09)を入れたいのですけど、
例えば、'aaa\tbbb'というふうにタブコードを入れて、
読みだしてみたら、'aaa bbb'というふうにタブコードが2つの半角スペースに
置き換わっているような気がします。
タブコードを文字列の間に入れられないんでしょうか?
ちなみにタブコードで区切られたvarcharっをキーにして
利用するつもりです。 自己レスです。
文字列のなかにタブコードがあっても
全く同じように、普通に処理できました。
お騒がせしました。 https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html
https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html
MySQLの公式リファレンスは一部和訳されてるけど、この和訳って正しいの?
例えば
The mysqldump client utility performs logical backups,
↓
mysqldump クライアントは、論理バックアップ を実行するユーティリティーで、
こういう翻訳になるのはisが入っているときだけだよね? >>117
そういう機械翻訳じみた発想は捨てろ
一般動詞だから絶対こうなるとかないから >>117
信用できないなら原文だけ読んでたほうが幸せになれるよ >>118
mysqldump クライアントユーティリティーは論理バックアップ を実行し、
普通に翻訳するとこうなると思うんだけど>>117の和訳は何か意図があるの? >>122
どっちも同じ意味だろ?翻訳ってそういうもんだとしか言えん 翻訳者に自由はないのか?
せっかく訳してくれてるのに。
そこまでいうなら、おまえが正確無比な翻訳を公開してもいいよ。 >>122
日本語とえいごが一対一対応する訳ねぇだろ 技術系の書籍の日本語訳に文句を言って自分の無能を棚にあげている奴は多いが
その中の決して少くない数の人々は>>122のようなガチアスペだという事実 Windows10で、MySQL5.6.40を使ってます。
Pythonから利用しています。
連続して10万件ほどデータを書き込みしたいのですけど、
1つのデータをinsertしたらcommitしたほうがいいのでしょうか?
それとも10万件insertしたあとで1回だけcommitしたほうがいいのでしょうか? その10万件のデータが全部Insertされないと整合性がとれないなら、最後に1回Commitで医院で内科医 適度に分割するのがいいと思う。
あんまりメモリもディスクもムダに使わないように。 あんまり詳しくないんだけど、commitするってことはトランザクション貼るんだよね?
トランザクション貼る必要があったら分割できないし、途中で別処理が乱入してきてデータ不整合になることがないってわかってるならそもそもトランザクション貼らないでinsertすれば良くない? >>128
>>129
>>130
コメントありがとうございます。
10万件が揃ってないと次の処理に行けないので、
全くわかってないんですけど、beginでロックして
トランザクションにして最後にcommitしてみます。
実行時にディスクやメモリをチェックしてみて
かなり消費しているようでしたら、1万件ずつとかで
commitしてみます。 処理に順番があるだけなら、外部でロックして、後続の処理を待たせることも考えたら。
10万レコードを1トランザクションでコミットしなければいけないことなんかそうそうないんじゃないかとも思うので。 >>132
これが普通だよな
不要なのにトランザクション使ってるだけならパフォーマンス落ちるだけですむけど、一万件でコミットして次のトランザクション入るまでに割り込まれたらマズいなら作りが悪い >>132
>>133
ありがとうございます。
実は大きな勘違いがありまして10万件はサンプルであって、
本番用は4000万件が29ファイルの12億件ぐらいあることがわかりました。
1ファイルの4000万件をMySQLに書き込んでみたら4000万件ちょっとで、
2時間かかりましたけど、14Gほどディスク容量を使ってしまって、
Cドライブの残り200Gには入りそうにないことがわかってきまして、
ちょっと呆然としてます。
どうしたらいいか、ちょっと落ち着いて考えてみます。 innodb_file_format = Barracuda
を指定して節約するとか
ま、そんな量じゃ小手先だろなw 4T位のHDDを4台使ったRAIDで増設しよう
今時1万くらいで買える >>135
>>136
ありがとうございます。
CドライブがSSDで速いのでいいかなと思っているのですけど、
外付けのハードディスクを使わざるを得ないと思っています。
そこで簡単に外付け(Eドライブ)に移動する方法ですけど、
一度、MySQLを停止しておいて、my.iniのdatadirを指定して、
そこに現在のCドライブのmysql\dataフォルダをコピーしてやって
再起動すれば、そのまま使えるのでしょうか? >>137
135だけど
Barracudaの指定後それだけでは駄目でテーブル定義に
ROW_FORMAT=COMPRESSEDを付け加えないといけないから、そこら辺はいろんな
サイトで確認してくれ
くれぐれも慎重に >>137
問題ない。
しかし、何億件て。w
しかるべき筋に業務として発注したほうがいいんじゃないか。
自前でやっていいのなら、そもそもその全レコードが必要なのかを考えるところからだろ。
サマリ処理ではいかんのかとか。 >>138
>>139
ありがとうございます。
データを調べていたら、不必要なものが15%ぐらいあるようですし、
重複したデータがあって、それは件数さえわかればいいので、
countで件数数えてひとつにまとめます。
他のソフトの結果と連動して使うので、
サマリ処理だけでは済みそうにないんです。 それは理由としてまだあやしい。
ま、ここで正確に回答する必要なんかないんだけど。w
とにかく、そんなに簡単な案件ではなさそうなので、あきらめることもあわせてよーく考えるべき。
全レコードが記録されたデータファイルだけが目的なら別だけど、そうでなければ、時間をかけてつくったのにまともに検索できないデータベースができてしまう可能性も高い。
データ構造とかインデックスとかチューニングとか、いろいろあるからね。 >>141
ご指摘ありがとうございます。まさにそのとおりです。
まともに検索できるのかとか心配事は山ほどあります。
ただ、検索するときにはヒット件数が多くありませんので、
なんとかならないかなーと思っています。
とりあえず、やれるところまでやってみようと思います。 1Tの空きのあるEドライブにdataを移動して正常に起動できました。
最初、うまく起動できなかったのですけど、
フォルダのプロパティのnetwork serviceの
フルコントロール権限を与えないといけない、
というのをググって見つけて、そのとおりしたらうまくいきました! 昨日秋葉の99で4Tを買ってきたけど
1台8618円でした phpMyAdminにバックアップしていたデータベースをインポートしようとすると、
2006エラーで止まってしまいます。
こういう場合どうしたらインポート成功させられるんでしょうか?
MariaDB 5.5.56です。
SQLファイルは253MBあります。
max_allowed_packetが関係しているかなと思って、これを300Mに上げてみました。
それでもダメです。 スレ汚し失礼しました。
BigDump.phpでいけました。 128+256=384byteなはずなのになぜこのエラーが出るのでしょうか。
https://i.imgur.com/vqXsH4dl.jpg varchar(n) の n は文字数だったような気がする ありがとうございます。
回答をヒントに文字コードをasciiにしたらできました 様々な動物に皆で餌を上げます
同じ動物への餌は5分開けないと上げられません
動物に餌を上げるときに動物の種類、餌の種類、現在時刻をテーブルに登録します
この条件を満たすSQL文はどのように書けばいいのでしょうか?
現在は
SELECT time FROM animal WHERE ani=:ani AND esa=:esa AND DATE_ADD(time, INTERVAL 30 MINUTE) > CURRENT_TIMESTAMP() ORDER BY time DESC LIMIT 1
この文で実行してその結果でPHPの条件分岐で
INSERT INTO animal (ani,esa,time) VALUES (:ani,:esa,CURRENT_TIMESTAMP())
この文を実行するかどうか決めています
返り値は5分経ってない場合は残り時間が欲しいです 素直に最新のtimeだけとってきてPHPで条件分岐も計算もすればいいんじゃないの それだと複数のユーザが同じタイミングで餌を上げようとすると
両方が5分経ってると情報を渡し2人とも餌を上げられてしまいます そういうのはSQLじゃなく、
給餌システム側でセマフォのような仕組みを
作ってやらないと無理ではないか? あと最後の餌やりから30分以内のときだけtimeを取得する処理の必要性がわからん PDOなので自動でトランザクションが張られてると思います
ですがSELECT→INSERTの間のトランザクションは張られていないので駄目なのだと思います
$dbh->commit()も検討したのですが、結局SELECTでcommitしてトランザクションが切れてからINSERTするので意味がないと思います
すみません
30はコピペミスです
5でした select for update で終わり
トランザクション理解してなさげだからもう一回理解し直した方がいい 本当に聞きたかったことって動物の給餌作業の事じゃないんだろう PDOに関する無知だけ晒して礼も言わずに消える奴なんてもう相手にしなくて良いだろ
>>162
話の本筋じゃないからスルーしてたけどそうだよ お返事遅れてすみません
トランザクションについてもう一度理解し直そうと思います
回答ありがとございました ■ このスレッドは過去ログ倉庫に格納されています