Bangladesh won the toss and decided to bat on Tuesday but lost their first two wickets for five runs with the departures in the first three overs of Shahriar Nafeez and Meyrab Hossain.
Then they found themselves in a desperate situation with six wickets gone for just 73 and then 83-7 with the arrival of the tail imminent.
But eventually they managed to put together 153 in 46 overs after Zimbabwe loosened their grip and Mohammad Rafique made full use of his experience.
The perpetrator of the unexpected early mayhem by a rejuvenated Zimbabwe was firstly Chris Mpofu and then medium pacer Gary Brent, who took three for 12 in his first eight overs spell, finishing with 4-30 in 10.
Brent collected three wickets while conceding only two runs in his first two overs, including Habibul Bashar for a duck. At that stage the tourists were reeling at 50-5.
It fell to Rafique and raw recruit Mushfiqur Rahim to hold firm and then, at the 42 overs mark, lash out to give Bangladesh a defensible target.
These two put on 56, Rafique scoring 40 in 48 balls for a face saving if not perhaps yet a match saving total.
This was Zimbabwe's best ODI performance in more than a year. Now they must put together 154 runs for their first win after 13 consecutive defeats and square this series at 1-1.
Bangladesh 153 all out in 46 overs (Mohammad Rafique 40; Gary Brent 4 for 30) Vs Zimbabwe (yet to bat)