Rick Ankiel's two-run homer off rookie Seth Maness (3-0) tied it in the top of the seventh and was his first against the team that converted the former left-handed pitcher to an outfielder in 2005.
Shaun Marcum (0-4) made it out of the fifth for the first time in four starts since beginning the year on the 15-day disabled list.
He left the game with two on and two out in the seventh and Scott Rice's wild pitch to pinch hitter Ty Wigginton allowed Daniel Descalso to score the go-ahead run.
Jon Jay and Tony Cruz had an RBI apiece in the fourth and pinch hitter Yadier Molina added a pinch-hit RBI single in the eighth for the Cardinals, who have won 12 of 14 and handed the Mets their sixth straight loss.
St. Louis will go for a four-game sweep Thursday with ace Adam Wainwright (5-2, 2.30) facing Jonathan Niese (2-4, 5.93).
Rice bounced a 1-0 pitch past catcher John Buck. The lefty took the loss his previous two appearances, including the series opener Tuesday when Wigginton scored from second on Matt Carpenter's infield hit off Rice's leg.
Miller labored five days after retiring the final 27 batters with 13 strikeouts in a one-hitter over Colorado.
On Wednesday, he allowed four hits, a walk and a hit batter to lower his ERA to a major-league leading 1.40. Miller had three of his six strikeouts in the first when David Wright bounced a two-out single up the middle to end the streak at 29 in a row and then stole second before Ike Davis fanned to end the inning.
Marcum entered with an 8.59 ERA after getting a late start due to biceps tendinitis and has lost four consecutive decisions for the first time in his career. He retired the side in order on just eight pitches followed by a 10-pitch second, and retired 10 of the first 11 hitters.
Miller went to a full count for the fourth time in six hitters before walking Buck with one out in the second, and Ankiel fisted a bloop single to shallow center. But Buck ran the Mets out of the inning when he was easily doubled off second on Ruben Tejada's liner to center.
Cruz made just his second start of the season and first since April 19 at the backup catcher behind Molina, who was 0 for 11 the previous three games. Molina called Miller's gem on Friday, in which the 22-year-old right-hander allowed a leadoff single to Eric Young and then retired the final 27.
The Cardinals had one hit and one runner in scoring position the first three innings against Marcum before breaking through with three hits and a botched rundown play to take a 2-0 lead in the fourth.
The Mets allowed a run and cut off the relay after Jay's two-out RBI double to the gap in right-center. Jay was marooned between bases when Wright charged hard from third to make the tag and the ball bounced out of his glove.
Jay ended up at third and scored on a single by Cruz.
Edward Mujica worked the ninth for his 11th save.
Notes: Miller had a major-league best 1.39 ERA his first eight career starts, counting one in 2012, bettering Milo Candini's 1.09 ERA in 1943 for the Washington Senators. It's the Cardinals' best, topping Howie Pollet's 2.09 start in 1941. . ... Marlon Byrd homered and doubled Tuesday for his first multihit game since Aug. 7, 2011, with the Cubs against Cincinnati. ... Rookie John Gast was the first Cardinals' lefty starter to make his debut as a starter since Ankiel broke in at age 20 in August 1999 and the first to win in his debut since Allen Watson beat the Braves on July 8, 1993.