Supondo que você esteja usando uma versão suficientemente recente do mySQL, eu usaria triggers , pessoalmente.
Supondo que eles funcionem mais ou menos como os que conheço em outros produtos (por exemplo, Oracle) seu problema se torna mais simples, no sentido de que você coloca um gatilho de "atualização" na linha e o usa para atualizar a tabela de auditoria para cada campo Você está interessado em.
Possível ressalva:se seu aplicativo logar no banco de dados como apenas um usuário (uma abordagem comum se você usar o pool de conexões, por exemplo), pode ser complicado registrar a identidade real do usuário.