Если при выполнении exec() возникает ошибка, то она выводится в stderr.
Надо просто прочитать её, там будет написано, почему не работает.
В частности, чтобы получать весь вывод кроновских команд на почту, в том числе и ошибки, надо написать в начале крон файла MAILTO=свойемейл
Если есть проблемы с чтением stderr, то можно добавить перенаправление в stdout, записать его в переменную и дальше уже направлять по своему усмотрению
$out = exec('cd /path && mysql -u root < "/path/my-sql.sql" 2>&1');
log_error($out);