Nick Franklin supplied the other Seattle run with a first-inning homer, giving the Mariners a lead they never lost while snapping a six-game losing streak.
Erasmo Ramirez (5-1) gave up both Houston runs on five hits over 5 2/3 innings and struck out seven while picking up the victory.
Danny Farquhar walked one and struck out one in the ninth on the way to his 10th save.
Jason Castro had an RBI double in the fourth and Brett Wallace cut the Houston deficit to a lone run with a homer in the fifth.
Jordan Lyles (6-7) surrendered three runs on four hits in six innings to suffer the loss.