The Astros ended a six-game losing streak after giving up the game's first run in the eighth.
Nick Franklin singled home the eighth-inning run for the Mariners to finally break up a pitcher's duel and Tom Wilhelmsen came on in the ninth to protect the lead.
Wilhelmsen, however, gave up back-to-back singles to Jason Castro and J.D. Martinez and both runners moved up on a sacrifice from Carlos Corporan.
Carlos Pena was intentionally walked to load the bases, after which Carter's double brought home the tying and go-ahead runs.
Houston continued the onslaught with 12 men eventually coming to bat in the inning. Brandon Barnes singled home a run and Jose Altuve's base hit delivered two more. The final run of the inning came when Trevor Crowe drew a bases-loaded walk off Charlie Furbush -- the third Seattle pitcher of the inning.
Wilhelmsen (0-2) retired just one batter in taking the loss. Paul Clemens (4-2) worked the final 1 1/3 innings for the Astros to get the win.
Wisconsin business offering 'therapeutic cuddling' forced to close
Exploding whale video goes viral on Internet