Yunus Malli put Mainz in front before a goal with the last kick of the game from Eric-Maxim Choupo-Moting earned victory with a strong second-half showing at the Coface Arena warranting the three points.
Hannover were wasteful as they fell to their second straight defeat to remain in mid-table.
Zdenek Pospech found row z with an early sight of goal as Mainz got the game off on the right foot.
Stefan Bell then tested Ron-Robert Zieler with a header before Hannover emerged from their shells and nearly took the lead when Loris Karius threw the ball out to Nikolce Noveski, who was not really expecting the ball.
Leonardo Bittencourt was alert, however, and he intercepted the ball but took one touch too many with only the Mainz goalkeeper to beat.
Hannover's recovery was cut short by the half-time whistle, which also signalled the end of Park Joo-ho's involvement in the game.
Injury meant he did not appear for the second half, Choupo-Moting taking his place, and the newcomer made his presence felt immediately, flashing a shot just wide.
Choupo-Moting wasted an even better chance with Zieler doing well to block his shot.
There was not much the Hannover custodian could do about the opening goal, though, as Nicolai Muller drew three Hannover defenders to him before slotting the ball through to Malli, whose shot struck Zieler on his leg but still went in.
Choupo-Moting saw another excellent chance go begging as Mainz searched for a second goal.
Apart from two weak shots from Szabolcs Huszti and Artjoms Rudnevs, Hannover never threatened an equaliser until stoppage time when Rudnevs and Huszti both had better chances blocked.
Mainz then broke and Choupo-Moting touched the ball in from point-blank range to condemn Hannover to their 10th defeat in 11 away games this season, balancing up Tayfun Korkut's record in charge to read won two, lost two.