MySQL: grant SELECT to all databases except system
may i correct what you have posted above..

"create user 'reader' identified by 'password';
grant select on . to 'reader';"

try below

create user reader@whatEverIPAddressOfUser identified by 'password'; 
grant select on . to reader@whatEverIPAddressOfUser; 
flush privileges;

then issue your revoke statement

revoke SELECT ON mysql.* from reader@whatEverIPAddressOfUser;
flush privileges;