Andreas Ivanschitz netted the game's only goal from the penalty spot in the 61st minute to lift the hosts to sixth spot.
The win ended a run of four straight draws for Mainz, who have lost just once in the last nine matches, while Leverkusen saw their four-match unbeaten streak ended and remained a point adrift of champions Dortmund, who went down 2-1 at Schalke.
Leverkusen had the first chance after 10 minutes but Michal Kadlec headed over.
Mainz went closer to finding the breakthrough two minutes later but Adam Szalai's blast crashed against the crossbar.
Leverkusen were dangerous again in the 26th minute as Stefan Kiessling ran onto a long ball from Daniel Carvajal but could not beat Mainz goalkeeper Christian Wetklo.
Another opportunity arrived for the visitors 11 minutes after the break but Wetklo fended away Kiessling's attempt and Lars Bender lashed the rebound wide.
The deadlock was broken just after the hour mark when Ivanschitz coolly despatched his left-footed spot-kick into the bottom-right corner after Manuel Friedrich was ruled to have handled the ball in the box.
The match grew a bit tetchy in the closing stages, with three yellow cards shown for dissent - to Mainz duo Szalai and Nikolce Noveski and Leverkusen's Friedrich - in the space of three minutes late on.
Leverkusen had one final chance in the 89th minute but Carvajal's low long-range shot following a corner was superbly saved by Wetklo.