Cabrera, who struck out three times, connected on a 3-2 pitch from Rodriguez (2-3) into the right-field stands to give the Padres their 11th win over New York in 14 games.
The Padres tied the game in the ninth at 2-all after Kyle Blanks led off with a walk and scored on fellow rookie Will Venable's double into the right-field corner off Rodriguez.
Blanks was ruled safe by umpire Marvin Hudson on the throw to the plate, although TV replays seemed to indicate that catcher Brian Schneider took the relay from second baseman Anderson Hernandez and tagged Blanks' hand before he touched home.
Rodriguez, who has five blown saves, walked Henry Blanco and intentionally walked pinch-hitter Oscar Salazar to load the bases. The Mets then moved center fielder Angel Pagan to become a fifth infielder playing near second base, with the entire infield playing in, before Cabrera connected.
Heath Bell (4-1) pitched the ninth for the win.
San Diego's comeback ruined the best start of the season for Oliver Perez, who carried a shutout into the seventh inning. The Mets have lost seven of nine.
The left-hander dominated San Diego through six innings, facing just one batter over the limit. Perez struck out seven and did not walk a batter as the Padres managed just two baserunners. Blanco reached on a one-out double and David Eckstein was hit by a pitch leading off the fourth.
But Perez started the seventh with consecutive walks to Eckstein and Adrian Gonzalez. After a flyout, Chase Headley doubled off the center-field wall to cut the lead to 2-1 and knock Perez from the game.
Reliever Brian Stokes then struck out Blanks and intentionally walked Venable to load the bases. Blanco then topped a ball that traveled about 2 feet in the dirt in front of home plate. Schneider grabbed the ball and easily made the force out at home.
Perez finished allowing one run and two hits in his longest outing of the season.
San Diego threatened again in the eighth inning when it loaded the bases, but Stokes got Headley to ground out to end the threat.