Native Montrealer Lance Stroll was ninth - the first-ever points for the 18-year-old rookie; Hamilton gave him a thumbs-up as he passed on the track.
Meanwhile, Alonso's miserable season took another sorry twist after his engine expired with two laps left, while running in 10th place. One of the problems was the wind tunnel gave them one reading and the simulator gave them a different and along with that a mistake in setting up their vehicle which prevented them getting Pirelli's supersoft and ultrasoft tires working in their limited temperature windows. "I made the podium for the first time so I will drink out of anybody's shoes".
It was the fastest qualifying lap ever at the Circuit Gilles Villeneuve, nearly 1.5 seconds faster than the pace that won him last year's pole and even one second better than Vettel ran in his Ferrari during Saturday morning's practice.
The third row has the Red Bulls of Max Verstappen and 2014 Canadian GP victor Daniel Ricciardo.
Not feeling the damage at slow speed during the caution, Vettel waited to replace the wing until Lap 5 and fell to the back of the pack.More news: India arrests 15 people for celebrating Pakistan cricket team's win
The safety vehicle came out on the opening lap when, on the first turn, Romain Grosjean's Haas nudged Carlos Sainz's Toro Rosso, which plowed into the side of Massa's Williams.
"They did such a great job of analysing what went wrong, all the points", he said. A safety auto was scrambled to allow marshalls to collect the two stricken cars, while Grosjean pitted for a new front wing. "I don't know why Montreal has been so good to me over the years but I love driving this track".
A week after Mercedes missed the podium completely in Monaco, Hamilton completed 70 laps in 1 hour, 33 minutes, 5.154 seconds on a hot and windy day on Montreal's Ile Notre-Dame. "You always need weekends like this", he said. "I remember coming home from school and putting on the videotape of Ayrton, so it's really unusual to think that I'm here and I have that many poles".
Vettel finally claimed fifth when Ocon ran off at Turn One, after being blocked by Perez, and the German then ran off again himself and recovered.
"We have finally taken a one-two finish and done so at a track that we expected would be hard for us", Wolff said.
The post-race awards to the top three were presented by Britsh actor Patrick Stewart.
A mistake by Raikkonen let Vettel through to sixth and a chance to attack, which produced a thrilling battle as the Force India men, engaged in their own scrap, resisted. Vettel then overtook Sergio Pérez two lap laters and had the race lasted just another two laps he would have very likely gotten past Ricciardo as well.