
Last year’s domestic double winners are second on 38 points, one behind Bayern, who host lowly Hoffenheim on Wednesday.
Eintracht Frankfurt are a further five points behind in third place following their 4-1 home victory over Freiburg.
Mainz suffered an early setback at Leverkusen when Germany forward Jonathan Burkardt had to be taken off injured in the third minute after making his comeback last weekend.
Leverkusen, who visit Atletico Madrid in the Champions League next week, gradually gained more possession and carved out several chances through Florian Wirtz and Jeremie Frimpong but Mainz held on in a goalless first half.
That, however, did not last long after the restart with Grimaldo curling his freekick over the wall and past the reach of Mainz keeper Robin Zentner in the 48th minute.
Wirtz had other good chances to add another goal as did Frimpong, who saw his shot blocked by Zentner in the 81st.
The Mainz keeper also denied Nathan Tella from point-blank range two minutes later to keep the visitors in the game.
Mainz then tried to put some late pressure on but had coach Bo Henriksen sent off after two bookings in stoppage time.
“We are very satisfied as we were ready for a tough game against an opponent who has a lot of intensity and is in a good moment,” Leverkusen coach Xabi Alonso told a press conference.
Mainz, who are fifth with 28 points, had won six of their previous seven league games going into the game.
“We were patient. We played intelligently. We wanted a stable game and not a crazy game,” Alonso said.
“We did not have too many chances but we had control. We had the chances to score a second goal but we did not manage it.”