Rohit Sharma hit his fourth century of the World Cup as India posted a challenging 314 for nine against Bangladesh at Edgbaston on Tuesday.
The opener survived an early scare to make 104 and take control against the Bangladesh bowlers after India elected to bat first with their eye on securing a semi-final spot.
Sharma and opening partner KL Rahul put on 180 runs — the highest stand for the first wicket in the tournament — to get India off to a flying start.
But Bangladesh paceman Mustafizur Rahman claimed five wickets, including the prized scalp of skipper Virat Kohli for 26, to check India's surge and keep them in the game.
Mustafizur returned figures of 5-59 in his 10 overs.
Sharma, who was dropped on nine by Tamim Iqbal at deep midwicket, reached his second successive ton with a single off Shakib Al Hasan, celebrating by flipping his bat in the air.
But he was caught at extra cover by Liton Das off the bowling of Soumya Sarkar as Bangladesh struck back.
Rahul, who assumed an opener's slot following an injury to Shikhar Dhawan, was caught behind off Rubel Hossain for 77.
Kohli tried to rebuild with singles and occasional boundaries with the left-handed Rishabh Pant at the other end.
But skipper Mashrafe Mortaza brought back Mustafizur into the attack and the move paid rich dividends.
Mustafizur struck twice in the space of three balls to remove Kohli and Hardik Pandya.
Pant once again showed his worth in the number four position with a brisk 48, using the short boundary on one side of the ground to his advantage.
MS Dhoni, who received flak for his slow innings in India's first World Cup defeat to hosts England on Sunday, chipped in with a 33-ball 35.
But India managed just 35 runs in the last five overs and lost four wickets including three in Mustafizur's final over.
Earlier, Sharma, who scored 102 in the previous game at the same venue, started with a six in the first over but mistimed a pull off Mustafizur only for Tamim to drop a simple catch.
Sharma played an attacking knock, hitting seven fours and five sixes in his 92-ball stay at the wicket, cheered by a largely pro-India crowd in Birmingham.
A win for India would ensure a semi-final spot in the 10-team event.
Bangladesh need to win both of their final fixtures, against India and Pakistan, and for results elsewhere to go in their favour.
Feature image courtesy: AFP Photo/ Dibyangshu Sarkar