Centurion Tamim Iqbal set records tumbling as Bangladesh survived a tense chase to beat Zimbabwe by four runs in a thriller and take an unassailable 2-0 lead in the three-match ODI series.

Opening batsman Tamim scored 158 off 136 balls to better his own benchmark for the highest ODI Bangladesh score, while he became the first player from his country to reach 7,000 runs in 50-over cricket.

His knock anchored Bangladesh's innings and big stands with Mushfiqur Rahim (55) and Mahmudullah (41) contributed to an imposing score of 322-8.

Zimbabwe were in trouble at 225-7 in the 42nd over when a big middle-order partnership between Wesley Madhevere and Sikandar Raza came to an end.

A brilliant eighth-wicket stand of 80 from Tinotenda Mutombodzi (34) and Donald Tiripano (55 not out) provided hope, but the visitors just fell short in Sylhet.

Tamim, whose knock included 20 fours and three sixes, put on 87 with Mushfiqur and 106 with skipper Mahmudullah before eventually driving Carl Mumba to Mutombodzi at long off.

Tinashe Kamunhukamwe scored a half century in reply before being bowled by Taijul Islam, who also ended the dangerous 80-run partnership between Madhevere (52) and Raza (66).

When the latter fell to Mashrafe Mortaza it appeared the game was up but Mutombodzi and Tiripano combined down the order to set up a thrilling finale.

However, Mutombodzi played a straight one to long on in the final over and Zimbabwe were unable to find the runs they needed to force a winner-takes-all encounter.