SEATTLE — Mariners second baseman Robinson Cano put a charge into Safeco Field in the eighth inning, and then reliever Edwin Diaz got to shut it all down for the first time.

Cano hit a three-run homer to cap a five-run eighth, new closer Diaz got his first major league save and the Mariners overcame a four-run deficit to beat the Boston Red Sox 5-4 on Tuesday night.

Cano capped the comeback with his 24th homer, off newly acquired Red Sox reliever Fernando Abad (1-5). It spoiled what had been a dominant performance by Boston left-hander David Price.

"That's baseball. You can't explain it, you really can't," Mariners manager Scott Servais said. "That's what makes baseball great.

"The fans ride the roller coaster with us. At times, we are tough to watch. I get it," he added. "But you have to keep watching because our guys don't quit and they believe something good is going to happen and tonight it did."

The Mariners had three hits off Price through seven innings and trailed 4-0. Then Mike Zunino opened the eighth with a home run to left off Price, and Leonys Martin, Sardinas and Guillermo Heredia followed with consecutive singles to chase the lefty.

Matt Barnes struck out pinch-hitter Seth Smith. Abad came in and tried to get a curveball past Cano, who hit it 394 feet for a one-run lead.

"I was just looking for something over the plate," said Cano, who was 1 for 11 in his career against Abad. "He's one of the toughest lefty relievers in the game right now. The guy has got me out a lot of times. I just try to put it in play."

Red Sox manager John Farrell said Abad, "had such good success against Cano. He's working the at-bat in good shape. He got him to chase a couple breaking balls, missed one over the middle of the plate and that was the difference in this one."

Diaz replaced struggling Steve Cishek as closer after Cishek blew a three-run lead in a loss Sunday night to the Cubs and allowed a go-ahead homer in the ninth during a 2-1 defeat to Boston on Monday night. Diaz is a 22-year-old rookie only two months out of Double-A but has a 1.73 ERA in 25 appearances for Seattle. He struck out three in a scoreless ninth Tuesday.

Diaz gave up a one-out walk to Travis Shaw, but Cano came up with the assist.

"When Cano came to (visit) me, I started to relax," Diaz said. "He helped me a lot on the mound. Every time he comes to talk to me, I do everything good. I appreciate it. My first save."

Donn Roach (2-0) pitched two innings for the win.

Top Red Sox prospect Andrew Benintendi entered as a pinch-hitter for his major league debut and went 0 for 2, striking out to end the game. Benintendi is expected to start in left field on Wednesday night.

David Ortiz doubled and had two RBIs. The 40-year-old has the most doubles (36) in a season ever for a player 40 or older, eclipsing Sam Rice, who had 35 in 1930.

He also has 62 extra-base hits, tying Dave Winfield (1992) for most in a season for a 40-or-older player.

Hanley Ramirez crushed a 454-foot home run off Wade LeBlanc in the third. Aaron Hill had an RBI single in the same inning, scoring Jackie Bradley Jr. from second.

ROTATION ADDITONS

The Mariners will add two starters to the rotation this next turn. LHP Ariel Miranda, a Cuban defector acquired in a trade with Baltimore on Sunday, will make his debut Thursday against Boston. RHP Taijuan Walker, on the DL with a right ankle strain, will likely return this weekend. He threw 69 pitches over 4 1/3 innings Monday for Triple-A Tacoma in a rehab start.

TRAINER'S ROOM

Mariners: RHP Nick Vincent (back strain) threw 20 pitches in a simulated game Tuesday. He will be sent out on a rehab assignment, as will SS Ketel Marte (mono).

UP NEXT

Red Sox: RHP Rick Porcello (14-2, 3.47) is riding a six-game winning streak and is 7-0 with a 2.73 ERA over his past nine starts. He's tied for the league lead with 14 victories. He beat Seattle on June 18 at home, going six innings while allowing two runs on eight hits.

Mariners: RHP Hisashi Iwakuma (11-7, 4.21) is coming off his shortest outing of the season, just three innings, in a 12-1 loss to the Cubs last Friday. It was just his third career start of three innings or fewer. He has had some shoulder stiffness recently. He beat the Red Sox on June 17, allowing four runs and nine hits in seven innings.