Jeśli masz kod dokładnie taki jak powyżej, to średnik oznacza koniec zapytania, a trigger jednak w tym miejscu się nie kończy. Musisz ustawić sobie inny znak końca zapytania np.:
DELIMITER //
CREATE TRIGGER `delete` AFTER DELETE ON articles
FOR EACH ROW
BEGIN
DELETE FROM articlesHistory WHERE id = OLD.id;
INSERT INTO articlesremoved
VALUES (OLD.kolumna1, OLD.kolumna2, OLD.kolumna3, NOW())
END //
DELIMITER ;
Poza tym w DELETE powinno być
WHERE id = OLD.id a wyzwalacz raczej powinien być wykonywany dopiero po modyfikacji danych - AFTER DELETE. Jeśli będzie wykonywany przed to może się zdarzyć, że kasowanie nie powiedzie się to trigger i tak zostanie wywołany. Wydaje się, że to jest tutaj niepożądane.