BOSTON -- The toughest moment of Mike Leake's stellar night was missing a chance for a shutout.
Leake pitched eight sparkling innings, Mitch Haniger drove in three runs and the Seattle Mariners snapped a season-high five-game losing streak with a 7-2 victory over the Boston Red Sox on Saturday.
With closer Edwin Diaz needing some work, Seattle manager Scott Servais had to deliver the bad news to Leake.
"Very tough, very, very hard," Servais said. "I told him: `Mike, 99 percent of the time I wouldn't take you out of this game, but we need to get Eddie out there.'"
Leake (8-4) gave up three singles, struck out five and walked two six days after he allowed five runs and took the loss against the Red Sox at Safeco Field. Diaz gave up two runs in the ninth.
"I wanted it," Leake said. "I was ready, but they wanted to give Diaz work, so there's no fight there."
His last shutout was on Sept. 30, 2015, for San Francisco against the Los Angeles Dodgers.
Nelson Cruz had three hits and scored twice a night after hitting two homers and driving in seven runs for Seattle, which went on its skid after beating Boston two straight at home last weekend.
J.D. Martinez had two singles for Boston after going 4 for 5 with five RBIs when the Red Sox collected a season-high 20 hits in a 14-10 victory Friday.
Eduardo Rodriguez (9-2) gave up five runs, four earned, in four innings, snapping his personal six-game win streak. The Red Sox were 13-1 in his starts this season.
"Today was just the command with the pitches, you know what I mean?" he said.
Red Sox manager Alex Cora said Rodriguez's lack of command with his cutter was the difference from last weekend when he was solid against the Mariners. He said both of Haniger's doubles came off the pitch.
"Those two pitches, compared to last week, last week we attack them away, Eduardo did and tonight he tried to go in and it didn't work," he said.
Playing on a cool, misty night, the Mariners managed to close out the Red Sox after blowing two five-run leads during their slide, including Friday.
Seattle broke it open with three runs in the fourth. Haniger made it 4-0 with a two-out, two-run double off the Green Monster. He scored from second on Kyle Seager's infield hit when Rodriguez slipped covering first and turned late for the plate.
Haniger also had an RBI double in the first.
Mariners: SS Jean Segura missed his third straight game with a right forearm infection. "The swelling has gone down quite a bit," Servais said. The plan was for him to hit and field to see where he'd be for Sunday afternoon's game.
Red Sox: Cora said LHP Drew Pomeranz (10-day DL, left biceps tendinitis) felt better after throwing off a mound on Friday. He threw lightly on Saturday and Cora said he "might do another bullpen" on Monday. ... 3B Rafael Devers fouled a ball of his foot and came out after completing his at-bat. "He's OK," Cora said.
Red Sox right fielder Mookie Betts and shortstop Xander Bogaerts were both out of the lineup.
Cora said Betts was "a little bit under the weather. He had no energy." The All-Star outfielder entered Saturday with a .342 average, second-best in the majors, with 19 homers and 39 RBIs.
Bogaerts left Friday's game after he sprained his left index finger on a headfirst slide to second.
For the second straight game, both starters had faced the same team in their previous start. Rodriguez earned the win, allowing only two runs in six innings last Sunday in Seattle.
"It does make it a little bit more challenging for the pitcher in my mind," Servais said before the game.
Cora said: "You have to make an adjustment just to make an adjustment."
Mariners: LHP Marco Gonzales (7-4, 3.80 ERA) is slated to start the series finale Sunday. He's 6-2 with a 2.88 ERA in his last 11 starts.
Red Sox: LHP Chris Sale (6-4, 2.74) is set to start. The ace has allowed one or no runs in nine of 17 starts this season and is 5-1 with a 2.09 ERA in his career against Seattle.