The Formula One driving leader put two miserable weeks behind him as he coasted to victory with Mercedes AMG teammate Nico Rosberg on his tail in what was a two-car race from the outset on the usually treacherous 4.361 kilometre Circuit Gilles Villeneuve on Sunday.
There was more drama mid-race when a groundhog just made it on a mad dash across the track just ahead of three speeding cars.
Hamilton posted his fourth victory in seven races and ended Rosberg's two-race winning run as he held the lead from pole position and was never seriously threatened.
"I was pushing like mad to try and put the pressure on, but he didn't make any mistakes, so fair play," said Rosberg. "Second place is still OK."
Of note was Valtteri Bottas taking third place for Williams, the first time this season a car other than a Mercedes or Ferrari finished in the top three. Kimi Raikkonen, who ceded third spot when he spun out his Ferrari at the hairpin turn, was fourth and his teammate Sebastian Vettel was fifth.
Two weeks ago in Monaco, Hamilton was deprived of victory when his team called him in for a tire change with the race under a safety car, which handed the win to Rosberg and allowed the German to close within 10 points in drivers standings.
There were more mishaps in practice this week, including a spinout and a light crash into a tire barrier when the Mercedes drivers were inexplicably sent onto the track during a rainstorm.
Hamilton was asked more than once if he felt any redemption, and finally offered: "Did I need this? I think so.
"We had that problem that allowed Nico to win the race, but otherwise, we've had good pace," he added later. "It was relief to continue the trend and for the team to continue to be strong and move forward. That's probably the most impressive thing."
It was a 14th consecutive top-three finish for the defending F1 champion, the third longest ever behind Michael Schumacher (19) and Fernando Alonso (15).
The victory gave Hamilton a 17 point lead on Rosberg going into the next stop in Austria in two weeks. The team's fourth one-two finish pushed it 105 points clear of Ferrari in constructors' standings.
The Ferraris came to Canada with improvements but didn't get much chance to show them off. Poor qualifying and a penalty forced Vettel to start 18th on the grid.
The four-time world champion battled back despite needing an early pit stop and surviving a near collision with Nico Helkenberg's Force India car.
"We didn't get to see Ferrari's true pace, but I think we will in the next races," said Hamilton.
It was a big day for Bottas, who feels Williams is ready to start challenging for at least top-three placings, although he finished more than 40 seconds behind the Mercedes.
"I think we really needed this result," the Finn said. "We know again we are a top team and can fight for podiums."
Felipe Massa's Williams was sixth, Pastor Maldonato was seventh in a Lotus, Hulkenberg was eighth, Daniil Kvyat's Red Bull was ninth and Romain Grosjean's Lotus finished 10th, a spot he held despite drawing a five-second penalty when he bumped Will Stevens' Manor Marussia during a pass.
Both Jenson Button of McLaren Honda and Max Verstappen of Toro Rosso, already starting at the back, served stop-and-go penalties early in the race.