Attempting to become the first team to successfully chase more than 330 to win a World Cup Cricket match, South Africa's bid to rewrite the record books fell short at 309 for eight.
Bangladesh made the perfect start to their World Cup campaign as their highest one-day international score inspired a 21-run win over a beleaguered South Africa on Sunday.
Mashrafe Mortaza's side posted 330 for six as Mushfiqur Rahim (78) and Shakib Al Hasan (75) laid the foundations of their impressive display at the Oval.
Mahmudullah's boisterous 46 not out from 33 balls pushed Bangladesh past their previous highest one-day international total of 329 for six against Pakistan in 2015.
Attempting to become the first team to successfully chase more than 330 to win a World Cup match, South Africa's bid to rewrite the record books fell short at 309 for eight.
Proteas skipper Faf du Plessis scored 62 from 53 balls, but Bangladesh seamer Mustafizur Rahman took three wickets and economical spinners Shakib and Mehidy Hasan wrapped up a memorable victory.
After reaching the World Cup quarter-finals in 2015, Bangladesh once again look capable of shaking up cricket's established order, much to the delight of their army of vociferous supporters who packed the Oval.
"It will be one of our top wins," said Shakib at the presentation ceremony.
"We have done some upsets at World Cups but we want to prove something at this tournament."
In contrast, South Africa are in turmoil after du Plessis' decision to bowl first backfired despite two wickets from veteran spinner Imran Tahir in his 100th ODI appearance.
With the World Cup just four days old, they have already lost twice in south London — this disappointing performance coming hot on the heels of their 104-run thrashing by hosts England in the tournament opener.
South Africa, who have never won the World Cup, are left with little margin for error in the rest of the 10-team group stage, which sees each country play nine matches.
It won't get any easier for Du Plessis' troubled side in their next match when they face title contenders India on Wednesday.
Quinton de Kock and Aiden Markram needed to get South Africa's chase off to a fast start and they reached 49 before a disastrous blunder sent them spiralling towards defeat.
De Kock was run out for 23 after being rashly called for a single by Markram, whose partner's edge was fumbled by Mushfiqur before the wicket-keeper recovered to throw out the opener.
That brought du Plessis to the crease and together with Markram he put on 53 in 60 balls.
But Shakib curtailed that partnership when his perfectly-flighted delivery bowled Markham for 45 to leave South Africa 102 for two in the 20th over.
That made Shakib just the fifth player to score 5,000 runs and take 250 wickets in ODIs.
Du Plessis got to fifty off 45 balls, reaching the milestone with a six off Mosaddek Hossain.
But that blast got du Plessis' adrenaline flowing too fast and a charge at Mehidy saw him bowled after he misjudged the flight.
David Miller's lofted shot was dropped by Soumya Sarkar at mid-off and he escaped again when Mahmudullah couldn't grab his mistimed drive.
However, Miller's luck ran out when he was caught by Mehidy off Mustafizur for 38 to leave the Proteas in disarray.
The required run-rate was at 10 an over by the time Rassie van der Dussen's agricultural swipe saw him bowled by Mohammad Saifuddin for 41.
Saifuddin removed Andile Phehlukwayo to push South Africa to the brink and when JP Duminy was bowled by Mustafizur for a defiant 45, Bangladesh's jubilant fans could get the party started.