Griffey reached 30 home runs before the All-Star break for the third time in his career, joining Mark McGwire as the only big-leaguers to accomplish the feat.
Johnson (7-6) outdueled Andy Ashby (10-5), pitching a six-hitter and walking none for his second complete game of the season. Ashby struck out 10 in seven innings, allowed six hits and walked four.
Carlos Hernandez hit his fourth homer with two outs in the ninth for the Padres' final run.
The 6-foot-10 Johnson hadn't been on the base paths since 1989, when he was with Montreal. He reached on shortstop Andy Sheets' throwing error with two out in the fifth and scored an unearned run, then singled to center with two out in the eighth to improve to 3-for-23 lifetime. His last hit was on May 2, 1989, against Cincinnati.
The Mariners, who allowed 18 runs in losing two games in San Diego last year, ended the Padres' nine-game home winning streak. It was just the third loss in 16 games for the Padres, who split a two-game series at Seattle Monday and Tuesday. The Padres had only three runners reach second base.
Alex Rodriguez had three straight singles, including the one that scored Johnson, and stole three bases.