A brace from Pierre-Emerick Aubameyang secured a fairly comfortable and deserved three points.
Yoshinori Muto came off the bench to grab a late consolation for Mainz, but it was too little too late.
Aubameyang opens the scoring
It was a slow start to the game, and Daniel Brosinski's free-kick provided the only moment of concern to either goalkeeper; his set-piece was close, but not close enough to force Roman Bürki into a save.
The first Dortmund opportunity would fall after the quarter-hour mark, as Felix Passlack's cross was headed down by André Schürrle and into Aubameyang's path. The striker took his shot on first-time, but Jonas Lössl made a superb save to maintain parity.
It was only momentary respite for Mainz, as the resulting corner provided the breakthrough. The ball was worked short and then Schürrle combined with Aubameyang to open the scoring. The winger picked out the Gabonese forward at the back post with a brilliant delivery, and he headed past the helpless Lössl.
Mainz began to come back into the game before the break but Bürki was on hand to deny both Yunus Malli and Karim Onisiwo in quick succession to maintain BVB's lead.
Late penalty proves to be crucial
Schürrle continued to be a menace after the interval but couldn't find the finishing touch, as he was denied by a smart stop at the near post. A huge chance for Mainz followed not long after and was passed up by Christian Clemens, as the winger blazed a half-volley over the bar after sneaking in behind the Dortmund defence.
From there, Dortmund took control of the game and should have added to their tally. Schürrle was denied again by Lössl, before the Danish stopper made an even better save to keep out Sebastian Rode's effort. Julian Weigl had been brought on after an hour, and was just what the hosts needed; he controlled the game impeccably well.
At the death, Dortmund were afforded the chance to seal the game from the spot after an Onisiwo foul inside the area. Aubameyang sent Lössl the wrong way and that meant that a well-worked consolation goal from Mainz, with Muto heading home, meant little.