Jed Lowrie also had two hits for the Astros, who have won consecutive games for the first time since a three-game winning streak April 7-9. Houston hit .316 during three games in Milwaukee this week and had 14 hits in a 7-5 win in the series finale on Wednesday.
Rodriguez (2-2) gave up two runs and six hits in six innings. He walked two and struck out six. The left-hander allowed only one earned run over 14 innings in his previous two starts.
Astros first baseman Carlos Lee left in the first inning because of a sprained left ankle. X-rays were negative, but Mills expects Lee to miss two games.
"I knew I hurt it pretty good," Lee said. "It takes a lot to get me out of a game. This was one of those games."
Jay Bruce's fifth home run of the season and second in two days and Devin Mesoraco's first of the year, on consecutive pitches from Fernando Abad with one out in the ninth, prompted Houston to bring in closer Brett Myers. He got two outs for his fourth save.
The Astros took a 2-0 lead in the third. Jason Castro led off with a bloop single and Altuve hit a two-out triple to right as Bruce tried to make a diving catch on the play. J.D. Martinez added an RBI single.
Houston chased starter Mike Leake with a four-run fourth that included RBI doubles by Chris Johnson and Altuve sandwiched around Schafer's run-scoring single. Three of the runs were unearned due to Gold Glove second baseman Brandon Phillips' error on Brian Bogusevic's sharp grounder.
Schafer has reached base at least once in every one of Houston's 20 games, the longest streak to start a season by an Astros player since Ricky Gutierrez's 23-game stretch in 1998.
Leake (0-3) lasted only 3 2/3 innings, matching the shortest start of his career. He gave up seven hits and six runs, three earned, with one strikeout.
"I gave them a couple of good pitches to hit," said Leake, chased after 3 2/3 innings in two other starts. "They were swinging early. I wasn't making good pitches."
Reds manager Dusty Baker thought the 61-degree temperature at gametime didn't help Leake.
"He's definitely a warm-weather guy," Baker said. "I've got a warm-weather team, but (opponents) play in the same weather we do. You've got to overcome the elements."
The Reds broke up Rodriguez's shutout bid in the fifth on Bruce's bloop single -- his second hit in 28 career at-bats against Rodriguez -- and Todd Frazier's pinch-hit triple to right-center.
"Wandy did a really good job," Mills said. "He wasn't stressed until he had that 13-pitch at-bat to (Joey) Votto."
Cincinnati added another run in the sixth on Drew Stubbs' leadoff single and Votto's double to left-center on the 13th pitch.
"I threw everything to Votto. I threw quality pitches. He kept fouling them off. Give him credit," Rodriguez said.
Schafer robbed Scott Rolen of two hits in deep left-center.
"You can't say enough about both of Schafer's plays against Rolen. Put them together and they were game savers," Mills said.
Houston placed RHP Kyle Weiland on the 15-day disabled list -- retroactive to April 25 -- with a shoulder injury, and infielder Marwin Gonzalez was placed on paternity leave to be with his wife as she prepares to give birth. INF Brian Bixler and Abad were recalled from Triple-A Oklahoma City. ... Lee was hurt while trying to field Johnson's low throw from third on Zack Cozart's grounder. ... Votto has reached base at least once in 19 of Cincinnati's 20 games. ... Twelve of the Astros 20 games have been decided by two runs or fewer.