MySQL tidak memiliki pengaturan SMTP tertentu, mekanisme, atau driver apa pun yang ada di dalamnya.
Namun, ada dua hal dasar yang dapat Anda lakukan seperti pemantauan yang Anda inginkan.
Opsi 1: Anda Bisa Memantau Binary Logs
Jika log biner diaktifkan, Anda dapat menulis skrip shell untuk memanggil mysql dan melakukan SHOW MASTER STATUS; Jika nama file atau perubahan ukuran file, sesuatu berubah. Setelah terdeteksi, Anda dapat mengirim email yang menyatakan bahwa ada sesuatu yang berubah !!!
Coba sesuatu seperti ini:
FIRST_READ=1
while [ 1 -eq 1 ]
do
mysql -h... -u... -p... --skip-column-names -A -e"SHOW MASTER STATUS" > /tmp/ms.txt
currfile=`cat /tmp/ms.txt | awk '{print $1}'`
currsize=`cat /tmp/ms.txt | awk '{print $2}'`
if [ ${FIRST_READ} -eq 0 ]
then
SOMETHING_CHANGED=2
if [ "${prevfile}" == "${currfile}" ] ; then (( SOMETHING_CHANGED-- )) ; fi
if [ "${prevsize}" == "${currsize}" ] ; then (( SOMETHING_CHANGED-- )) ; fi
if [ ${SOMETHING_CHANGED} -gt 0 ]
then
echo "Something Changed" | mail -s "Something Changed Subject" abc@xyz.com
fi
fi
FIRST_READ=0
prevfile=${currfile}
prevsize=${currsize}
sleep 10
done
Opsi 2: Anda Dapat Memantau information_schema.tables
Anda dapat mengulangi setiap tabel dan memeriksa kolom UPDATE_TIME-nya di information_schema.tables
Pertama, kumpulkan semua nama tabel yang diawali dengan basis data. Kemudian, lewati semua nama tabel dan periksa entri itu di information_schema.tables.
Coba yang berikut ini (Tabel apa saja yang berubah dalam 10 menit terakhir):
mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql') AND engine IS NOT NULL" > /tmp/TableNamesToPoll.txt
while [ 1 -eq 1 ]
do
for DBTB in `cat /tmp/TableNamesToPoll.txt`
do
DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
NEWUPDATE=`mysql -h... -u... -p... --skip-column-names -A -e"SELECT IFNULL(update_time,NOW() - INTERVAL 100 YEAR) > (NOW() - INTERVAL 10 MINUTE) UpdatedRecently FROM information_schema.tables WHERE table_schema='${DB}' AND table_name='${TB}'"`
if [ ${NEWUPDATE} -eq 1 ]
then
echo "Something Changed in ${DBTB}" | mail -s "Something Changed Subject" abc@xyz.com
fi
done
sleep 5
done
Ini hanya skrip skrip untuk mendeteksi perubahan. Untuk opsi 1, Anda dapat melakukan mysqlbinlog terhadap log biner saat ini dan melihat SQL yang dieksekusi dalam jangka waktu apa pun yang Anda butuhkan. Untuk opsi 2, Anda bisa mengubah SQL untuk mengambil cap datetime dari pembaruan terakhir untuk tabel yang diberikan.
UPDATE 2011-06-29 06:30 EDT
Opsi 3: Anda Dapat Memantau log umum
Menariknya, Anda bisa mengaktifkan log umum. Yang lebih menarik adalah Anda bisa mengaktifkannya Tabel MySQL. Templat ke log umum sebagai tabel sudah ada di / var / lib / mysql / mysql sebagai general_log.CSV. Berikut langkah-langkahnya:
Langkah 01) Tambahkan ini ke /etc/my.cnf
[mysqld]
log-output=TABLE
log
Langkah 02) service mysql restart (general_log adalah tabel CSV setelah restart)
Langkah 03) Jalankan perintah ini untuk mengonversi general_Log dari CSV ke MyISAM
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
Langkah 04) Pindahkan file general_log ke volume disk besar yang dapat mengakomodasi tabel log yang tumbuh cepat
Contoh: Jika Anda memiliki tata letak disk berikut
[root@iml-db10 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg1-root 117G 3.2G 108G 3% /
/dev/mapper/vg2-data01
1.7T 688G 877G 44% /data
/dev/sdc1 3.6T 36G 3.4T 2% /backup
/dev/sda1 99M 18M 77M 19% /boot
tmpfs 95G 0 95G 0% /dev/shm
none 16G 51M 16G 1% /var/tmpfs
Lakukan langkah-langkah ini untuk memindahkan tabel log umum:
mkdir /backup/general_log
mv /var/lib/mysql/mysql/general_log.MY* /backup/general_log/.
chown -R mysql:mysql /backup/general_log
ln -s /backup/general_log/general_log.MYD /var/lib/mysql/mysql/general_log.MYD
ln -s /backup/general_log/general_log.MYI /var/lib/mysql/mysql/general_log.MYI
Kapan memastikan symlink ada
[root@db1]# ls -l /var/lib/mysql/mysql/general*
-rw-rw---- 1 mysql mysql 8776 Jun 25 15:53 /var/lib/mysql/mysql/general_log.frm
lrwxrwxrwx 1 root root 35 Jun 25 18:33 /var/lib/mysql/mysql/general_log.MYD -> /backup/general_log/general_log.MYD
lrwxrwxrwx 1 root root 35 Jun 25 18:32 /var/lib/mysql/mysql/general_log.MYI -> /backup/general_log/general_log.MYI
Langkah 05) Jalankan perintah SQL ini
SET GLOBAL general_log = 'ON';
Itu dia. Anda harus memiliki general_log sebagai tabel MyISAM
mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL,
KEY `event_time` (`event_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log' DATA DIRECTORY='/backup/general_log/' INDEX DIRECTORY='/backup/general_log/'
1 row in set (0.00 sec)
Yang perlu Anda lakukan adalah polling tabel general_log setiap 15 menit melalui crontab yang menjalankan query ini
SELECT COUNT(1) UpdateCount FROM mysql.general_log
WHERE LOCATE('UPDATE',argument) > 0
AND event_time >= (NOW() - INTERVAL 15 MINUTE);
SELECT COUNT(1) DeleteCount FROM mysql.general_log
WHERE LOCATE('DELETE',argument) > 0
AND event_time >= (NOW() - INTERVAL 15 MINUTE);
PERINGATAN: Entri akan menumpuk dengan cepat. Hapus semua acara dengan 3 hari terakhir. Jalankan ini di crontab setiap malam tengah malam
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
DELETE FROM mysql.general_log WHERE event_time < NOW() - INTERVAL 3 DAY;
SET GLOBAL slow_query_log = @old_log_state;
Cobalah ini !!!
mysql --defaults-file=...
bukanmysql -u... -p...
:)Jika Anda memiliki vps atau server khusus, Anda dapat membuat kode modul Anda sendiri menggunakan pemrograman C.
para.h
main.c
Untuk mengonfigurasi proyek Anda, lihat video ini: https://www.youtube.com/watch?v=Zm2pKTW5z98 (Kirim Email dari MySQL 5.7 di Linux)
sumber