Bundesliga Wrap: Bayern wait for title glory
A win for Bayern and slip-ups by Dortmund and Schalke would have secured a 24th German title for the all-conquering Bavarians.
But Pep Guardiola's men will have to wait until Tuesday at the earliest to celebrate, despite their 2-0 victory at Mainz, after both of their nearest challengers took maximum points.
Second-placed Dortmund cruised to a 3-0 success at Hannover, defender Mats Hummels' close-range finish putting them ahead before Robert Lewandowski effectively sealed the points with a fine individual goal.
Marco Reus wrapped up the win late on as Jurgen Klopp's side produced a superb display ahead of Tuesday's Revierderby with Schalke, who remain third after beating bottom club Eintracht Braunschweig 3-1.
Leon Goretzka and Klaas-Jan Huntelaar put Jens Keller's men in command at the Veltins-Arena, before Adam Szalai ensured the win in injury-time after Benjamin Kessel had pulled one back for Braunschweig.
Those results meant that Bayern were unable to be confirmed as champions in Mainz, even though they made it 51 Bundesliga games without defeat with a hard-fought 2-0 win at the Coface Arena.
A header from Bastian Schweinsteiger and a composed Mario Gotze finish sealed an 18th straight top-flight victory for Bayern, who will win the league by beating Hertha Berlin on Tuesday regardless of the result between Dortmund and Schalke.
At the other end of the table, Stuttgart leapfrogged Hamburg out of the relegation play-off place with a 1-0 win over Mirko Slomka's team. The result marks Huub Stevens's first win since taking charge at the Mercedes Benz Arena earlier this month.
Alexandru Maxim scored the only goal of the game in the 69th minute after Hakan Calhanoglu had been sent off for fellow strugglers Hamburg, who are now a point below Stuttgart.
Meanwhile, Borussia Monchengladbach kept hopes of a UEFA Champions League berth alive with a 3-0 win over Hertha Berlin.
Strikes from Juan Arango and Raffael and a Adrian Ramos own goal moved Gladbach into fifth above Mainz and Wolfsburg, following the latter's 1-1 home draw with Augsburg in a game that saw Kevin De Bruyne dismissed in injury time.