Brandon Moss belted a pair of home runs and drove in three for Kansas City, which is 4-0 vs. Seattle this season. Ryan Buchter (1-0), acquired from San Diego on July 24, picked up the victory with a one-pitch out to end the seventh.
Kelvin Herrera gave up a run in the ninth on a Robinson Cano single, but logged his 24th save.
Emilo Pagan (0-2) gave up the runs in the seventh, one was unearned after a Danny Valencia error, to take the loss. Cain's hit broke a 3-3 tie while Cabrera followed to make it 5-3.
The Mariners used Kyle Seager and Danny Valencia solo shots to seize an early 2-0 lead.
Seager homered with one out in the second on a Trevor Cahill 2-2 offering.
Valencia hit a disputed home run in the fourth down the right-field line. The Royals requested a crew chief review, but after a 2-minute, 52-second delay, the call was upheld. Royals manager Ned Yost was so upset with the decision he was ejected.
Cahill, who was making his second start with Kansas City since being acquired in the same trade with Buchter, was removed after 4 2/3 innings, allowing two runs, six hits and two walks while striking out three.
The Royals tied it 2-2 in the fifth on Moss' home run with Mike Moustakas aboard. Moss crushed a Yovani Gallardo 1-1 pitch 427-feet out to right.
Former Royal Jarrod Dyson had two singles, a stolen base and a sacrifice bunt in the first four innings.
The Mariners forged ahead in the top of the sixth with a run off left-hander Mike Minor. Valencia led off the inning with a double to right and Dyson bunted him to third. With the infield in, Guillermo Heredia pushed a ground-ball single to center to bring home Valencia.
Moss added a solo shot in the eighth inning, giving him 14 home runs and 28 RBIs this season.
NOTES: Mariners CF Jarrod Dyson received a nice ovation in his first at-bat and tipped his cap to the crowd after playing the previous seven years in Kansas City. Dyson singled to right. ... Royals CF Lorenzo Cain started after sitting out the loss Wednesday in Baltimore with a hamstring issue. ... The Mariners have been hit by an American League-leading 59 pitches. ... Mariners LHP James Paxton (11-3, 2.68 ERA) and Royals RHP Jason Hammel (5-8, 4.75) are the Friday probables. ... The Royals are 11-6 in Friday games, their best record for any day.