Brad Keller kept up his recent pitching surge with another strong outing.

Keller gave up a home run to the first batter of the game – Cedric Mullins – but quickly settled in to pitch eight strong innings in the Kansas City Royals' 9-2 win over the Baltimore Royals in a matchup of the teams with the worst records in the majors.

"Every time he takes the mound, you expect him to keep you in the ballgame," Royals manager Ned Yost said. "He just did what he does so well. He keeps the ball on the ground and did a nice job doing that."

Keller (7-5) gave up two runs and four hits with two walks and four strikeouts to improve to 3-0 with a 2.16 ERA in his last four starts.

"I was just trying to get in a groove and throw strikes," he said. "I just made a mistake (to Mullins). You've got a long game after that. You've got to flush it and lock it back in.

Ryan O'Hearn homered among his three hits and drove in four runs, Whit Merrifield scored three runs, and Hunter Dozier and Cam Gallagher also went deep to help the Royals win for the fifth time in six games on their current homestand.

"They're not exactly household names yet, O'Hearn, Dozier and Gallagher," Yost said. "But they're doing okay. You watch Dozier who looks totally comfortable now. O'Hearn has always been a guy with a lot of confidence that he can hit. It's nice to see Cam get off to a good start too."

With the scored tied 1-1 in the fourth, Andrew Cashner (4-13) gave up a sacrifice fly to Merrifield after loading the bases on two walks and a single. Dozier led off the fifth inning with a 423-foot home run to left field to make it 3-1.

"(Cashner) was having trouble gripping his breaking ball," Baltimore manager Buck Showalter said. "He never really got a feel for it. He'd throw a couple and it's just hard to go through that many hitters, especially lefthanders, without a feel for a breaking ball. I think the last home run is the one that's going to stick with him. He could have come out of that with three runs, not being able to do the things he normally does."

The Orioles pulled within a run in the sixth when Mullins led off with a double just beyond the reach of Dozier at third, advanced to third on a fly ball and scored on Trey Mancini's sacrifice fly to the wall in right.

The Royals answered in the bottom of the inning as Gallagher hit his first home run of the season, ending Cashner's night.

"I think he was trying to get it out over the plate but it backed up on him," said Gallagher, who was recalled from Triple-A Omaha Friday after the Royals traded catcher Drew Butera to the Colorado Rockies. "He just left it middle-in and I was able to get a good swing on it."

Cashner, who has given up a career-high 21 homers, allowed four runs and nine hits in 5 1/3 innings. He walked three and struck out one.

"That was probably some of the worst stuff I've carried into a game," Cashner said. "My sinker was not there tonight. (My) offspeed pitches were not there. (I) didn't really command anything for a strike."

O'Hearn added a two-run single off Yefry Ramirez later in the sixth to push Kansas City's lead to 6-2. Dozier's RBI single in the eighth drove in Merrifield for his third run scored of the game, and O'Hearn added a two-run homer off Ryan Meisinger to cap the scoring.

Butera traded

The Colorado Rockies acquired Drew Butera from the Kansas City Royals on Friday, giving Colorado a veteran backup catcher as they try to chase down the Arizona Diamondbacks in the NL West.

The Royals received minor league left-hander Jerry Vasto.

Butera was in his fourth season with the Royals, where he served as the backup to six-time All-Star Salvador Perez. He was hitting just .188 with two homers and 18 RBIs in 52 games, but will be remembered by Kansas City fans for catching the final out of the Royals' 2015 World Series championship.

Colorado began the day 1 1/2 games behind the Diamondbacks in the division race.

The 26-year-old Vasto has spent most of this season at Triple-A Albuquerque, going 2-1 with a 3.16 ERA in 37 relief appearances. He made his big league debut on June 10 in a game against Arizona. He was optioned to Triple-A Omaha.

The Royals called up catcher Cam Gallagher to take Butera’s spot on the roster and activated outfielder Brian Goodwin of the disabled list to replace Lucas Duda, who was traded to the Atlanta Braves on Wednesday.

Orioles transaction

OF Joey Rickard was recalled from Triple-A Norfolk. ... RHP Jhan Marinez was reinstated from the 10-day disabled list (right hamstring strain). He cleared waivers and was assigned outright to Norfolk. ... OF Craig Gentry was designated for assignment.

Trainer’s room

Orioles: OF Mullins, who missed Wednesday's game with a hip injury, was back in the lineup in the leadoff spot. "I'm feeling good," he said prior to Friday's game. "I'm excited to get back out. I've been with the trainers; we've had some intense treatment going on, but I feel really good."

Royals: C Salvador Perez was held out of the lineup for precautionary reasons with a mild strain of his left thumb. Perez, who missed Wednesday's game against Detroit, hurt the thumb on Tuesday when he lost his grip on the bat during a swing against the Tigers. Manager Ned Yost said Perez could have caught Friday, but swinging would be difficult. Perez was replaced in the lineup by Gallagher.

Up next

Orioles RHP Dylan Bundy (7-13, 5.37 ERA) will face another Royals rookie pitcher as RHP Heath Fillmyer (2-1, 4.21) takes the mound for Kansas City. Fillmyer will make his first career start against the Orioles. Bundy is 1-1 with a 5.87 ERA all-time against Kansas City, including one start this year May 8 in Baltimore, in which he gave up seven earned runs without recording an out.