Bayern would have been champions if rivals Borussia Dortmund and Schalke 04 had both failed to win, but Dortmund kept the Bavarians waiting with a 3-0 win at Hanover while Schalke cruised to a 3-1 win at home to Eintracht Braunschweig.

Bayern left it late at Mainz with midfielder Bastian Schweinsteiger striking with a header on 82 minutes before Germany team-mate Mario Goetze netted the European champions' second four minutes later.

Their massive 23-point lead means Bayern are now set to be crowned champions with a record seven Bundesliga games left if they win at Hertha Berlin on Tuesday.

Bayern fired in 23 shots on goal to Mainz's four as they extended their record unbeaten run to 51 Bundesliga matches and earn their 18th consecutive league win.

Second-placed Dortmund, who made the Champions League quarter-finals in midweek despite a last-16 second leg home defeat to Zenit Saint Petersburg, enjoyed a 3-0 win at Hanover 96.

Hanover made a bright start when centre-back Andre Hoffmann clattered the post, leaving Dortmund coach Jurgen Klopp shaking his head on the sidelines.

But Dortmund took control when centre-back Mats Hummels fired home just before the break then Poland striker Robert Lewandowski netted a spectacular second-half goal.

- Lewandowski's superb strike -

There was nothing on when the 26-year-old, who joins Bayern next season, took the ball on the left wing, raced down the flank, cut inside and drilled his shot home despite the attention of five defenders.

There was more good news for Klopp late on as Marco Reus celebrated his comeback from injury by scoring their third in added time having come off the bench.

Schalke 04 bounced back from Tuesday's Champions League exit at Real Madrid with a 3-1 win at home to bottom side Eintracht Braunschweig.

Teenage midfielder Leon Goretzka gave Schalke the lead when he fired home a long-range shot on 17 minutes.

Dutch striker Klaas-Jan Huntelaar claimed his 10th goal of the season when he fired home a direct free-kick 20 minutes from time to claim his sixth goal in his last three league games.

Not to be outdone, Huntelaar's replacement Adam Szalai netted the Royal Blues third just before the final whistle after Benjamin Kessel scored Eintracht's consolation.

Augsburg were held to a 1-1 draw at VfL Wolfsburg, who had ex-Chelsea midfielder Kevin de Bruyne sent off for a second yellow card.

Midfielder Tobias Werner had given Augsburg a first-half lead before Croatia striker Ivica Olic equalised for Wolfsburg nine minutes from time to keep Wolves fifth.

At the other end of the table, Stuttgart climbed out of the bottom three with a 1-0 win at home to 10-man Hamburg.

Hamburg took Stuttgart's place in the bottom three, while new coach Huub Stevens enjoyed his first win in only his second game in charge as Stuttgart picked up their first win in ten games.

Guests Hamburg were reduced to ten men when Turkey midfielder Hakan Calhanoglu was shown a second yellow card, and the subsequent, red on 53 minutes.

Stuttgart scored the winner when Romania midfielder Alexandru Maxim netted just six minutes after Guinea winger Ibrahima Traore put in a superb cross with 69 minutes gone.