Updated

The Kansas City Royals used a three-run, two-out rally in the eighth inning to beat the Chicago White Sox, 7-6, and salvage the finale of a three-game set at Kauffman Stadium.

Mike Moustakas and David Lough each opened the inning with singles off Jesse Crain (2-2), who had a scoreless streak of 29 straight appearances snapped. Elliot Johnson's sacrifice bunt loaded the bases due to a Crain error, and after the reliever fanned the next two batters, Alex Gordon drew a walk to score Moustakas.

"That's baseball for you. If I make the bunt play, I could have been out of it. Then their ball finds a way to sneak through, so you've got to have a lot of luck to have a streak like that," said Crain. "Guys make the play behind you. Sometimes you've got to battle through things."

Alcides Escobar then hit a grounder to Alexei Ramirez which hopped up and got past the shortstop to score two runs.

Luke Hochevar (1-1) pitched a scoreless top of the eighth to earn the win and Greg Holland worked a perfect 1-2-3 ninth to collect his 16th save of the year.

"It's big anytime you get a win, especially come-from-behind," said Hochevar. "That's always a big pick-me-up for the club."

Adam Dunn finished 2-for-4 with a homer and four RBI for the White Sox, who host the New York Mets for a quick two-game set beginning Tuesday.

Royals starter, James Shields, was tagged for four runs on seven hits with three walks. He has gone 10 starts without earning a win, which hasn't occurred since April 30.

The Royals got on the board in the third trailing 4-0, with an Alex Gordon single up the middle to score Jarrod Dyson, who singled with one out and stole second to get into scoring position.

George Kottaras and Dyson connected on back-to-back home runs to leadoff the fifth and cut the deficit to one. Later in the frame, Billy Butler delivered a two-out RBI single to left to tie the game at 4-4, scoring Escobar, who doubled two batters before.

Gordon Beckham put the White Sox ahead in the seventh with a double to center off Kevin Herrera that scored pinch-runner Jordan Danks from second. Danks ran for Dayan Viciedo who reached on an infield single. Jeff Keppinger was walked to put Danks on second.

Shields ran into some trouble in the first by walking Alejandro De Aza and Paul Konerko and surrendering a Ramirez single to load the bases with one out. Dunn ripped a ball to first baseman Eric Hosmer that he couldn't handle, which allowed De Aza and Ramirez to score.

Dunn smashed a one-out, two-run shot to straight-a-way center in the third to increase the lead to four.

Game Notes

Dunn tied Billy Williams for 46th place on all-time home run list (426) ... Chicago was 3-for-14 with runners in scoring position ... White Sox starter Daniel Axelrod lasted 4 2/3 innings surrendering four runs on ten hits, his last win came on May 26 ... The Royals play host to the Atlanta Braves for the first time in franchise history on Tuesday ... Kansas City finished 2-for-10 with runners in scoring position.