MySQL: file di registro separato per each database

Ho un server con più database su di esso. La sua effettivamente un'istanza su AmazonRDS quindi non ho accesso al file my.cnf. Quello che sto cercando di fare è creare un registro per each database separatamente che registra le query precedentemente eseguite e gli eventuali errori generati da tali query. È ansible con mysql avere un file di registro separato per each db / schema?

Aggiornare

  • Replica Secure MySQL; Tunneling SSL o SSH?
  • Da A a Z per l'impostazione di una casella Linux per un hosting locale sicuro
  • Errore MySQL SSL, solo quando si collega da windows / osX
  • Amazon RDS Pro / Cons di più DBs per esempio
  • Hai notato i guadagni di performance compilando Apache e MySQL?
  • Come automaticamente uccidere le query MySQL lente dopo N secondi?
  • Im in cerca di una soluzione come questa, ma non per il server WHOLE. https://stackoverflow.com/questions/650238/how-to-show-the-last-queries-executed-on-mysql

  • Come spostare il database RDS in diversi VPC
  • Conteggio AWS RDS
  • AWS EC2 timeout connessione tramite SSH
  • Impostare il record SPF su Amazon Route 53 con lo strumento cli53
  • Avviare l'istanza di Windows AWS da istantanee?
  • ssh, telnet all'istanza di istanza di AWS EC2
  • 4 Solutions collect form web for “MySQL: file di registro separato per each database”

    Non posso parlare in termini di AmazonRDS, ma qui è qualcosa di generico da provare

    Lo sapevate che il registro lento è un file CSV che lo attivi?

    Se si guarda il mysql.slow_log, si vede questo:

    mysql> show create table mysql.slow_log\G *************************** 1. row *************************** Table: slow_log Create Table: CREATE TABLE `slow_log` ( `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `query_time` time NOT NULL, `lock_time` time NOT NULL, `rows_sent` int(11) NOT NULL, `rows_examined` int(11) NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' 1 row in set (0.00 sec) mysql> 

    Questo non è un bene per te come un file CSV. È ansible convertire in MyISAM e utilizzarlo .

    Ecco cosa puoi fare:

    • Crea una copia originale del registro CSV
    • Convertire il CSV in MyISAM
    • Aggiungere due indici
      • da start_time
      • da db, start_time
    • Attivare il registro lento

    Ecco i passaggi di base:

     CREATE TABLE mysql.slow_log_original LIKE mysql.slow_log; ALTER TABLE mysql.slow_log ENGINE=MyISAM; ALTER TABLE mysql.slow_log ADD INDEX starttime (start_time); ALTER TABLE mysql.slow_log ADD INDEX db_starttime (db,start_time); 

    Quindi, abilitare la logging a mysql.slow_log aggiungendolo a /etc/my.cnf

     [mysqld] slow-query-log log-format=TABLE 

    Se si desidera ancora un file di text per query lente in aggiunta a una tabella, quindi utilizzare

     [mysqld] slow-query-log slow-query-logfile=/var/log/mysql_slow.log log-format=TABLE 

    Ora stai probabilmente chiedendo perché sto mostrando la tabella mysql.slow_log e non mysql.general_log . Beh, ecco mysql.general_log :

     mysql> desc mysql.general_log; +--------------+------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+-------------------+-----------------------------+ | event_time | timestamp | NO | MUL | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | user_host | mediumtext | NO | | NULL | | | thread_id | int(11) | NO | | NULL | | | server_id | int(10) unsigned | NO | | NULL | | | command_type | varchar(64) | NO | | NULL | | | argument | mediumtext | NO | | NULL | | +--------------+------------------+------+-----+-------------------+-----------------------------+ 6 rows in set (0.01 sec) mysql> 

    Non esiste nulla che indichi una query al database in mysql.general_log .

    Oh, a proposito, devi impostare altre cose per get il mysql.slow_log catturare tutto

     [mysqld] slow-query-log log-format=TABLE log-query-time=0 log-queries-not-using-indexes 

    In questo modo, each query e la sua nonna vengono registrati in mysql.slow_log .

    EPILOGO

    Tutto quello che devi fare è eseguire query su mysql.slow_log . Ad esempio, per visualizzare tutte le query dal database mydb per oggi, si eseguirebbe:

     SELECT * FROM mysql.slow_log WHERE db = 'mydb' AND start_time >= DATE(NOW()) + INTERVAL 0 SECOND; 

    Dato che state usando Amazon RDS, dovrai controllare la documentazione per vedere se è ansible manipolare mysql.slow_log a vostro gradimento.

    Ecco i miei passati in StackExchange sull'uso di mysql.slow_log :

    • Nov 18, 2011 : Crea una tabella di registro personalizzata in MySQL
    • Dec 27, 2011 : Come fare MySQL User Accounting
    • Mar 30, 2012 : configuration di registro lento di MySQL
    • Nov 06, 2012 : AWS RDS MySQL / lenta registro delle query

    dare un'occhiata a pt-query-digest – può assumere come input di tcpdump e sembra che sia ansible creare filtri personalizzati per estrarre solo query di un tipo specifico [probabilmente anche query in un database specifico].

    notare che questo può essere un buon strumento di risoluzione dei problemi ma non è una soluzione molto utile per la logging permanente.

    Questo non è ansible. Il registro di query è un'impostazione a livello di server.

    Se si desidera un log di query per each database, è necessario utilizzare un prodotto diverso. I candidati possibili sono MySQL Proxy o get la tua applicazione o applicazione framework per le query di log.

    RDS support l'abilitazione del registro generale tramite un'impostazione del gruppo parametri DB. Per impostazione predefinita si passa alla tabella, ma è ansible modificare il log_output in FILE e riavviare l'istanza DB, quindi è ansible scaricare e analizzare il file tramite l'API di accesso al registro. ( http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html )

    Con MySQL 5.6 in RDS, è ansible utilizzare la funzionalità di accesso binlog per scorrere i binlog in un altro ambiente e manipolarli come si vede bene.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.