Schalke 04's dreadful run of form continued with defeat at Fortuna Dusseldorf, while Hoffenheim beat Cologne to move seventh.
Dusseldorf boosted their hopes of avoiding relegation after coming from behind to beat Schalke 2-1 and extend the winless run for David Wagner's side to 10 Bundesliga games.
The result left Fortuna 16th, the relegation play-off spot, on 27 points from 28 games, one behind Mainz who stayed above them with a 1-1 draw at Union Berlin. Schalke stayed ninth on 37 points.
After a dull first half, the contest sprung to life when Weston McKennie fired Schalke into a 53rd-minute lead with a diving header from a superb Bastian Oczipka cross.
Rouwen Hennings nodded in a 63rd-minute equaliser which stood after a quick VAR check and Kenan Karaman completed Fortuna's comeback with another close-range header thanks to more sloppy defending by the visitors.
Hoffenheim ended a seven-game winless run with an entertaining 3-1 victory over visitors Cologne as both teams ended the game with 10 men and the hosts moved back into European contention.
Christoph Baumgartner scored early in each half to give Hoffenheim a two-goal lead with Cologne a man down after Sebastiaan Bornauw was sent off with a red card for a violent challenge in the 26th minute.
Steven Zuber added a third in the 48th minute but the numerical balance was restored when Benjamin Huebner got his marching orders following a second booking for a clumsy foul on Cologne's Dominick Drexler two minutes later.
The visitors pulled a goal back through Florian Kainz's deflected shot on the hour and could have scored again but Mark Uth's penalty was saved by Oliver Baumann.
Marcus Ingvartsen netted a well-taken free-kick to earn 10-man Union Berlin a battling 1-1 draw against fellow strugglers Mainz in their Bundesliga clash at the Stadion An der Alten Forsterei.
Danish forward Ingvartsen equalised after Bote Baku had scored the opener for the visitors, who were thumped 5-0 by RB Leipzig at the weekend, but looked the most likely to take all three points against a Union side who halted a run of four straight defeats.
The home side had midfielder Robert Andrich sent off for a second bookable offence before half-time, just after they had equalised and appeared to have the momentum but were left to hold on in the second period as Mainz pushed for the winner.
Augsburg and Paderborn shared the points following a goalless draw.