BOSTON -- Clay Buchholz knew he had it going right away.
Buchholz pitched a six-hitter to win his fourth straight start, coming within one out of a shutout as the Boston Red Sox rebounded from a tough loss with a 6-1 victory over the Houston Astros on Saturday.
Mookie Betts drove in three runs and made a leaping catch in center field to help the Red Sox snap Houston's five-game winning streak.
Buchholz (7-6) struck out eight and didn't walk a batter in his ninth career complete game. He is 3-0 with a 1.38 ERA in four starts against the Astros.
"I could throw just about any pitch I wanted to today. It doesn't happen often like that," he said. "The first inning I threw some good pitches and they don't always happen that way. After the second inning, I felt like I was going to have good command of my fastball on both sides of the plate. When you have that you can throw everything off of that, and that's what I was able to do."
Luis Valbuena's RBI single with two outs in the ninth broke up the shutout.
"A complete game is a complete game," Buchholz said. "A shutout is a little different. It's pretty hard to do."
Betts hit two RBI doubles and a sacrifice fly. Sandy Leon had three singles for the Red Sox, and Xander Bogaerts drove in two runs.
Unlike Friday night's extra-inning game that featured three Boston comebacks before the Astros pulled out a 12-8 victory in the 10th, the Red Sox scored early and won for the fifth time in seven games.
A couple of early runs were more than enough the way Buchholz was pitching. He has a 0.87 ERA in his last four starts.
"He's been on a run," Red Sox manager John Farrell said. "He's in such a good place mentally where he's completing his delivery for strikes, and he was in control again today."
Astros manager A.J. Hinch was impressed.
"He pounded the strike zone with a couple different pitches. He had a really good changeup, a really good cutter," Hinch said. "This game was almost entirely about him."
Boston grabbed a 1-0 lead against Collin McHugh (9-4) three batters in on Bogaerts' RBI single. Betts' sacrifice fly made it 2-0 in the second.
McHugh gave up four runs -- three earned -- and seven hits in 5 1/3 innings.
"Fastball was sporadic, especially early on," he said.
In the fifth, the Red Sox turned catcher Hank Conger's throwing error into an unearned run. Brock Holt hit a dribbler in front of the plate and Conger fired the ball down the right-field line. Bogaerts followed by hooking a low, outside pitch into the left-field corner for an RBI double.
Betts hit a run-scoring double just inside third base to make it 4-0 in the sixth. His second RBI double came in a two-run eighth.
Betts also made a nice grab of Jose Altuve's drive on the warning track after a long run for the first out of the game.
Red Sox 3B Pablo Sandoval made a catch of a foul pop near the Astros' dugout before falling over the railing. His right cleat struck pitcher Vincent Velasquez on the left side of the head. He had a couple of scratches, but wasn't injured.
"The railing's still up," Farrell joked. "He's fearless."
Buchholz had a funny line, too.
"That's a big man going over a small railing," he said.
Astros: Colby Rasmus started in center field and went 0 for 3 with three strikeouts in his first game since June 26 due to a skin infection on his left wrist. Hinch said Rasmus will probably play every other day for the next week. ... After the game, Houston activated OF Jake Marisnick (hamstring) from the disabled list and sent OF Domingo Santana to Triple-A Fresno.
Red Sox: 2B Dustin Pedroia, on the 15-day DL with a strained right hamstring, hit in the cage after increasing his running a day earlier. Farrell said the club is still trying to decide if Pedroia will be activated for a series against the New York Yankees next weekend.
Astros: RHP Lance McCullers (4-2) is slated to start the series finale Sunday. He threw seven innings of one-run ball in a win over Kansas City on Wednesday.
Red Sox: Rookie LHP Eduardo Rodriguez (4-2) is scheduled to start. He's allowed one run or none in four of his six starts.