Roenis Elias pitched seven strong innings and Jesus Montero also homered for Seattle. Elias (6-5) allowed three hits and struck out six without a walk while facing the minimum in five innings.
Dominic Leone and Danny Farquhar each pitched an inning in relief.
The only mistake Elias made turned into a solo home run by Rene Rivera in the second.
Cano's fourth home run of the season gave the Mariners a 4-1 lead in the fifth and was enough to chase San Diego starter Eric Stults after the inning ended.