タグ付けされた質問 「mysql」

MySQLのすべてのバージョン(Microsoft SQL Serverではありません)。質問に関連する場合は、mysql-5.7のようなバージョン固有のタグも追加してください。


1
ロギングが遅いクエリ
最適化を使用する可能性のあるクエリを識別するために、サーバーで低速クエリロギングを有効にしようとしています。単純に聞こえますが、私のファイルは書き込まれていません。エラーなどは発生しませんが、遅いクエリを記録しているようには見えません。構成を変更した後、mysqlを再起動することを覚えています。 MySQL Ver 5.1.61を使用しています。my.cnfの内容は次のとおりです。 slow-query-log=1 slow-query-log-file=/var/logs/my.slow.log long_query_time=1 ファイル/var/logs/my.slow.logには所有者としてmysqlがあります。これもデバッグのために、ログファイルのすべてに読み取り/書き込みを許可しました。 上記のlong_query_timeが1に設定されているのは、それが機能しているかどうかだけを見たいからです。私はそれを低く設定しようとしました(例えば0.3)が、まだ何も記録されていません。アプリの実行中のクエリには1秒以上かかることがわかってSELECT sleep(10);います。また、テストのためにターミナルで意図的にログクエリ()を実行しましたが、ログはまだ空です。 私はこれが機能するはずであると私が見ることができるものから、ドキュメントに目を通しました。誰が私が間違っているのかについての提案はありますか?アドバイスをいただければ幸いです。 編集:コメントで尋ねられたように、私はクエリを実行しました: `SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');` 結果: 10.0000000 /var/run/mysqld/mysqld-slow.log OFF これらはデフォルトであると考えているため、明らかに私の構成の変更は考慮されていません。変更しているmy.cnfファイルが、無効な値を入力した場合にmysqlが再起動時にエラーになるように解析されていることは確かです。ここで何が起こっているのでしょうか? 別の編集: @RolandoMySQLDBAのアドバイスを受けて、遅いクエリ設定行を[mysqld]私の設定の下に移動すると、保存されているようです。上記のvariable_valueクエリの結果は次のとおりです。 1.0000000 /var/logs/my.slow.log ON ただし、ファイルmy.slow.logが書き込まれているのを見ていません。私は、ファイルがmysqlのが所有しているとして、それはアクセス許可の問題だとは思わないし、私は、ファイル上のすべてのユーザーのすべての権限を追加しました。誰もこれが機能しない理由を考えることができますか? 編集:解決しました!スロークエリログへのパスが間違っていた、/var/log/my.slow.logの代わりに/ var / *ログインしている必要がありますS * / my.slow.logを。助けてくれてありがとう、私は割り当てを学んだ!

