Kansas City snapped a 12-game losing streak, winning for just the fourth time this season.
Butler hit a two-run homer in the first inning and a solo shot in the ninth. All of Kansas City's runs came on long balls, with Eric Hosmer contributing a two-run blast in the fifth and Alex Gordon hitting a three-run shot in the ninth prior to Butler's second home run of the game.
Kansas City had not won since April 10.
The victory went to Luke Hochevar (2-1), who allowed two runs on four hits in 6 1/3 innings.
Two of the Royals' homers came off starter Ubaldo Jimenez (2-1). He lasted six innings while giving up four runs on six hits.