Jamal Musiala scored in the 89th minute to fire Bayern Munich to the Bundesliga title with a 2-1 victory in Cologne after Borussia Dortmund could only draw on the final day of the season.
Dortmund, which was leading by two points before the last round, was held 2-2 at home by Mainz on Saturday, allowing Bayern to finish in first place because of its better goal difference.
Dortmund needed to win to be sure of ending Bayern's 10-year reign as champion.
It's just the third time Bayern managed to jump to first place on the last day of the season after it edged Werder Bremen to the title in 1986 and Bayer Leverkusen in 2000.
Dortmund fans were celebrating when Cologne's Dejan Ljubicic scored a penalty in the 81st minute against Bayern – which needed to win – but Musiala came on as a substitute four minutes later and scored four minutes after that to send the title Bayern's way.
Dortmund had started in pole position, but Sébastien Haller had a first-half penalty saved after Andreas Hanche-Olsen stunned the home fans by heading in Mainz's opening goal in the 15th minute.
Karim Onisiwo then got Mainz's second goal in the 24th with another header and the visitors looked capable of scoring more against the mistake-prone Dortmund defense. There was nothing but pride at stake for Mainz.
Raphaël Guerreiro pulled one back in the 69th for Dortmund, but by the time Niklas Süle equalized in the sixth minute of injury time, it was far too late for the “black and yellows.” Rani Khedira fired Union Berlin into the Champions League with a late winner over Werder Bremen for 1-0. Union finished fourth, ahead of Freiburg, which lost 2-1 at Eintracht Frankfurt.
Schalke was relegated after a 4-2 loss at Leipzig, and Stuttgart will contest the relegation/promotion playoff against the team that finishes third in the second division. Stuttgart drew with Hoffenheim 1-1.
Bochum secured survival with a 3-0 win over 10-man Bayer Leverkusen.