Josh Johnson took a no-hitter into the seventh inning, John Buck hit a grand slam in his Florida debut and the Marlins beat the Mets 6-2 on Friday night.

Willie Harris had a leadoff double in the seventh for New York's first hit off Johnson (1-0). Carlos Beltran lined an RBI double and Ike Davis knocked in another run with a groundout off Johnson for the Mets, who had only one returner from their 2010 opening-day lineup — third baseman David Wright.

"We were getting no-hit through six innings," Collins said after his debut as the Mets' skipper. "And all of a sudden we had a ballgame. ... We just ran into a real, real good pitcher and we'll run into some more."

The Mets closed to 5-2 in the seventh and had the tying run to the plate with two outs, but Marlins reliever Mike Dunn struck out Scott Hairston.

Logan Morrison also homered and Gaby Sanchez added an RBI single for the Marlins, who played their 19th and final opener at Sun Life Stadium. The team moves into a new ballpark in 2012.

"It's what I set out there to do, to get us off on a good foot," said Johnson, who moved to 8-1 against the Mets — his only loss coming in last year's season opener at Citi Field. "I thought about last year a lot, the first game of the season last year. It didn't sit well with me. I wanted to go out there and make sure I competed a lot better than that, and I did."

Johnson allowed three hits and two runs in the seventh, leaving with two outs and getting an ovation from the crowd of 41,237, Florida's largest since a visit by the Yankees in June 2009.

He struck out three and walked two in 6 2-3 innings.

"He was pretty good tonight," Collins said. "When we got behind, he's pretty tough to catch up against. You don't get that many good pitches to hit."

Mike Pelfrey (0-1) gave up five runs, four hits and four walks in 4 1-3 innings for the Mets, who saw their streak of five straight opening-day wins snapped.

"You come into the game against Josh Johnson, you know you have to be good and I wasn't very good tonight," Pelfrey said. "I knew I was going to have to throw up a lot of zeroes to win. He outpitched me tonight. He deserved to win and I didn't."

Pelfrey loaded the bases with one out in the fourth by walking Mike Stanton and Morrison and giving up a double to Sanchez. Pelfrey quickly got a two-strike count on Buck, but made a mistake with a 2-2 offering.

Buck — an All-Star for Toronto last year who got an $18 million, three-year deal from Florida in November — drove a fly ball the opposite way to right-center, clearing the wall for his third career grand slam. It was the fourth opening-day slam in Marlins history, and brought a curtain call that lasted more than a minute before the catcher finally emerged to acknowledge the crowd.

Buck thought he didn't get enough to hit it out.

"I thought I missed it," he said. "I thought it was going to be a deep flyball."

The Mets likely hoped the same. They gave up a major league-high 12 slams in 2010, and were the only team not to hit one.

The way they fare against Johnson, it hardly mattered. He has faced the Mets 13 times and compiled a 2.73 ERA.

"We ran up against a good pitcher tonight," Harris said. "You've got to tip your hat to the guy. He pitched extremely well. He had all of his pitches working. That's big J.J. He knows what he's doing out there."

Josh Thole had a chance for the Mets' first hit in the sixth, but his grounder up the middle was fielded by shortstop Hanley Ramirez, who spun and threw easily for the out. But in the seventh, Harris' double was clean, ending Johnson's bid to join Bob Feller in one of baseball's most exclusive clubs — the one for those throwing opening-day no-hitters.

Feller had baseball's only one of those in 1940.

NOTES: The Mets fell to 32-18 on opening day. ... Marlins manager Edwin Rodriguez was participating in his first opening day in the majors after more than three decades in baseball. ... Mets 2B Brad Emaus made his big league debut. "Take a deep breath," Collins said when asked for his pregame word to the rookie. ... Johnson was charged with his second career balk. His first came June 22, 2006, against Toronto, with Roy Halladay batting.