His century arrived off the third ball of the 100th over as he cut to deep point for four a ball that was bowled short of a length by Roy Kaia.
The highest Test innings from Mahmudullah for the Bangladeshi Tigers was 146 against New Zealand two years ago.
By lunch on the second day in Zimbabwe, he had faced 215 balls and struck the sole six so far in the Test and 13 fours.
He and Taskin Ahmed, who was playing his part with an unbeaten 52, put on 134 runs for the ninth wicket with Ebadot Hossain yet to bat.
Taskin struck eight fours off 89 balls as Bangladesh sought a second victory in five Tests this year under captain Mominul Haque.
On Wednesday, Mominul stabilised a creaking innings with a 70, then Liton Das fired a career-best Test score of 95.
Bangladesh 404-8 in 107 overs (Mahmudullah 112 not out, Das 95, Mominul 70; Blessing Muzarabani 3-72) vs Zimbabwe