4
大きなクエリを複数の小さなクエリに分割する方が良いでしょうか?
必要な結果を生成するために、いくつかのテーブルをサブ選択ステートメントと一緒に結合する非常に大きなクエリを必要とする状況があります。 私の質問は、複数の小さなクエリを使用することを検討し、複数の呼び出しでDBにクエリを実行して論理演算をアプリケーション層に持ち込む必要がありますか? たとえば、次のクエリを検討してください。 SELECT * FROM `users` WHERE `user_id` IN (SELECT f2.`friend_user_id` FROM `friends` AS f1 INNER JOIN `friends` AS f2 ON f1.`friend_user_id` = f2.`user_id` WHERE f2.`is_page` = 0 AND f1.`user_id` = "%1$d" AND f2.`friend_user_id` != "%1$d" AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id` FROM `friends` WHERE `user_id` = "%1$d")) AND …

2
選択時に固定値を取得する
SELECT「money」フィールドの値を取得するクエリを実行する必要があります。このフィールドは実際にはデータベースに存在しません。固定値でこのフィールドを返すクエリが必要です。この場合、USDの値。 SELECTステートメントで定数値を返すにはどうすればよいですか?
13 mysql 

4
MySQLデータをファイルに出力できません
MySQLテーブルからファイルにデータを出力しようとしていますが、許可エラーが発生しています: $ pwd /home/dotancohen $ mkdir in $ chmod 777 in/ $ mysql -ugs -p mysql> USE someDatabase; mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv'; ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES) mysql> 問題のディレクトリが777にchmoddedされている場合、MySQLユーザーがファイルを書き込めないのはなぜですか?興味深いことに、/ tmp /にも書き込めません。 編集: DBユーザーが適切なMySQL権限を持っているように見えます: mysql> show grants; +----------------------------------------------------------------------------------+ | Grants for …

2
MySQL CASTとCONVERT
単純な計算(10を追加)に使用するVARCHAR(数値データを含む)があるとします。CAST関数に関するMySQLのドキュメントによれば、CASTまたはCONVERTのいずれかでこれを達成できました。 SELECT (CAST(field1 AS SIGNED)) + 10 FROM myTable; または: SELECT (CONVERT(field1,SIGNED)) + 10 FROM myTable; この意味でのキャストと変換の違いは何ですか?彼らは本当に同じことを達成していますか?
13 mysql 

4
MySQL InnoDBバッファープールインスタンスの最適数
サーバーの特性 合計システムRAM:8GB(MySQL + MySQL以外のものを実行、つまりMySQL専用ではない) CPUコアの数:6 データベースに約2GBのデータがあります InnoDBバッファープールサイズを4GBに設定しています どちらが良いですか: Innodbバッファープールインスタンスが1に設定されていますか? Innodbバッファープールインスタンスが2(各2GB)に設定されていますか? Innodbバッファープールインスタンスが4(各1GB)に設定されていますか? Innodbバッファープールインスタンスを8(デフォルト設定)に設定 したがって、バッファプールインスタンスと、全体として「そのような大きなInnoDBバッファプールサイズがあると、インスタンスを使用するか、OSスワップが発生する」となる理由を判断する方法がわかりません。


2
一般的なユーザーに付与する適切な権限は何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 MySQLによって提供される特権のリストは少し圧倒的だと思います。誰がどのような特権を持つべきかわかりません。私の考えでは、私の状況には3つの一般的なユーザーがいます。 root developer application root自明です。以下の場合developer、このユーザー私はこの権限セットにこのユーザを設定してい手始めになど、それまでのメイクの調整簡単に任意のデータベースにアクセスできるようにする必要があります。 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON applicationさらに限定されたセットがあります。特定のデータベースの操作に限定する必要があります。 付与するのに適切な特権のセットが何であるかわかりません。開発者とアプリケーションに付与するための合理的な特権セットとは何ですか。なぜですか。

3
MySQL:通信パケットの読み取りエラー
私はmysqlでこの警告を受けます、 [Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets) 私はグーグルでいくつかのトピックを経験しました、そしていくつかの提案によると私max_allowed_packetは128 to 512 to 1024まだ同じ行動からそれを増やしました。 私は、Drupalの7を使用していますし、そうBLOBデータの種類がたくさんありますが、1024 Mbのmax_allowed_packet私の意見では十分なはずです。 この警告を克服する他の回避策はありますか? 編集: @Rolandoの提案/回答としていくつかの設定を追加しましたが、同じ警告が表示されます。 私のmysql構成は次のようになります。 [client] port = 3306 socket = /tmp/mysql.sock default-character-set = utf8 [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 16K …
13 mysql  innodb 

1
MySQL:トランザクションは行をロックしますか?
これまでにMySQLトランザクションを使用したことはありません。何かを明確にしたいだけです。 2人のユーザーが正確な時間にクエリを実行した場合、MySQLはこれをどのように処理しますか?たとえば、ユーザーがレコードを更新しようとしています。 user1:テーブルセットの更新column = column-4 where column_id = 1; user2:テーブルセットを更新しますcolumn = column-7 where column_id = 1; トランザクションを使用する場合、MySQLは最初に実行されるクエリを選択し、最初のクエリがコミットされるまで2番目のユーザーをロックしますか?それはテーブルロックですか、それとも行ロックですか? 3番目のユーザーがselectステートメントを発行するとどうなりますか?MySQLが返す値は何ですか? PSこれはInnodbにあります。

2
サブクエリからの行のカウント
シンプル:サブクエリの行数をカウントしたいと思います。ステータスは、ホストがオンラインかどうかに注意してください。 悪いコード SELECT COUNT(ip_address) FROM `ports` ( SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE ) 説明しました 最初のクエリを単独で実行すると、次のように返されます。 SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE ip_address 192.168.1.1 192.168.1.2 192.168.1.248 192.168.1.251 192.168.1.254 単独で実行される2番目のクエリはこれを返します。 SELECT COUNT(ip_address) FROM `ports` 17 質問 5つのIPアドレスのリストを数える方法を教えてください。 私はこの単純な問題の可能な解決策をオンラインで見ていて、ただイライラしているので、専門家に尋ねると思いました。


4
電話番号のデータ型:VARCHAR、INTまたはBIGINT?
ですから、これは今年のダミーの質問になりますが、これを通過するのは初めてではないので、尋ねる必要があります。次のテーブル定義を見てください。 今すぐですが、電話番号が表示される列from_numberを見てくださいVARCHAR(45)。電話が世界中でいくつの番号を持つことができるかわからないので、私はそれらのほとんどすべてをカバーしようとしています。私は私が考えるように、可能な限り、データベースの整合性を維持したいVARCHARあなたは私に言う、多分私は間違っている- -私はへの変更に考えていますので、この種の情報ホールドのための適切なタイプではありませんINT偶数かBIGINT。 Workbenchで列を定義するとき()は、すべての場合ではなく、前に言及したものの中で括弧で囲まれた数を指定する必要があります。だから私がこれを行うと:BIGINT()私はこのエラーを受け取りました: ここで、このMySQLタイプについて少し読んでください。基本的に情報はこれです: 大きな整数。...符号なしの範囲は0〜18446744073709551615です。 それは私に尋ねます:BIGINT()型を定義するときに括弧に設定する値。(私はBIGINTを使用していますが、これはINTが電話が持つことができる数と同じ数を保持できるかどうかわからないためです-おそらく私も間違っています)。MariaDB / MySQLデータベースに列を作成する正しい方法はどれですか? とにかく私はあなたの意見、経験を知りたいです、そして、もちろん、私は答えを得たいです 注: ER図の作成には、MySQL Workbench最新版を使用しています。MariaDB 10.0.xも使用しています

4
5つ以上の列の主キーは、大きなテーブル(1億以上)に適していますか?
私は実際のDBの問題について読んでいましたが、1つのプロジェクトには1億行とテーブルがあり、5列がプライマリでした。私はこれが悪いと思っていますが、誰もが正確にその理由を教えてもらえますか? テーブルは一種のマイクロロールアップ/集計テーブルであったため、5つの列は(day、market_id、product_id ...)のようでした。最初は、5列の主キーは理想的ではないと考えていましたが、考えれば考えるほど、それが悪い理由を考え出すことはできませんでした。 これは深夜の議論で、半数の会社エンジニアが参加しました。誰かがこれは悪い設計だと言った、あるシニアエンジニアは同意したが、誰もその理由について実際に飛び込んだことはなかった。したがって、自分で問題を調査しようとしています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.