Raul Ibanez hit his team-high 12th home run and Michael Morse had an RBI double for Seattle.
Iwakuma (7-1) gave up four hits, struck out eight and walked one while reducing his ERA to 1.79, second-lowest in the majors behind Boston right-hander Clay Buchholz (1.71).
Iwakuma has been particularly stingy at home. He leads the AL with a 0.92 ERA in six starts at Safeco Field, striking out 46 and walking three. In 24 career appearances there, including 16 starts, he is 9-3 with a 1.89 ERA.
Carter Capps and Charlie Furbush worked the eighth. Tom Wilhelmsen got three outs for his 16th save in 19 opportunities.
Pinch-hitter Carlos Corporan had a two-out RBI single in the ninth before Wilhelmsen retired Matt Dominguez on a foul pop to end it.
The Astros made three errors to give them 47, tying the Los Angeles Angels for most in the AL.
Marwin Gonzalez started the Astros' rally in the third with a one-out single. He is hitting .533 (8 for 15) against Mariners pitching this season.
Brandon Barnes attempted a sacrifice bunt. Iwakuma jumped on it quickly but his throw to second was dropped by shortstop Brendan Ryan for an error and Gonzalez raced to third.
Jose Altuve then hit a sacrifice fly to left, scoring Gonzalez.
That unearned run ended Iwakuma's scoreless streak at 23 2-3 innings, eighth-longest in franchise history. He has not allowed an earned run since the second inning on May 26 against Texas.
Ibanez tied the score with his solo shot in the fourth into the right-center seats off Dallas Keuchel (3-3). It was Ibanez's fourth home run off a left-hander this season. He did not have any during the 2012 regular season with the New York Yankees.
The Mariners worked to scratch out the go-ahead run in the fifth. Carlos Triunfel, who has had two brief call-ups this season, broke an 0-for-13 skid with a single to open the inning. Jason Bay followed with a hard grounder to the left of Dominguez, who dived to stop it at third base. His only play was to first as Triunfel slid safely into second.
Kyle Seager then bounced back to the pitcher, who turned to catch Triunfel in a rundown. Triunfel dodged the tag long enough to allow Seager to reach second. Kendrys Morales then hit a high bouncer to Dominguez, who rushed his throw and first baseman Chris Carter could not dig it out.
Seager raced home on Dominguez's throwing error for a 2-1 lead.
Morse's RBI double in the seventh sent Bay home from third for a 3-1 lead.
NOTES: Altuve's ground-rule double in the sixth extended his hitting streak to a career-high 11 games. ... Seager's 13-game hitting streak ended. ... Mariners manager Eric Wedge has to juggle his lineup daily because of a rash of injuries. Morales (back) felt well enough to play first base, allowing Morse (quadriceps) to be the DH. Wedge said Morse would be on the disabled list if Justin Smoak (oblique) was not already there. CF Franklin Gutierrez (hamstring) also is on the DL. Endy Chavez started in center despite leg issues. "They're in the trenches right now. They're grinding," Wedge said. "It's a long stretch, a tough stretch 'cause we've been throwing out the same lineup pretty much every day."