sql >> データベース >  >> RDS >> Mysql

MySQLで生のクエリだけをログに記録するにはどうすればよいですか?

    完全なログクエリを有効にするには、my.cnfに次を追加します。

    log=/var/log/mysqldquery.log
    

    上記は、すべてのクエリをログファイルに記録します。

    my.cnfファイルに変更を加えた後、mysqlサービスを再起動することを忘れないでください。

    SequelPro(macクライアント)を介したアクションからの出力例:

    090721 11:06:45      51 Query       ALTER TABLE `test` ADD `name` varchar(10) DEFAULT NULL
                         51 Query       SHOW COLUMNS FROM `test`
                         51 Query       SHOW INDEX FROM `test`
    090721 11:06:57      51 Query       SHOW COLUMNS FROM `test`
                         51 Query       UPDATE `test` SET `id`='1', `name`='test' WHERE `id` = '1' AND `name` IS NULL LIMIT 1
                         51 Query       SELECT * FROM `test` LIMIT 0,100
                         51 Query       SELECT COUNT(1) FROM `test`   
    090721 11:07:00      51 Query       UPDATE `test` SET `id`='2', `name`='test' WHERE `id` = '2' AND `name` IS NULL LIMIT 1
                         51 Query       SELECT * FROM `test` LIMIT 0,100
                         51 Query       SELECT COUNT(1) FROM `test`
    

    * NIXベースのシステムでは、grepを使用して開始できます

    grep 'SELECT\|INSERT\|UPDATE' querylog.log
    

    または、もっとトリッキーになって、次のようなことを始めましょう:

    grep 'SELECT\|INSERT\|UPDATE' querylog.log | awk '{$1="";$2="";print}'
    

    これにより、このようなものが得られます。完璧ではありませんが、より近いものになります。

      51 Query UPDATE `test` SET `id`='2', `name`='test' WHERE `id` = '2' AND `name` IS NULL LIMIT 1
      SELECT * FROM `test` LIMIT 0,100
      SELECT COUNT(1) FROM `test`
      51 Query INSERT INTO `test` (`id`,`name`) VALUES ('3','testing')
      SELECT * FROM `test` LIMIT 0,100
      SELECT COUNT(1) FROM `test`
    


    1. PostgresPlus AdvancedServer9.3Betaの新しいOracle互換機能

    2. 複数のユーザーを許可するためにシングルユーザーアプリデータベースを更新する必要がありますか、データベーススキーマを変更する方法は?

    3. PostgreSQLで挿入パフォーマンスを高速化する方法

    4. パーティショニングによるパフォーマンス上の利点の発見