Speedy Jarrod Dyson started the rally, Nelson Cruz delivered the game-winner and rookie Mitch Haniger made it possible.
Cruz singled in the tiebreaking run to cap a two-run, ninth-inning rally, and the Seattle Mariners overcame a five-run deficit to beat the Texas Rangers 8-7 on Sunday for a three-game sweep.
Haniger, acquired in an off-season trade with Arizona, started Seattle's comeback with a three-run homer, took a home run away with a leaping catch at the wall, and patiently walked to force in the tying run during the winning rally.
"We're down 6-1 against Cole Hamels, we just kept grinding at-bats," said Mariners manager Scott Servais, who was ejected in the sixth inning. "The pitch count was starting to go up, Haniger gets the big home run to get us right back in the game at 6-4, and then it's anybody's ballgame after that."
"An exciting day for him, and an unbelievable catch, I will say," Servais said. "That coach over the fence that Mitch had was pretty awesome."
Nomar Mazara gave Texas a 7-6 lead when he led off the ninth against Edwin Diaz (1-1) with his fourth homer.
Dyson pinch hit and reached on an infield single starting the bottom half, a ball deflected by reliever Sam Dyson (0-3). Jarrod Dyson stole second and took third when Leonys Martin reached on a bunt single that the pitcher fielded only to find no one covering third.
Martin stole second, pinch-hitter Mike Freeman was walked intentionally and Haniger took a low 3-1 pitch for a bases-loaded walk. Robinson Cano hit into a forceout, and Cruz hit a sharp grounder up the middle. Shortstop Elvis Andrus snagged the ball with a dive, but his off-balance glove flip to second was offline as Freeman scored.
"When you don't let a ball get out of the infield, granted Elvis made a sliding play at short, I did what I thought I had to do," Sam Dyson said. "I made a mental error, I guess, on that bunt play. I thought I had an out at third, I don't know what the hell I was doing, maybe I screwed it up and that's my fault."
Seattle trailed 6-1 before Haniger's three-run homer in the third, then tied the score 6-6 when Danny Valencia hit an RBI single in the sixth and Guillermo Heredia opened the seventh with his second big league home run, his first this year.
Haniger,who played in 34 games last season with the Diamondbacks, preserved the tie in the eighth with a leaping catch at the top of the wall in right-center to rob Joey Gallo of a potential two-run homer.
"I got a good jump and I knew the warning track was coming up," said Haniger, who extended his hitting streak to 10 games. "So, I just tried to get up and at least bring it back of some sort, get some glove on it."
Shin-Soo Choo staked Texas to the lead with a three-run homer in the second and two-run double in the third.
Rangers starter Cole Hamels left in position to win for the third straight start but has not gotten any decisions. He allowed four runs — three earned — and six hits in five innings. Seattle's Hisashi Iwakuma gave up six runs and seven hits in three innings.
Hamels was upset with the pitch that Haniger hit for his fourth home run.
"I threw probably the worst changeup I threw all game, and when it goes 400 feet that's unacceptable," he said. "You just have to be able to execute those pitches down and keep it down so you can get potential double plays. That's a tough break right there, and you have to give them the pointers for doing what they are supposed to do with pitches like that."
Jarrod Dyson's stolen base was his fourth in four attempts this season and his 16th consecutive successful steal dating back to last season with Kansas City, where he stole at least 30 bases in four of the previous five seasons.
Mariners manager Scott Servais was ejected in the sixth inning by first base umpire C.B. Bucknor for arguing after a delayed fair call on Martin's inning-ending groundout over first base.
Rangers: RHP Matt Bush, who had not pitched since April 9 (shoulder soreness), entered in the eighth and struck out the side. He received a cortisone injection Wednesday and threw in the bullpen Saturday.
Mariners: SS Jean Segura, on the 10-day DL (strained right hamstring) continues to improve. "He's running inside on the treadmill. He hasn't let it all out on the field yet, but we've got time," Servais said. "Hopefully get him in here by the end of the week." ... RHP Steve Cishek, on the 10-day DL (recovering from hip surgery) is to start an injury rehabilitation assignment.
Rangers: Texas heads to Oakland to open a three-game series Monday with RHP A.J. Griffin (1-0, 6.75), who allowed three runs in six innings in his last start.
Mariners: LHP Ariel Miranda (0-1, 5.06) starts the opener of a three-game series against Miami, Seattle's first game against a non-divisional opponent. He allowed four runs in 5⅔ innings in his last start, a 7-5 loss to Houston.