Altuve struck out swinging to lead off the game, then doubled in the third, singled in the fifth and tripled in the sixth. His homer made him the first Astros player to hit for the cycle since Brandon Barnes against Seattle on July 19, 2013.
Altuve went four for six, his third four-hit game of the season and 37th of his career.
Yordan Alvarez added a three-run homer as part of a six-run sixth inning and José Abreu hit a solo home run for the Astros, who won their third straight.
Kendall Graveman (4-6) pitched a scoreless fifth inning for Houston, which followed up its 25-hit performance in Sunday’s win at Detroit with 18 on Monday.
Chris Sale (5-4) lasted 4⅔ innings and yielded three runs and seven hits, including a home run.
Houston starter Cristian Javier was chased in the fifth shortly after giving up a towering two-run home run to Boston’s Adam Duvall that cleared the Green Monster seats and put the Red Sox in front 4-3.
Boston’s momentum was short-lived.
Red Sox reliever Kyle Barraclough walked back-to-back batters to open the sixth. With one out, Altuve hit a deep flyball that ricocheted off the Monster in center, scoring two and allowing Altuve to slide in for a triple.
Barraclough hit Alex Bregman with the next pitch. Alvarez then emptied the bases, driving his 22nd home run of the season into the Red Sox bullpen in right field to stretch the lead to 8-4. After two walks and another hit batter, Yanier Diaz hit an RBI single.
Barraclough threw 94 pitches in 4⅓ innings, allowing 10 runs, 11 hits, five walks and three homers. He hit three batters.
The Red Sox were three for 12 with runners in scoring position and left 13 men on base.