McHugh (4-7), who had allowed five home runs in 72 1/ 3 innings entering the night, surrendered two homers in the third inning, allowing the Mariners to take a 5-3 lead they would not relinquish. McHugh is 0-4 with a 4.13 ERA in his past four starts.
"Fastball command was rough tonight," he said. "I think I looked up at one point and had thrown 27 balls and 26 strikes. If you've seen me throw for a while, it's not the way I like to attack. It's not the way I like to pitch. It was a struggle tonight, for sure. It puts a lot of pressure on your other pitches to be kind of perfect when you can't locate a fastball. I was missing arm-side a lot."
Mike Zunino hit a two-run homer in the second, Michael Saunders hit a go-ahead two-run knock in the fourth and Brad Miller added a solo blast in the fourth to make it 5-3. Robinson Cano, who was hitless in his first three at-bats, clubbed a three-run blast to left field off reliever Josh Zeid in the seventh.
"Obviously, the home runs hurt us today," Astros manager Bo Porter said. "With Collin it was more just fastball command. From the beginning of the game he just really had trouble locating his fastball, and when he did fall behind and get into predictable fastball counts he ran into some guys that put good swings on it."
The Astros took a 2-0 lead in the first inning against Taijuan Walker, who was making his 2014 debut, when George Springer hit a mammoth two-run blast to left field that traveled an estimated 445 feet. That ties the fifth-longest homer by an Astros player at Minute Maid Park and the longest to left field.
"I've given up a few that were pretty far," Walker said. "I didn't watch it. It was high enough. I didn't want to turn around."
Porter didn't see it either, but not by design.
"It was hit pretty well," Porter said. "I didn't see where it was hit or landed. Let's just say he got into that one pretty good. I heard it; it was a loud noise."
Marwin Gonzalez clanked a homer off the right-field foul pole with two outs in the second to put the Astros ahead, 3-2, but McHugh could not keep Seattle inside the fences in the fourth.
"I try to keep the ball in the ballpark," McHugh said. "I take a lot of pride in that. The last couple of outings, it's kind of bitten me a little bit. Once again, it's a product of being able to command and get on top of guys early and get guys uncomfortable. We'll get back to it. I feel like I'm close, and I definitely did some good things today, too."
The Mariners added two runs in the ninth against reliever Jerome Williams, who was designated for assignment after the game.
Red-hot Astros second baseman Jose Altuve went 0-for-3, but he did swipe a base for a franchise-record seventh consecutive game. He is the first Major Leaguer to have a stolen base in seven consecutive games since Chone Figgins did so with the Mariners from June 23-30, 2010.
Altuve, who said he expected to play Tuesday despite the swollen elbow, saw his streak of stealing multiple bases in consecutive games come to an end at four. He hit .411 in June and was 17-for-17 on stolen bases.
"That's baseball," he said. "I think we weren't playing for the record. We were playing to win the game, and if I'm disappointed for something, it's we didn't win."