Cabrera broke an 0-for-14 slump with a two-out, bases-loaded single in the 11th inning to lift Cleveland over the Seattle Mariners 3-2 on Thursday night.
"It was like pulling teeth," Indians manager Eric Wedge said. "If we had done a better job earlier, we'd have never been in that situation."
Cleveland made a key error to blow a 1-0 lead in the ninth, fell behind in the 10th, then rallied to tie it again and finally win in their last at-bat for the third time this year.
Jhonny Peralta started the winning rally with a one-out walk off Mark Lowe (1-2). Travis Hafner, hitting sixth to start a game for the first time in more than three years, then doubled to left and Jamey Carroll was hit by a 1-2 pitch, loading the bases.
"I was calm, looking for a pitch over the plate," Cabrera said through first-base coach Luis Rivera, who served as interpreter for the 22-year-old switch-hitting infielder from Venezuela. "I got a good fastball to hit."
The Mariners took a 2-1 lead in the 10th when Richie Sexson hit the first pitch from Masa Kobayashi (2-0) for his 300th career homer. Cleveland tied it in the bottom half on a bases-loaded walk to Grady Sizemore by Seattle closer J.J. Putz.
"Walks will kill you," said Putz, who had allowed three of them and two runs in one inning in his last outing Saturday. "My job is to come in and get ahead. I just didn't throw strikes."
The homer was Sexson's sixth of the season and 100th since signing with Seattle as a free agent after the 2004 season. The first baseman reached the Mariners milestone in 463 games, quickest in team history.
"Richie had a huge hit, but it was a tough loss," Mariners manager John McLaren said. "J.J. wasn't sharp. He's still working his way back."
McLaren said he may use Putz in some non-save situations. The right-hander, who had 78 saves over the previous three seasons, came off the disabled list April 22 after being out with a strained muscle in his rib cage.
Putz blew his second save in four tries, yielding a pair of one-out singles and a walk to load the bases. After walking Sizemore to make it 2-2, Putz came back to strike out Casey Blake and David Dellucci -- Blake's fourth strikeout of the game and Dellucci's third.
Seattle's Ichiro Suzuki had three hits, and his speed helped tie the score 1-1 in the ninth.
"I tried to do too much," Blake said. "I have to catch the ball. I felt terrible, but we got a huge win. That's why you call it a team game. They bailed me out."
Martinez doubled to right with one out for Cleveland's first hit off Miguel Batista. One out later, Hafner's line double into the right-field corner broke an 0-for-13 stretch and made it 1-0.
Ryan Garko then snapped his 0-for-25 slump with a line single to left-center, but for the second night in a row, third-base coach Joel Skinner decided to challenge Suzuki's throwing arm -- and lost. Skinner waved Hafner around and Suzuki's throw home was waiting for the lumbering DH for the final out. On Wednesday, Suzuki nailed Blake trying to score on a similar play.
Indians starter Paul Byrd gave up four hits and struck out four over 7 2/3 shutout innings.
"It would have been a lot more frustrating if we had lost," Byrd said. "This is one we can build off. Our trademark is playing with a lot of heart, battling back to win. That's what we did."
In seven innings, Batista gave up one run and four hits, walking three and striking out six.
Suzuki's 70 outfield assists since 2001 rank only behind Vladimir Guerrero (74) and Carlos Beltran (73). ... Martinez has hit in 13 straight games, going 19-for-53 (.358). ... Mariners GM Bill Bavasi returned to Seattle on Thursday morning. His father, longtime baseball executive Buzzie Bavasi, passed away at age 93 in the afternoon. ... Alex Rodriguez hit 100 homers in his first 470 games with Seattle. ... Hafner's RBI tied Andre Thornton for the Indians record as a DH at 450.