Staked to a seven-run lead, Seattle starter Kevin Millwood couldn't protect it.

Cleveland shortstop James Donald singled off Mariners reliever Tom Wilhelmsen in the top of the seventh to break an 8-8 tie and help the Indians rally to beat Seattle 9-8 Tuesday night.

A six-run fourth inning pushed the Mariners in front 8-1. After giving up a run and following that with three scoreless innings, Millwood allowed five hits and did not get an out in Cleveland's seven-run fifth.

"You try to figure out what's not right and try to fix it," Millwood said. "Tonight, I wasn't able to do that."

Cleveland closer Chris Perez made Donald's tie-breaking hit stand up. Perez got Michael Saunders to fly out to shallow left for a second out before loading the bases and finishing his third save when John Jaso flew out to right field on a 2-0 pitch.

"I liked the way we pressed at the end there," Seattle manager Eric Wedge said. "We were in position to at least tie the game, if not do more."

Seattle (6-6) reliever Charlie Furbush (0-1) allowed a hit by Travis Hafner and a walk to Shelley Duncan before striking out the next two in the seventh and being replaced. But, Wilhelmsen could not close the inning.

"I didn't hit it all that hard, but hit it in the right spot," Donald said.

Carlos Santana's three-run homer in the fifth was the main blow in Cleveland's (5-4) rally. Rafael Perez (1-0) pitched a scoreless sixth inning to pick up the win.

Donald's fly to center off reliever Erasmo Ramirez tied the game at eight and capped the rally for Cleveland. Once the inning was over, every Cleveland player had a hit.

They were all needed. In the bottom of the fourth, Kyle Seager's single was hit 50,000 in Mariners history. It felt like Cleveland starter Justin Masterson gave up half of them Tuesday.

Masterson fell apart in the fourth inning. The Mariners put together five hits and scored six runs, plus Masterson walked two and hit a batter in the inning. One of the walks was to Brendan Ryan, which scored the 25,000th run in Mariners history when Justin Smoak crossed the plate.

Ichiro Suzuki drove in two runs with a line drive to right field. After Smoak picked up his second single of the inning -- he finished with a career-high four hits -- Masterson was finally lifted after throwing 71 pitches in 3 ? innings. He allowed eight earned runs, walked four and gave up seven hits.

"It's hard to swallow when you lose, especially a close one like that," Smoak said. "We had a gameplan against Masterson and had the one big inning, and then couldn't do much after that."

Jaso hit a two-run homer to drive in Ryan, who had walked, in the bottom of the third inning to yank the Mariners in front 2-1. Ryan walked four times.

The Indians picked up a run in the first when Hafner singled hard to left field and Michael Brantley scored. It was a laborious first for Millwood, who threw 26 pitches, allowed two hits and walked one. By contrast, Masterson threw just nine pitches in a 1-2-3 first.

Millwood adjusted quickly. He threw 26 pitches over the next two innings and allowed just one hit before unraveling in the fifth.

"From the first inning on, nothing was going good," Millwood said.

NOTES: The Mariners gave catcher Miguel Olivo the day off. Olivo is hitting .111 this season. He also has twice as many strikeouts (8) as hits (4). . The Indians don't expect Asdrubal Cabrera back before their six-game road trip ends. Cabrera was placed on the bereavement list Tuesday following a family death. . Cleveland called up left-hander Nick Hagadone to replace Cabrera.