binlog-ignore-db is a master-side setting, it tells the Master not to log changes taking place on the listed DB.

replicate-ignore-db is a slave-side setting, it tells the Slave to ignore incoming log information related to the listed DB

The typical use case is when you want to replicate different databases from one single Master to different Slaves. The Master must log all changes occurring in all datababases (minus those possibly excluded by binlog-ignore-db, i.e. database that will not be replicated anywhere).

Each Slave will receive the full binary log, but will only replicate changes related to the selected databases (i.e. databases not excluded by replicate-ignore-db -- this list would be different on each Slave).

(mysql being a system database, it should be ignored from both ends, unless you really, really really know what you are doing).