1. my.cnfを変更する #全体的な効果としては、グローバルがオンになっている場合はテーブルとログ ファイルの両方が書き込まれますが、general_log の場合はテーブルのみが書き込まれ、slow_query_log の場合はテーブルとログ ファイルの両方が記録されます。 general_log=1#MySQL SQL実行ログを開く slow_query_log=1#MySQLの低速SQLログを開く #設定後はgeneral_logとslow_query_logに影響します。 log_output=table,File#ログ出力はテーブルとログファイルに書き込まれます。プログラムがカウントしやすいように、テーブルに書き込むのが最適です#General_log_fileはここでは設定されていないため、general_logはテーブルにのみ書き込みます#mysql5.1.29以降では、次のように設定してmysqlを開き、実行されたSQLをファイルに記録します#general_log_file=/log/general.log #5.1.29 以前: #log=/var/lib/mysql/sql_row.log long_query_time=1#MySQL のスロークエリを 1 秒以上かかるクエリに設定します slow_query_log_file=/log/slow.log 2. MySQLのログテーブルのフォーマットを変更する(MySQLライブラリ内)
3. MySQL のログ テーブル (general_log と slow_query_log) は変更できないため、削除や変更が簡単な新しいテーブルを作成する必要があります (このログ テーブルは大きすぎるため、n 日前のデータを定期的にクリーンアップする必要があります) slow_log_dbaテーブルを作成する テーブル `slow_log_dba` を作成します ( `start_time` タイムスタンプ NOT NULL デフォルト CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP、 `user_host` mediumtext NULLではありません。 `query_time` 時間が NULL ではない、 `lock_time` 時間が NULL でない、 `rows_sent` int(11) NOT NULL, `rows_examined` int(11) NOT NULL, `db` varchar(512) NOT NULL、 `last_insert_id` int(11) NULLではない、 `insert_id` int(11) NULLではない、 `server_id` int(10) 符号なし NOT NULL, `sql_text` 中テキスト NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='dba の遅いログ'; general_log_dbaテーブルを作成する テーブル `general_log_dba` を作成します ( `event_time` タイムスタンプ NOT NULL デフォルト CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP、 `user_host` mediumtext NULLではありません。 `thread_id` int(11) NULLではない、 `server_id` int(10) 符号なし NOT NULL, `command_type` varchar(64) NOT NULL, `argument` mediumtext NOT NULL、 キー `user_host` (`user_host`(200))、 キー `event_time` (`event_time`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='dba op の一般ログ'; 4. プログラムは最終的にgeneral_log_dbaテーブルとslow_log_dbaテーブルを使用するため、general_logとslow_query_logのデータをgeneral_log_dbaとslow_log_dbaに定期的にコピーする必要があります。 レポートは 1 日に 1 回生成されるため、このアクションは 1 日に 1 回のみ実行する必要があります。
5. 毎日の MySQL の SQL 操作とスロークエリをカウントする Python スクリプトを作成します (スクリプトの一部は抽象メソッドなので、ご自身の判断で処理してください) MySQL の毎日の実行記録をカウントするスクリプト # -*- コーディング: utf-8 -*- __author__ = '川' MySQLdbをmysqlとしてインポートする 輸入再 datetime から datetime、timedelta をインポート smtplibをインポートする email.mime.text から MIMEText をインポートします def sendHtmlMail(メールコンテンツ、myip): 試す: yestoday=(datetime.now()-timedelta(days=1)).strftime("%Y-%m-%d") 送信者 = '[email protected]' 受信者 = ['[email protected]'] 件名 = myip+'mysql 操作レポート '+yestoday SMTPサーバー = 'smtp.exmail.xx.com' ユーザー名 = '[email protected]' パスワード = 'xxxxx' msg = MIMEText(mailcontent,'html','utf-8')#'Hello','text','utf-8' msg['件名'] = 件名 msg['From'] = 送信者 メッセージ['宛先'] = '[email protected]' SMTP = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(ユーザー名、パスワード) smtp.sendmail(送信者、受信者、msg.as_string()) SMTP.終了() 例外を除く、e: e,'メール送信エラー' を印刷 __name__ == '__main__' の場合: 結果=なし htmlファイル='mysqlLogMon.html' myiplist=['192.168.10.10','192.168.10.19'] yestoday=(datetime.now()-timedelta(days=1)).strftime("%Y-%m-%d 00:00:00") 今日 = datetime.now().strftime("%Y-%m-%d 00:00:00") myiplist 内の myip の場合: sql="event_time >='%s' かつ event_time <='%s' である、user_host、general_log_dba からの引数を選択" %(yestoday、today) 試す: dbcon = mysql.connect(ホスト=myip、ユーザー='xxxxx'、パスワード='xxxxx'、db='mysql'、ポート=3306、文字セット='utf8') cur = dbcon.cursor() 「ステップ 1、」+myip+'、'+datetime.now().strftime("%Y-%m-%d %H:%M:%S") を印刷します。 cur.execute(sql) 結果 = cur.fetchall() cur.close() dbcon.close() 例外を除く、e: e,'conn mysql error' を印刷します user_host_set=設定() 「ステップ 2、"+myip+','+datetime.now().strftime("%Y-%m-%d %H:%M:%S") を印刷します。 すべてハッシュ={} 結果: user_hostの場合、結果の引数: argument_delcom=re.compile(r'(\/\*(\s|.)*?\*\/)').sub("",argument).strip().replace(u"\x00",'').lower() re.compile(r'^access.*').match(argument_delcom) または re.compile(r'^.*@.*on.*').match(argument_delcom) または re.compile(r'^grant.*').match(argument_delcom) の場合: tmpargument = argument_delcom.strip() それ以外: tmpargument=argument_delcom.split(' ')[0].strip() len(tmpargument)>30の場合: #一部のSQLはu'select\n\t\t\t\t\tcount(m.enquirymainid)'ですが、print repr(tmpargument)を使用できます。 tmpargument=argument_delcom.split('\n')[0].strip() # すべてコメントの場合、tmpargument または tmpargument.strip()=='' または tmpargument.strip()==' ' でなければ、この項目はカウントされません: 続く allhash.has_key(user_host)の場合: allhash[user_host][tmpargument]=allhash[user_host].get(tmpargument,0)+1 それ以外: allhash[user_host]={tmpargument:1} 「ステップ 3、"+myip+','+datetime.now().strftime("%Y-%m-%d %H:%M:%S") を印刷します。 headhtml=''' ''' 「ステップ 4、"+myip+','+datetime.now().strftime("%Y-%m-%d %H:%M:%S") を印刷します。 open(htmlfile,'w') を htmlfileobj として実行します: htmlfileobj.write(headhtml) htmlfileobj.flush() 「ステップ 5、"+myip+','+datetime.now().strftime("%Y-%m-%d %H:%M:%S") を印刷します。 open(htmlfile,'a') を htmlfileobj として実行します: allhash.keys() のホストキーの場合: listtmp=sorted(allhash[hostkey].iteritems(),key=lambda labkey:labkey[1],reverse=True) rowspan = len(allhash[ホストキー]) #htmlfileobj.write() tmpline = '' % (rowspan、hostkey.encode ('utf-8')) htmlfileobj.write(tmpline) カウントn=0 runsqlの場合、listtmp内のカウント: countn==0の場合: tmpline='' %(runsql.encode('utf-8'),count) それ以外: tmpline='' %(runsql.encode('utf-8'),count) カウントn+=1 htmlfileobj.write(tmpline) tmpline=''' ユーザーが SQL を実行した回数は %s %s %s でした %s %s ''' htmlfileobj.write(tmpline) open(htmlfile,'r') を htmlfileobj として実行します: メールコンテンツ = htmlfileobj.read() sendHtmlMail(メール内容、myip) それ以外: 'SQL の結果は None です。終了しています' と出力します 「ステップ 6、"+myip+','+datetime.now().strftime("%Y-%m-%d %H:%M:%S") を印刷します。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: HTML における rel="nofollow" の役割と rel 属性の使用を分析する
導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...
突然、ドキュメントの保存と共同作業のためのプライベート サービスを構築する必要がありました。多くの場...
一般的なアプリケーションでは、timestamp、datetime、int 型を使用して時間形式を保...
コードをコピーコードは次のとおりです。 <!-- ブラウザがローカル キャッシュからページにア...
目次序文静的スコープと動的スコープ静的スコープ実行プロセス動的スコープ実行プロセスエクササイズ練習1...
目次序文レンダリングsetTable コンポーネント使用結論序文フォームを使用して PC 側のプロジ...
この記事では、画像のフェードインとフェードアウトを実現するためのjsの具体的なコードを参考までに紹介...
1. CSS背景タグ1.背景色を設定するbackground-ground-color プロパティは...
目次変数データ型拡張ポイント要約する変数基本的な構文 var age=10; //ageという変数を...
最近のプロジェクトでフォームを作成するときに、コメント ボックスまで自動的にスクロールし、コメント ...
1 Alibaba Cloud コンソールに入り、ドメイン名コンソールを見つけて、バインドするドメイ...
この記事では、例を使用して、MySQL データベースの一般的な基本操作について説明します。ご参考まで...
この記事では、Vueで開始時間と終了時間の範囲を照会する方法を参考までに紹介します。具体的な内容は次...
MySQL における Regexp の一般的な使用法特定の文字列を含むあいまい一致# コンテンツフィ...
目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...