BERLIN -- Bayern Munich left it late to grind out a 2-0 win in Mainz on Saturday and move one victory away from the Bundesliga title.
Bastian Schweinsteiger broke the deadlock in the 82nd minute and substitute Mario Goetze added another goal four minutes later to secure Bayern's league-record 18th consecutive win and stretch its unbeaten run to 51 games -- also a record.
Second-place Borussia Dortmund won 3-0 at Hannover but remains 23 points behind Bayern with eight games remaining.
"We don't really care when we're champions," said Schweinsteiger, whose side can secure the quickest title in 51 years of the Bundesliga by winning at Hertha Berlin on Tuesday, regardless of Dortmund's result against Schalke in the Ruhr derby the same evening.
"It's really great that we can be champions in Berlin, where it all began for me," Bayern defender Jerome Boateng said. "We laid the groundwork today."
Schalke consolidated third with a 3-1 win over bottom side Eintracht Braunschweig.
Stuttgart beat 10-man Hamburger SV 1-0 to move above the visiting side and climb provisionally out of the relegation zone. It was the home side's first win in two games under new coach Huub Stevens.
Wolfsburg also ended with 10 men in a 1-1 draw with Augsburg. Kevin de Bruyne was sent off in injury time with his second yellow card for arguing the first.
Borussia Moenchengladbach was hosting Hertha Berlin later.
Mainz suffered its first defeat in six games but the home side frustrated Bayern for long periods and might have scored after the break, when Eric Maxim Choupo-Moting's effort crashed back off the crossbar with Manuel Neuer beaten.
Mainz goalkeeper Loris Karius was busier, blocking Arjen Robben's effort in the fourth minute and producing good saves to deny Mario Mandzukic and Franck Ribery in the second half.
Claudio Pizarro came on for Mandzukic in the 81st and made an immediate impact, playing the ball out left to Xherdan Shaqiri, who crossed for Schweinsteiger to head home from five meters.
Then Ribery capitalized on a botched clearance to set up Goetze for a clinical finish.
"It's not easy for us to play outstanding games all the time with a 23-point lead," said Bayern coach Pep Guardiola, whose side has won 24 of 26 games and drawn the other two.
Sky television reported at halftime that Uli Hoeness was not in the stadium. The former Bayern president is expected to soon begin his 3 1/2 year prison term for tax evasion.
Dortmund failed to impress in Hannover, where Andre Hoffmann hit the post for the home side in the 18th.
Mats Hummels scored two minutes before the interval, prodding the ball home from close range after Sokratis headed it on.
Robert Lewandowski made it 2-0 in the 52nd, cutting in from the left wing, gliding past four Hannover defenders before shooting inside the left post from a central position, and Henrikh Mkhitaryan set up substitute Marco Reus for a flattering score in injury time.
"Everything went in the right direction after the second goal but I could only breathe easily after the third," Dortmund coach Juergen Klopp said.
In Gelsenkirchen, Leon Goretzka was allowed plenty of time and space to fire Schalke into a 17th-minute lead from 23 metres.
Klaas Jan Huntelaar made it 2-0 with a deflected free kick in the 66th, before Benjamin Kessel pulled one back with another deflected shot in the 81st.
Adam Szalai settled Schalke's nerves in injury time.
Hamburg's hopes took a blow when Hakan Calhanoglu was sent off with his second yellow card for a tactical foul in the 53rd.
Ibrahima Traore capitalized on a mistake from Hamburg captain Heiko Westermann to set up Alexandru Maxim to score in the 69th. Stevens had introduced the Romanian midfielder six minutes before.
"It was a difficult game in a difficult situation," said Maxim, whose goal ended a 10-game winless streak.
Second-to-last Nuremberg can overtake both Hamburg and Stuttgart by beating Eintracht Frankfurt at home on Sunday.
Wolfsburg moved provisionally fifth thanks to Ivica Olic's 81st-minute equalizer. Tobias Werner fired Augsburg ahead in the 43rd, when he cut inside two defenders before unleashing inside the far post.