Mashrafe Mortaza produced a brilliant all-round display to earn Bangladesh a 34-run victory in the second one-day international against England in Mirpur and force a decider.
An excellent 29-ball 44 from Mortaza added to Mahmdullah's (75) 16th half-century in the 50-over format and helped the hosts to a 238-8.
It was a target that England would have been confident of chasing down, with stand-in captain Jos Buttler hitting an excellent run-a-ball 57 to put victory in the three-match series in sight.
However, six single-figure scores from the tourists' batting line-up proved costly as they were skittled for 204, with Mortaza adding figures of 4-29 with the ball.
A late batting collapse cost Bangladesh victory in the first ODI on the same ground, and they did not make a positive start to this one, losing opening duo Imrul Kayes (11) and Tamim Iqbal (14) inside the first nine overs as Chris Woakes (2-40) made use of the short ball.
Mushfiqur Rahim (21) regained some momentum and a four beyond third man brought up Mahmudullah's fifty at Ben Stokes' (1-22) expense.
Mahmudullah and Mosaddek Hossain (29) then put on 50 runs before Adil Rashid (2-53) proved their downfall. The spinner trapped the former lbw and added the scalp of Hossain, caught by Moeen Ali, in his next over.
Mortaza quickly moved to slam a pair of sixes off one Moeen over and plundered 13 runs off David Willey 0-36 before he was run out by Buttler with the penultimate delivery.
Just like their opponents, though, England began their innings in shaky fashion and lost Jason Roy (13) and James Vince (5) to Mortaza.
It got worse for the tourists with Ben Duckett and Stokes bowled for ducks by Shakib Al-Hasan (1-5) and Mortaza respectively, but Jonny Bairstow (35) and Buttler hauled England forward from 26-4.
The pair built an 79-run partnership before Taskin Ahmed (3-47), who had earlier been hit for a trio of fours in one over by Buttler, dealt the tourists' hopes of a recovery another blow by removing Bairstow.
Moeen Ali put on four before Buttler's knock was brought to an end by Taskin, awarded an lbw decision upon review. However, the skipper objected to Bangladesh's seemingly excessive celebrations and could face repercussions for his reaction.
Rashid (33 not out) helped push England on but after Hossain (1-5 from one over) removed Willey (9) to leave England 159-9, Mortaza struck with the winner, Jake Ball (28) caught by Nasir Hossain as he raced in off the boundary.
The result leaves the series delicately poised ahead of a winner-takes-all clash at Chittagong on Wednesday.