correlation https://teguhth.blogspot.com/2024/03/how-to-enable-cdc-change-data-capture.html
Enable Binary Logging
1. check table for sample
SELECT *,@@hostname,@@version FROM teguhth.pembelian
2. Create table for cdc
# create table
CREATE TABLE audit_table (
id INT AUTO_INCREMENT PRIMARY KEY,
table_name VARCHAR(100),
action_type ENUM('INSERT', 'UPDATE', 'DELETE'),
old_data JSON,
new_data JSON,
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
performed_by VARCHAR(100)
);
ALTER TABLE audit_table
ADD COLUMN performed_by VARCHAR(100);
SELECT *,@@hostname,@@version FROM audit_table;
3. create trigger Change Data Capture for insert, update & delete
# cdc insert
DELIMITER //
CREATE TRIGGER cdc_trigger_insert
AFTER INSERT ON teguhth.pembelian
FOR EACH ROW
BEGIN
INSERT INTO audit_table (table_name, action_type, new_data, performed_by)
VALUES (
'pembelian', 'INSERT',
JSON_OBJECT(
'KODE_PEMBELIAN', NEW.KODE_PEMBELIAN,
'KODE_BARANG', NEW.KODE_BARANG,
'KODE_CUSTOMER', NEW.KODE_CUSTOMER,
'TANGGAL_PEMBELIAN', NEW.TANGGAL_PEMBELIAN,
'JUMLAH_PEMBELIAN', NEW.JUMLAH_PEMBELIAN
),
USER()
);
END //
DELIMITER ;
# cdc update
DELIMITER //
CREATE TRIGGER cdc_trigger_update
AFTER UPDATE ON teguhth.pembelian
FOR EACH ROW
BEGIN
INSERT INTO audit_table (table_name, action_type, old_data, new_data, performed_by)
VALUES (
'pembelian', 'UPDATE',
JSON_OBJECT('JUMLAH_PEMBELIAN', OLD.JUMLAH_PEMBELIAN),
JSON_OBJECT('JUMLAH_PEMBELIAN', NEW.JUMLAH_PEMBELIAN),
USER()
);
END //
DELIMITER ;
# cdc delete
DELIMITER //
CREATE TRIGGER cdc_trigger_delete
AFTER DELETE ON teguhth.pembelian
FOR EACH ROW
BEGIN
INSERT INTO audit_table (table_name, action_type, old_data, performed_by)
VALUES (
'pembelian', 'DELETE',
JSON_OBJECT(
'KODE_PEMBELIAN', OLD.KODE_PEMBELIAN,
'KODE_BARANG', OLD.KODE_BARANG,
'KODE_CUSTOMER', OLD.KODE_CUSTOMER,
'TANGGAL_PEMBELIAN', OLD.TANGGAL_PEMBELIAN,
'JUMLAH_PEMBELIAN', OLD.JUMLAH_PEMBELIAN
),
USER()
);
END //
DELIMITER ;
4. testing insert,update & delete
mariadb -uadmin -padmin teguhth;
mariadb -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;
use teguhth
# test insert
insert into pembelian(KODE_PEMBELIAN,KODE_BARANG,KODE_CUSTOMER,TANGGAL_PEMBELIAN,JUMLAH_PEMBELIAN) values('BEL-E016','ELK-04','B-0002','2002-07-17',16);
insert into pembelian(KODE_PEMBELIAN,KODE_BARANG,KODE_CUSTOMER,TANGGAL_PEMBELIAN,JUMLAH_PEMBELIAN) values('BEL-E017','ELK-04','B-0002','2002-07-17',17);
insert into pembelian(KODE_PEMBELIAN,KODE_BARANG,KODE_CUSTOMER,TANGGAL_PEMBELIAN,JUMLAH_PEMBELIAN) values('BEL-E018','ELK-04','B-0002','2002-07-17',18);
# test update
UPDATE pembelian SET JUMLAH_PEMBELIAN = '22' WHERE kode_pembelian='BEL-E015';
# test delete
DELETE FROM pembelian WHERE kode_pembelian = 'BEL-E016';
5. check CDC Record audit_table
SELECT *,@@hostname,@@version FROM audit_table;
6. check list trigger
SELECT TRIGGER_NAME, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE
FROM information_schema.TRIGGERS
WHERE EVENT_OBJECT_SCHEMA = 'teguhth' AND EVENT_OBJECT_TABLE = 'pembelian';
7. drop trigger n row data if want to cleaning
drop trigger cdc_trigger_insert;
drop trigger cdc_trigger_update;
drop trigger cdc_trigger_delete;
delete from audit_table;
drop table audit_table;
mariadb -uadmin -padmin teguhth;
mariadb -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;
Enable Binary Logging
1. check table for sample
SELECT *,@@hostname,@@version FROM teguhth.pembelian
2. Create table for cdc
# create table
CREATE TABLE audit_table (
id INT AUTO_INCREMENT PRIMARY KEY,
table_name VARCHAR(100),
action_type ENUM('INSERT', 'UPDATE', 'DELETE'),
old_data JSON,
new_data JSON,
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
performed_by VARCHAR(100)
);
ALTER TABLE audit_table
ADD COLUMN performed_by VARCHAR(100);
SELECT *,@@hostname,@@version FROM audit_table;
3. create trigger Change Data Capture for insert, update & delete
# cdc insert
DELIMITER //
CREATE TRIGGER cdc_trigger_insert
AFTER INSERT ON teguhth.pembelian
FOR EACH ROW
BEGIN
INSERT INTO audit_table (table_name, action_type, new_data, performed_by)
VALUES (
'pembelian', 'INSERT',
JSON_OBJECT(
'KODE_PEMBELIAN', NEW.KODE_PEMBELIAN,
'KODE_BARANG', NEW.KODE_BARANG,
'KODE_CUSTOMER', NEW.KODE_CUSTOMER,
'TANGGAL_PEMBELIAN', NEW.TANGGAL_PEMBELIAN,
'JUMLAH_PEMBELIAN', NEW.JUMLAH_PEMBELIAN
),
USER()
);
END //
DELIMITER ;
# cdc update
DELIMITER //
CREATE TRIGGER cdc_trigger_update
AFTER UPDATE ON teguhth.pembelian
FOR EACH ROW
BEGIN
INSERT INTO audit_table (table_name, action_type, old_data, new_data, performed_by)
VALUES (
'pembelian', 'UPDATE',
JSON_OBJECT('JUMLAH_PEMBELIAN', OLD.JUMLAH_PEMBELIAN),
JSON_OBJECT('JUMLAH_PEMBELIAN', NEW.JUMLAH_PEMBELIAN),
USER()
);
END //
DELIMITER ;
# cdc delete
DELIMITER //
CREATE TRIGGER cdc_trigger_delete
AFTER DELETE ON teguhth.pembelian
FOR EACH ROW
BEGIN
INSERT INTO audit_table (table_name, action_type, old_data, performed_by)
VALUES (
'pembelian', 'DELETE',
JSON_OBJECT(
'KODE_PEMBELIAN', OLD.KODE_PEMBELIAN,
'KODE_BARANG', OLD.KODE_BARANG,
'KODE_CUSTOMER', OLD.KODE_CUSTOMER,
'TANGGAL_PEMBELIAN', OLD.TANGGAL_PEMBELIAN,
'JUMLAH_PEMBELIAN', OLD.JUMLAH_PEMBELIAN
),
USER()
);
END //
DELIMITER ;
4. testing insert,update & delete
mariadb -uadmin -padmin teguhth;
mariadb -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;
use teguhth
# test insert
insert into pembelian(KODE_PEMBELIAN,KODE_BARANG,KODE_CUSTOMER,TANGGAL_PEMBELIAN,JUMLAH_PEMBELIAN) values('BEL-E016','ELK-04','B-0002','2002-07-17',16);
insert into pembelian(KODE_PEMBELIAN,KODE_BARANG,KODE_CUSTOMER,TANGGAL_PEMBELIAN,JUMLAH_PEMBELIAN) values('BEL-E017','ELK-04','B-0002','2002-07-17',17);
insert into pembelian(KODE_PEMBELIAN,KODE_BARANG,KODE_CUSTOMER,TANGGAL_PEMBELIAN,JUMLAH_PEMBELIAN) values('BEL-E018','ELK-04','B-0002','2002-07-17',18);
# test update
UPDATE pembelian SET JUMLAH_PEMBELIAN = '22' WHERE kode_pembelian='BEL-E015';
# test delete
DELETE FROM pembelian WHERE kode_pembelian = 'BEL-E016';
5. check CDC Record audit_table
SELECT *,@@hostname,@@version FROM audit_table;
6. check list trigger
SELECT TRIGGER_NAME, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE
FROM information_schema.TRIGGERS
WHERE EVENT_OBJECT_SCHEMA = 'teguhth' AND EVENT_OBJECT_TABLE = 'pembelian';
7. drop trigger n row data if want to cleaning
drop trigger cdc_trigger_insert;
drop trigger cdc_trigger_update;
drop trigger cdc_trigger_delete;
delete from audit_table;
drop table audit_table;
mariadb -uadmin -padmin teguhth;
mariadb -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;
mariadb -h 10.10.10.90 -uaisyah -phanin teguhth;