{"id":691,"date":"2016-07-08T15:36:28","date_gmt":"2016-07-08T10:06:28","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=691"},"modified":"2016-07-08T16:01:01","modified_gmt":"2016-07-08T10:31:01","slug":"send-notification-when-alter-create-table-event-occurs","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/send-notification-when-alter-create-table-event-occurs\/","title":{"rendered":"Send notification when alter, create table event occurs on mysql"},"content":{"rendered":"<p>Consider scenario on large production system, when a new table is created or an alter table is triggered then we may need to notify few users. We came across a same scenario when the table schema or new table created, we need to notify few users.<\/p>\n<p><strong>Assumption:<\/strong><\/p>\n<ol>\n<li>Mysql general query log is enabled and the path is \/var\/lib\/mysql\/mysql-general.log. If not enabled, please enable. If the path is different, modify the script accordingly.<\/li>\n<\/ol>\n<pre>#!\/usr\/bin\/python\r\nimport re,os,time\r\nfrom email.mime.text import MIMEText\r\nfrom email.MIMEMultipart import MIMEMultipart\r\nfrom subprocess import Popen, PIPE\r\npa1=re.compile(\"alter table\")\r\npa2=re.compile(\"create table\")\r\nos.system('touch \/tmp\/output')\r\nfopen=open(\"\/var\/lib\/mysql\/mysql-general.log\",\"r\");\r\nfor log in fopen.readlines():\r\n    columns=log.split('\\t')\r\n    if \"show create table\" in columns[-1].lower():\r\n        continue\r\n    if pa1.pattern in columns[-1].lower() or  pa2.pattern in (columns[-1].lower()):\r\n        columns=log.split('\\t')\r\n        output=open('\/tmp\/output','a+')\r\n        output.write(\"\\n-------------------\")\r\n        output.write(\"\\n*%s\" %(columns[-1]))\r\n        output.write(\"-------------------\")\r\n        output.close()\r\nfopen.close();\r\nif (os.stat(\"\/tmp\/output\").st_size != 0):\r\n        with file('\/tmp\/output','r') as original: data=original.read()\r\n        with file('\/tmp\/output','w') as modified: modified.write(\"Below Alter\/Create Queries have been Run\\n\" +time.strftime(\"%c\") + data)\r\n        so=open('\/tmp\/output','r')\r\n        mysqlaudit=MIMEText(so.read());\r\n        mysqlaudit[\"From\"] = \"mysqlauditreport@domain.tld\"\r\n        mysqlaudit[\"To\"] = \"user@domain.tld\"\r\n        mysqlaudit[\"Subject\"] = \"Mysql Audit Report\"\r\n        p = Popen([\"\/usr\/sbin\/sendmail\", \"-t\", \"-oi\"], stdin=PIPE)\r\n        p.communicate(mysqlaudit.as_string())\r\n        so.close()\r\nos.remove('\/tmp\/output');\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Consider scenario on large production system, when a new table is created or an alter table is triggered then we [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1022],"tags":[],"class_list":["post-691","post","type-post","status-publish","format-standard","hentry","category-web-architecture","psol-cat-web-architecture"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-b9","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=691"}],"version-history":[{"count":0,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/691\/revisions"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}