The Mercedes driver laid the groundwork for his victory with one of his greatest pole laps in yesterday's rain-hit qualifying session.
Ferrari's miserable start to the season continued after Charles Leclerc punted team-mate Sebastian Vettel out of the race on the opening lap. Both drivers were forced to retire.
Alexander Albon finished fourth ahead of Lando Norris, who moved up three positions in an impressive final two laps. Bottas is four points clear in the championship following his win here last Sunday.
Hamilton might have finished only fourth in the season opener following, by his own admission, a rather tame display.
But after he took a knee alongside 11 of his drivers before the race - Kevin Magnussen and Racing Point driver Sergio Perez joining last week's cast of six in not kneeling - Hamilton blasted out of his marks from pole and never looked back, winning by 13.7 seconds.
The drama instead took place behind the six-time world champion, with Verstappen just about managing to hold of McLaren's fast-starting Carlos Sainz in second, before the two red cars collided.
Leclerc, starting in 14th, attempted to overtake Vettel at the third corner on the opening lap, but he completely misjudged the move.
Leclerc was launched airborne and out of control after hitting the kerb. He smashed into the unwitting Vettel, ripping off the German's rear wing.
Vettel was forced to park his wounded car in the pits, and while Leclerc attempted to carry on, he was unable to do so following terminal damage sustained in the accident.
The crash here marks the second time in four races that the two Ferrari drivers have collided. Vettel was largely blamed for that incident in Brazil last year, but here it was Leclerc who was at fault.
"I apologised to Seb," said Leclerc, 22. "Excuses are not enough in times like this and I'm just disappointed in myself.
"I have done a very bad job today. I have let the team down. I can only be sorry, even though I know it's not enough. I put all the efforts of the team in the bin."
There were no such worries for Hamilton as he cruised to his 85th win, leaving him only six short of Michael Schumacher's all-time win record. Hamilton is this year bidding to match the German's championship record of seven, too.
While last week's opener was a thrill-a-minute spectacle, there were few flashpoints in Sunday's race.
With Hamilton clear in front, Bottas, who started only fourth following a poor performance in the rain, stayed out longer than his rivals in the hope of usurping Verstappen in the closing stages.
And the move paid off for the Finn, who, sailed past the Dutchman with four laps to run.
Sergio Perez looked set to finish fifth but damaged his front wing after a failed move on Albon in the closing stages. That allowed Norris, who had just moved ahead of Lance Stroll and Daniel Ricciardo, to take fifth in the final yards of the race. Perez finished sixth ahead of Stroll, Ricciardo and Sainz.