mysql access denied from localhost
% deliberately does not include localhost.  This decision was possibly made to emphasize the difference between the relatively secure local connection versus coming in from the World Wild Web.  Or perhaps because it implies a socket instead of TCP/IP.  (There is not much performance difference.)

So, either 


Use the IP (or hostname) of the machine, or
GRANT ... TO admin@localhost ...;