1. Ändern Sie my.cnf #Der Gesamteffekt besteht darin, dass sowohl die Tabelle als auch die Protokolldatei geschrieben werden, wenn das globale Protokoll aktiviert ist, aber für general_log wird nur die Tabelle geschrieben und für slow_query_log werden sowohl die Tabelle als auch die Protokolldatei aufgezeichnet. general_log=1#Öffnen Sie das MySQL SQL-Ausführungsprotokoll slow_query_log=1#Öffnen Sie das MySQL Slow SQL-Protokoll #Nach der Einstellung wirkt es sich auf general_log und slow_query_log aus. log_output=table,File#Die Protokollausgabe wird in die Tabelle und die Protokolldatei geschrieben. Um dem Programm das Zählen zu erleichtern, ist es am besten, in die Tabelle zu schreiben#General_log_file ist hier nicht konfiguriert, daher schreibt general_log nur in die Tabelle#In mysql5.1.29 und höher legen Sie Folgendes fest, um MySQL zu öffnen und das ausgeführte SQL in der Datei aufzuzeichnen#general_log_file=/log/general.log #5.1.29 und früher: #log=/var/lib/mysql/sql_row.log long_query_time=1#Setzen Sie die langsame MySQL-Abfrage auf eine Abfrage, die länger als 1 Sekunde dauert slow_query_log_file=/log/slow.log 2. Ändern Sie das Format der MySQL-Protokolltabelle (in der MySQL-Bibliothek).
3. Da die Protokolltabellen von MySQL: general_log und slow_query_log nicht geändert werden dürfen, muss eine neue Tabelle erstellt werden, die leicht zu löschen und zu ändern ist (diese Protokolltabelle ist zu groß und Daten von vor n Tagen müssen regelmäßig bereinigt werden). Erstellen Sie die Tabelle „slow_log_dba“ Tabelle „slow_log_dba“ erstellen ( `start_time` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NICHT NULL, `query_time` Zeit NICHT NULL, `lock_time` Zeit NICHT NULL, `rows_sent` int(11) NICHT NULL, `rows_examined` int(11) NICHT NULL, `db` varchar(512) NICHT NULL, `last_insert_id` int(11) NICHT NULL, `insert_id` int(11) NICHT NULL, `server_id` int(10) unsigned NICHT NULL, `sql_text` mediumtext NICHT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Langsames Protokoll für dba'; Erstellen Sie die Tabelle general_log_dba Tabelle „general_log_dba“ erstellen ( `event_time` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NICHT NULL, `thread_id` int(11) NICHT NULL, `server_id` int(10) unsigned NICHT NULL, `command_type` varchar(64) NICHT NULL, `Argument` Mediumtext NICHT NULL, SCHLÜSSEL `user_host` (`user_host`(200)), SCHLÜSSEL `event_time` (`event_time`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Allgemeines Protokoll für DBA-Operationen'; 4. Da das Programm letztendlich die Tabellen general_log_dba und slow_log_dba verwendet, müssen die Daten von general_log und slow_query_log regelmäßig nach general_log_dba und slow_log_dba kopiert werden. Da der Bericht einmal täglich erstellt wird, muss diese Aktion nur einmal täglich durchgeführt werden.
5. Schreiben Sie ein Python-Skript, um die täglichen SQL-Operationen und langsamen Abfragen von MySQL täglich zu zählen (einige der Skripte sind abstrakte Methoden, bitte behandeln Sie sie nach eigenem Ermessen). Skript zum Zählen täglicher MySQL-Ausführungsdatensätze # -*- Kodierung: utf-8 -*- __author__ = "Fluss" MySQLdb als MySQL importieren erneut importieren von Datum/Uhrzeit importiere Datum/Uhrzeit, Zeitdelta smtplib importieren von email.mime.text importiere MIMEText def sendHtmlMail(Mailinhalt,meineIP): versuchen: gesternheute=(DatumUhrzeit.jetzt()-Zeitdelta(Tage=1)).strftime("%J-%m-%d") Absender = '[email protected]' Empfänger = ['[email protected]'] Betreff = myip+'MySQL-Operationsbericht'+gestern smtpserver = "smtp.exmail.xx.com" Benutzername = '[email protected]' Passwort = "xxxxx" msg = MIMEText(mailcontent,'html','utf-8')#'Hallo','text','utf-8' msg['Betreff'] = Betreff msg['Von'] = Absender msg['An'] = '[email protected]' smtp = smtplib.SMTP() smtp.connect(SMTP-Server) smtp.login(Benutzername, Passwort) smtp.sendmail(Absender, Empfänger, msg.as_string()) smtp.beenden() außer Ausnahme, e: print e,'Fehler beim Senden der E-Mail' wenn __name__ == '__main__': Ergebnis=Keines htmlfile='mysqlLogMon.html' myiplist=['192.168.10.10','192.168.10.19'] gesternheute=(DatumUhrzeit.jetzt()-Zeitdelta(Tage=1)).strftime("%Y-%m-%d 00:00:00") heute = datetime.now().strftime("%Y-%m-%d 00:00:00") für myip in myiplist: sql="select user_host,argument aus general_log_dba, wobei event_time >='%s' und event_time <='%s'" %(gestern,heute) versuchen: dbcon = mysql.connect(Host=myip, Benutzer='xxxxx', Passwort='xxxxx', db='mysql', Port=3306, Zeichensatz='utf8') aktuell = dbcon.cursor() drucke "Schritt 1", +myip+', '+datetime.now().strftime("%Y-%m-%d %H:%M:%S") aktuell.execute(sql) Ergebnis = cur.fetchall() aktuell.schließen() dbcon.schließen() außer Ausnahme, e: drucke e,'conn mysql error' Benutzer_Host_Set = Set () drucke "Schritt 2", +myip+', '+datetime.now().strftime("%Y-%m-%d %H:%M:%S") allhash={} wenn Ergebnis: für user_host, Argument im Ergebnis: argument_delcom=re.compile(r'(\/\*(\s|.)*?\*\/)').sub("",Argument).strip().replace(u"\x00",'').lower() wenn re.compile(r'^access.*').match(argument_delcom) oder re.compile(r'^.*@.*on.*').match(argument_delcom) oder re.compile(r'^grant.*').match(argument_delcom): tmpargument = argument_delcom.strip() anders: tmpargument=argument_delcom.split(' ')[0].strip() wenn Länge(tmpargument)>30: #Einige SQL-Befehle lauten „select\n\t\t\t\t\tcount(m.enquirymainid)“, Sie können „print repr(tmpargument)“ verwenden. tmpargument=argument_delcom.split('\n')[0].strip() #Wenn es sich nur um Kommentare handelt, wird dieses Element nicht gezählt, sofern es nicht tmpargument oder tmpargument.strip()=='' oder tmpargument.strip()==' ' ist: weitermachen wenn allhash.has_key(Benutzerhost): allhash[Benutzerhost][tmpargument]=allhash[Benutzerhost].get(tmpargument,0)+1 anders: allhash[Benutzerhost]={tmpargument:1} drucke "Schritt 3", +myip+', '+datetime.now().strftime("%Y-%m-%d %H:%M:%S") headhtml=''' ''' drucke "Schritt 4", +myip+', '+datetime.now().strftime("%Y-%m-%d %H:%M:%S") mit open(htmlfile,'w') als htmlfileobj: htmlfileobj.write(headhtml) htmlfileobj.flush() drucke "Schritt 5", +myip+', '+datetime.now().strftime("%Y-%m-%d %H:%M:%S") mit open(htmlfile,'a') als htmlfileobj: für Hostschlüssel in allhash.keys(): listtmp=sortiert(allhash[hostkey].iteritems(),Schlüssel=lambda labkey:labkey[1],reverse=True) Zeilenspanne = Länge (alle Hashes [Hostschlüssel]) #htmlfileobj.write() tmpline = '' % (Zeilenspanne, Hostschlüssel.encode ('utf-8')) htmlfileobj.write(tmpline) Anzahln=0 für runsql, count in listtmp: wenn countn==0: tmpline='' %(runsql.encode('utf-8'),Anzahl) anders: tmpline='' %(runsql.encode('utf-8'),Anzahl) Anzahln+=1 htmlfileobj.write(tmpline) tmpline=''' Die Anzahl der vom Benutzer ausgeführten SQL-Befehle betrug %s %s %s %s %s ''' htmlfileobj.write(tmpline) mit open(htmlfile,'r') als htmlfileobj: mailcontent = htmlfileobj.read() sendHtmlMail(Mailinhalt,meineIP) anders: drucken 'SQL-Ergebnis ist None, beenden' drucke "Schritt 6", +myip+', '+datetime.now().strftime("%Y-%m-%d %H:%M:%S") Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Analysieren Sie die Rolle von rel="nofollow" in HTML und die Verwendung des rel-Attributs
>>: Detaillierte Erklärung der Docker-Maschinennutzung
Was ist Serdel userdel ist ein Low-Level-Tool zum...
Inhaltsverzeichnis Vor der Transformation: Nach d...
Adaptives Layout wird in praktischen Anwendungen i...
Auch heute noch sind Taskleistensymbole ein magis...
Stellen Sie die MySQL-Umgebung lokal bereit (192....
Im Artikel MySQL-Optimierung: Cache-Optimierung w...
Sicht Was ist eine Ansicht? Welche Rolle spielt e...
Nginx ist ein leistungsstarker Website-Server und...
Dieser Artikel beschreibt, wie die Koexistenz von...
Kürzlich habe ich auf der B-Station einen Sperrfe...
Inhaltsverzeichnis 1. Proxy im LAN 2. Intranet-Pe...
Inhaltsverzeichnis 1. Anwendung und Konfiguration...
Die Anmeldeoberfläche des WeChat-Applets ist zu I...
Inhaltsverzeichnis Ein JSON basiert auf zwei Stru...
1. Alipay-Methode: Alipay-Methode: Klicken Sie zu...