Bayern Munich blew the chance to clinch the Bundesliga title for a ninth successive season on Saturday as the club world champions crashed to a 2-1 defeat away to Mainz.
First-half goals by Jonathan Burkardt and Robin Quaison sealed Mainz's third straight win, pulling them away from the relegation fight and forcing Bayern to wait to be crowned champions.
On his return from a knee injury, Bayern striker Robert Lewandowski scored just before the end to leave him four short of Gerd Mueller's all-time record of 40 Bundesliga goals in a season.
"We just have to put the game behind us, we just weren't asserive enough," said Bayern coach Hansi Flick who wants to leave at the end of the season.
Bayern can still win the title on Sunday without kicking a ball if second-placed RB Leipzig, who are 10 points behind Munich, lose at home to Stuttgart.
"That was too little from us in the first half, you can't win games like that, in terms of body language and our build up," said Bayern captain Manuel Neuer, who was at fault for the opening goal.
"We created too few chances and were punished for our own mistakes."
Mainz made sure Bayern had to put the champagne back on ice by capitalising on the visitors' errors.
With just three minutes gone, a speculative shot by Germany Under-21 striker Burkardt from the edge of the area deceived Neuer and flew into the Bayern net.
The hosts doubled their lead before the break when Swedish striker Quaison got in between David Alaba and Thomas Mueller to power his header past Neuer.
Bayern showed an unusual lack of discipline as Jerome Boateng, Leon Goretzka and Alaba were all shown yellow cards within six minutes late in the first half.
Mainz had also been 2-0 up at half-time against Bayern at the Allianz Arena in January until the hosts roared back to win 5-2 when Lewandowski scored twice.
However, this time Mainz held their nerve to earn their first home win over Bayern for nearly a decade.
Lewandowski's goal four minutes into added time was the visitors' only consolation.
- Haaland nets twice -
In Wolfsburg, Erling Braut Haaland netted twice as Borussia Dortmund boosted their hopes of qualifying for the Champions League next season with a 2-0 away win.
Haaland sprinted clear of the defence and fired home from a tight angle with just 12 minutes gone.
Dortmund played with 10 men for the last 31 minutes after 17-year-old England midfielder Jude Bellingham was sent off for a second yellow card.
However, Dortmund doubled their lead when Mahmoud Dahoud won the ball on the edge of his own penalty area and his pass found Haaland.
The 20-year-old raced clear and slotted past Wolfsburg goalkeeper Koen Casteels for his 37th goal in 38 games this season in all competitions.
With three games left, fifth-placed Dortmund are one point from the Champions League places and face RB Leipzig, Mainz and Bayer Leverkusen.
Haaland roared "Yeesss!" at the final whistle and defender Manuel Akanji said Dortmund are determined to play Champions League football next season.
"A few weeks ago we were still 11 points behind Wolfsburg, now it's just two," said Akanji.
"We're not giving up and want to win every game."
Finland striker Joel Pohjanpalo struck a hat-trick as Union Berlin romped to a 3-1 home win against Werder Bremen to move up to seventh and a point from the European places.