Castres came within a second of a first away win of the season before Martin Bustos Moyano's last-gasp penalty saved Bayonne.
Elsewhere Grenoble took a step towards play-off qualification as they won at Stade Français, while Brive hammered Racing-Métro to ease their own relegation worries.
Finally La Rochelle proved far too strong for Oyonnax, while earlier in the day Toulouse had battled past Montpellier.
Bayonne 21-19 Castres
Stade Jean Dauger, Bayonne
Martin Bustos Moyano's last-second penalty handed Bayonne the narrowest of victories, cruelly denying Castres a first away win of the season.
Castres made a flying start with a try through Romain Martial after just eight minutes. After Cédric Garcia's little chip had bounced away from Marvin O'Connor, the giant winger dived down for the score.
Julien Dumora converted having already slotted a penalty to make it 10-0 to the visitors. Bayonne responded, and after Jean Monribot had a try disallowed, Christophe Loustalot knocked over two penalties for the Basques.
Rémi Talès' drop goal and a second Dumora penalty put Castres up 16-6, but Bayonne kept chipping away at the lead, with two more penalties from Loustalot before the break.
That continued in the second half, with Bustos Moyano taking over the kicking duties and slotting two more to give the home side the lead for the first in the game.
With eight minutes to go, Castres got back in front thanks to a penalty from Dumora but in the final second Bayonne got a penalty for an offside, giving Bustos Moyano a kick to win the game on the touchline, level with the 10-metre line.
He held his nerve, and handed Bayonne the vital win in the relegation battle.
Pens: Loustalot 4, Bustos Moyano 3
Pens: Dumora 3
Drop Goal: Talès
Bayonne: 15 Martin Bustos Moyano, 14 Joe Rokocoko, 13 Gabiriele Lovobalavu, 12 Matthieu Ugalde, 11 Marvin O'Connor, 10 Santiago Fernandez, 9 Christophe Loustalot, 8 Charles Ollivon, 7 Jean Jo Marmouyet, 6 Jean Monribot, 5 Mark Chisholm (c), 4 Pelu Taele, 3 Aretz Iguiniz, 2 Anthony Etrillard, 1 Janse Van Rensburg
Replacements: 16 David Roumieu, 17 Lucas Pointud, 18 Dewald Senekal, 19 Lisiate Fa'aoso, 20 Guillaume Rouet, 21 Bastien Fuster, 22 Jon Elissalde, 23 Gert Muller
Castres: 15 Julien Dumora, 14 Romain Martial, 13 Romain Cabannes, 12 Daniel Kirkpatrick, 11 Thomas Combezou, 10 Rémi Talès, 9 Cedric Garcia, 8 Jannie Bornman, 7 Mathieu Babillot, 6 Ibrahim Diarra, 5 Benjamin Desroche, 4 Christophe Samson, 3 Ramiro Herrera, 2 Mathieu Bonello, 1 Mihaita Lazar
Replacements: 16 Brice Mach, 17 Saimone Taumoepeau, 18 Rodrigo Capo Ortega, 19 Marc Antoine Rallier, 20 Antoine Dupont, 21 Sitiveni Sivivatu, 22 Marcel Garvey, 23 Yohan Montès
Referee: Alexandre Ruiz
Brive 36-12 Racing-Métro
Stade Amédée Domenech
Romain Sola's last-second try sealed a bonus-point win for Brive against a disappointing Racing-Métro side.
The relegation battlers dominated from the off, and opened up a 6-3 lead with two penalties from Gaetan Germain to one from Maxime Machenaud for the Parisians.
Just before the half-hour Dominiko Waqaniburotu powered over from close range for the first try, and despite Chris Tuatara-Morrison's sin-binning, Brive lead 16-9 at the break.
The kicking battle between Germain and Machenaud continued in the second half, with Brive edging it to lead 22-12 after an hour.
Racing kept fighting, in search of at least a bonus point, but in the last ten minutes, they appeared to run out of gas, and Brive took control.
First it was Sisa Koyamaibole who went over on 70 minutes, before Sola spotted a gap in the defence and ghosted through, to make it a maximum five points.
Tries: Waqaniburotu, Koyamaibole, Sola
Cons: Germain 3
Pens: Germain 5
Yellow Card: Tuatara-Morrison
Pens: Machenaud 4
Brive: 15 Gaetan Germain, 14 Guillaume Namy, 13 Christopher Tuatara-Morrison, 12 Thomas Sanchou, 11 Benito Masilevu, 10 Riaan Swanepoel, 9 Jean-Baptiste Péjoine, 8 Sisa Koyamaibole, 7 Poutasi Luafutu, 6 Petrus Hauman, 5 Dominiko Waqaniburotu, 4 Peet Marais, 3 Giorgi Jgenti, 2 Thomas Acquier, 1 Goderzi Shvelidze
Replacements: 16 Francois Da Ros, 17 Johannes Coetzee, 18 Arnaud Méla, 19 Said Hirèche, 20 Damien Neveu, 21 Romain Sola, 22 Alfi Mafi, 23 Kevin Buys
Racing-Métro: 15 Johan Goosen, 14 Adrien Planté, 13 Yoan Audrin, 12 Henry Chavancy, 11 Teddy Thomas, 10 Benjamin Dambielle, 9 Maxime Machenaud (c), 8 Antonie Claassen, 7 Camille Gerondeau, 6 Wenceslas Lauret, 5 Francois Van der Merwe, 4 Tomas Lavanini, 3 Luc Ducalcon, 2 Virgile Lacombe, 1 Cedate Gomes Sa
Replacements: 16 Jérémie Maurouard, 17 Davit Khinchagishvili, 18 Juandre Kruger, 19 Thibault Dubarry, 20 Laurent Magnaval, 21 Etienne Dussartre, 22 Benjamin Lapeyre, 23 Brian Mujati
Referee: Laurent Cardona
La Rochelle 35-20 Oyonnax
Stade Marcel Deflandre, La Rochelle
La Rochelle did their survival hopes the world of good with a comfortable win over Oyonnax.
They put an end to the Oyomen's four-game winning streak although they saw a bonus point slip through their fingers in their latter stages.
After a tight opening half-hour, Jody Jenneker's yellow card was a turning a point, with La Rochelle running in two tries in his absence.
First Kini Murimurivalu collected Jason Eaton's kick to the corner, acrobatically touching down, before Levani Botia showed his power to dot down.
Peter Grant converted the second try to make it 21-6 at the break, and the momentum remained with La Rochelle early in the second half, with Botia again going over, on hand after Leandro Cedaro had made ground down the right.
Oyonnax responded after Grant was yellow-carded for a high tackle on Silvère Tian, with the winger grabbing the first try for the visitors.
Julien Audy and Fabien Fortassin knocked over a penalty apiece for La Rochelle, either side of Viliame Ma'afu's try off the back of a maul for the visitors.
And despite Audy's yellow card seven minutes from time, that was it for the scoring, with La Rochelle opening up a gap with the bottom two.
For La Rochelle:
Tries: Murimurivalu, Botia 2
Pens: Grant 4, Audy, Fortassin
Yellow Cards: Grant, Audy
Tries: Tian, Ma'afu
Cons: Urdapilleta 2
Pens: Urdapilleta 2
Yellow Card: Jenneker
La Rochelle: 15 Kini Murimurivalu, 14 Alofa Alofa, 13 Jean-Pascal Barraque, 12 Levani Botia, 11 Malietoa Hingano, 10 Peter Grant, 9 Julien Audy, 8 Kevin Gourdon, 7 Jone Qovu, 6 Jason Eaton, 5 Leandro Cedaro, 4 Romana Graham, 3 Lekso Kaulashvili, 2 Hikairo Forbes, 1 Vincent Pelo
Replacements: 16 Benjamin Geledan, 17 Thomas Synaeghel, 18 Jacobus Grobler, 19 Nicolas Djebaili, 20 Julien Berger, 21 Fabien Fortassin, 22 Sereli Bobo, 23 Benoit Bourrust
Oyonnax: 15 Florian Denos (c), 14 Silvère Tian, 13 Roimata Hansell Pune, 12 Hemani Paea, 11 Dug Codjo, 10 Benjamin Urdapilleta, 9 Fabien Cibray, 8 Viliami Ma'afu, 7 Valentin Ursache, 6 Maurie Fa'asavalu, 5 Thibault Lassalle, 4 Leon Power, 3 Marc Clerc, 2 Jody Jenneker, 1 Soane Tonga'uiha
Replacements: 16 Paula Ngauamo, 17 Ruaan Du Preez, 18 Pedrie Wannenburg, 19 Olivier Missoup, 20 Agustin Figuerola, 21 Regis Lespinas, 22 Alaska Taufa, 23 Lukas Rapant
Referee: Maxime Chalon
Stade Français 21-30 Grenoble
Stade Jean Bouin, Paris
Grenoble did their play-off hopes the world of good with a convincing win away at Stade Français.
Fabrice Landreau's side dominated early on, with two penalties from Jonathan Wisniewski allowing them to open up a 6-0 lead.
Stade had struggled to hold onto the ball, but they did score the first try after a great break from Jonathan Danty. The centre got the ball off a set-move from a lineout, and went straight through Wisniewski's tackle. There was no cover in behind and he raced 50 metres to go over. Morne Steyn converted and the Parisians took the lead.
Grenoble hit back with another penalty from Wisniewski, before a wild pass from Digby Ioane was picked off by Jackson Willison for the visitors' first try.
Wisniewski converted to make it 16-7, before adding three more when Danty was sin-binned for what seemed like a tangle of legs with Chris Farrell.
Leading 19-7 at the break, Grenoble stretched their lead with another try, this time through Florian Faure when the ball was spread wide.
Wisniewski missed the conversion, but he made up for it with another penalty and with a 27-7 lead, there was no way back.
Stade didn't fold, and hit back with another try from Danty, again using his power to get over, but once Steyn had converted, the home side gave away another penalty which Wisniewski slotted.
Still Stade kept coming, with Julien Arias going over with eight minutes remaining, but Stade couldn't find their way over again and missed out on a losing bonus point.
For Stade Français:
Tries: Danty 2, Arias
Cons: Steyn 3
Yellow Card: Danty
Tries: Willison, Faure
Pens: Wisniewski 6
Stade Français: 15 Djibril Camara, 14 Julien Arias, 13 Paul Williams, 12 Jonathan Danty, 11 Digby Ioane, 10 Morne Steyn, 9 Jérôme Fillol, 8 Jono Ross, 7 Raphaël Lakafia, 6 Antoine Burban, 5 Gerhard Mostert, 4 Hugh Pyle, 3 Davit Kubriashvili, 2 Aled de Malmanche, 1 Heinke van der Merwe
Replacements: 16 Laurent Sempéré, 17 Sakaria Taulafo, 18 Paul Gabrillagues, 19 Scott Lavalla, 20 Julien Dupuy, 21 Meyer Bosman, 22 Jeremy Sinzelle, 23 Sofiane Chellat
Grenoble: 15 Gio Aplon, 14 Benjamin Thiery, 13 Chris Farrell, 12 Jackson Willison, 11 Xavier Mignot, 10 Jonathan Wisniewski, 9 Charl McLeod, 8 Florian Faure, 7 Peter Kimlin, 6 Fabien Alexandre, 5 Hendrik Roodt, 4 Benjamin Hand, 3 Dayna Edwards, 2 Arnaud Héguy, 1 Fabien Barcella
Replacements: 16 Laurent Bouchet, 17 Denis Coulson, 18 Ross Skeate, 19 Mahamadou Diaby, 20 Henry Vanderglas, 21 James Hart, 22 Fabien Gengenbacher, 23 Jono Owen
Referee: Sébastien Minery