Peralta (6-9), whose start was pushed back from Sunday to give his ailing left hamstring a few extra days of rest, struck out six and walked four for his first career complete game. It also was the Brewers' first shutout and first complete game of the season.
Ton Cingrani (3-1) was almost as effective as Peralta, allowing just two singles in addition to Schafer's two-run homer, striking out 10 and walking two in seven innings.
Schafer, a last-minute replacement for Norichika Aoki, broke up the scoreless duel in the fifth. Martin Maldonado battled back from an 0-2 count for a leadoff walk and Schafer drove the first pitch 429 feet over the wall in right-center to put the Brewers up 2-0.
Derrick Robinson was within a hand swipe of putting the Reds on the board in the seventh when he sliced an opposite-field triple into the left-field corner. The ball eluded left fielder Jeff Bianchi, normally a utility infielder who came on to start the inning as a defensive replacement for Ryan Braun. Robinson tried to score on the play but was nailed on his reach back slide at home on a perfect relay throw from shortstop Jean Segura.
The Reds also threatened in the ninth when Joey Votto walked with two outs and advanced on a wild pitch, but Brandon Phillips grounded out to short.
Braun, in the starting lineup for the first time since going on the disabled list June 10, singled in the first inning on the first pitch he saw. He grounded out to short and flied to right before being lifted.
NOTES: Aoki was in the starting lineup in right field and as the leadoff hitter, but was a pre-game scratch with left elbow tightness. ... Reds left fielder Chris Heisey left the game after getting hit on the left elbow by a pitch from Peralta in the second inning. X-rays were negative, the Reds announced.