Hamilton hooked up more cleanly away from the start and nosed into Turn 1 first ahead of pole-sitting Bottas, while Charles Leclerc went by his Ferrari teammate Sebastian Vettel to claim third place.
As the midfielders squeezed through the Turn 6 hairpin Toro Rosso's Daniil Kvyat caught a brief rear-end twitch, bouncing off Carlos Sainz's McLaren and then interlocking wheels with Sainz's teammate Lando Norris, who was pitched into the air.
That prompted a brief Virtual Safety Car deployment so that debris - including part of Sainz's front wing - could be cleared.
Hamilton edged away at around half a second a lap in the initial phase of the race while the majority of the frontrunners settled into tyre-conversation mode - all except for Vettel, who was shaping up to pass his teammate. Leclerc, for his part, was told to push harder or give way.
Ferrari quickly firmed up that instruction into a directive to let Vettel by, and Leclerc reluctantly complied at the beginning of lap 11. But despite the swap Vettel made few inroads into the advantage of Bottas, let alone Hamilton, even though he was clearly flirting with his car's limits - even snatching a front-left brake and running wide at the Turn 14 hairpin on lap 13. Leclerc wasted no time in telling his engineer that he, now, was being held up.
As the Mercedes stretched into the distance, fifth-placed Max Verstappen joined the hunt for the podium by pitting for hard tyres on lap 18. That prompted Ferrari to pit Vettel to cover the potential undercut, and indeed when Vettel emerged on his new set of hards he was barely ahead of the Red Bull.
Verstappen made a DRS-assisted pass on the back straight and was ahead into Turn 14, but ran slightly wide and Vettel edged him onto the grass at the exit to reclaim what was now fourth place. Ferrari was now committed to a long stint for Leclerc since he would inevitably leave the pits behind this battle - and when he did stop for hards, five laps after his teammate, he was nearly 11s adrift of Verstappen.
Bottas pitted for hards on lap 22, followed by Hamilton one tour later, and as the world champion departed the pitlane the gap between the two Mercedes had shrunk to 1.5s. But Hamilton stretched his legs again and strung out the gap beyond five seconds, and within 10 laps of pitting his only concern was whether Bottas had set the fastest lap of the race and thereby secured an extra point.
Red Bull moved first to trigger the next rash of stops on lap 36, bringing Verstappen in for fresh mediums. Ferrari responded by pitting Vettel a lap later for similar rubber, and next time round Mercedes brought both Hamilton and Bottas in for mediums as well.
That meant Bottas emerged in third place behind the out-of-sequence Leclerc and had a fight on his hands. For almost two laps Leclerc denied him until Bottas launched a textbook DRS-assisted move into Turn 14.
Once clear, Bottas pulled away as Leclerc fell into the clutches of his own teammate. Ferrari brought Leclerc in for mediums on lap 42 and he was slow out of the box, leaving the pits in fifth place and over 15s behind Verstappen. Though Leclerc tried to chip away at the margin, he reported gearbox issues later in the race and Verstappen remained a distant speck.
Sixth-placed Pierre Gasly had a lonely race in the second Red Bull, running immediately behind his teammate in the opening laps, but it was probably too much to expect him to run 19 laps on the softs. By the time he pitted he was well adrift of the battle with the Ferraris.
With two laps to run, Gasly was in enough space for Red Bull to swap him onto soft tyres for a tilt at the fastest lap. He set personal bests in the first two sectors and went purple in the last to sew up the bonus point.
Renault split its strategy by bringing Nico Hulkenberg in early to swap from soft to hard tyres on lap 12 while leaving Daniel Ricciardo out for a long first stint on the softs. The outcome for Hulkenberg was rendered moot when he was forced to retire five tours later.
Ricciardo then had a relatively uneventful run to seventh as the final three points-paying places became the most hotly contested positions in the race.
Sergio Perez combined a strong start - he gained four places on the opening lap - with a 20-lap first stint on mediums to secure eighth place from 12th on the grid. Behind him Kimi Raikkonen also ran a long first stint on mediums, fell behind the early-stopping Haas entries when he did stop, then made the best of fresher rubber to go by both Kevin Magnussen and Romain Grosjean to claim ninth.
Magnussen and Grosjean started ninth and 10th but stopped to get rid of their soft Pirellis early, before the race was 10 laps old, and lost track position as a result. After dropping behind Raikkonen, Grosjean ran tenth ahead of Magnussen in the second stint until both cars made early second stops.
This gave the Haas drivers further work to do to overhaul the likes of Lance Stroll and Alexander Albon. Grosjean came close to getting the job done but had to obey blue flags for Leclerc on the final lap, enabling Albon to hold on and secure the final point for Toro Rosso.
|4||Max Verstappen||Red Bull||Honda||56||27.627||27.627|
|6||Pierre Gasly||Red Bull||Honda||56||1'29.307||1'29.307|
|7||Daniel Ricciardo||Renault||Renault||55||1 lap||1 Lap|
|8||Sergio Perez||Racing Point||Mercedes||55||1 lap||1 Lap|
|9||Kimi Raikkonen||Alfa Romeo||Ferrari||55||1 lap||1 Lap|
|10||Alex Albon||Toro Rosso||Honda||55||1 lap||1 Lap|
|11||Romain Grosjean||Haas||Ferrari||55||1 lap||1 Lap|
|12||Lance Stroll||Racing Point||Mercedes||55||1 lap||1 Lap|
|13||Kevin Magnussen||Haas||Ferrari||55||1 lap||1 Lap|
|14||Carlos Sainz Jr.||McLaren||Renault||55||1 lap||1 Lap|
|15||Antonio Giovinazzi||Alfa Romeo||Ferrari||55||1 lap||1 Lap|
|16||George Russell||Williams||Mercedes||54||2 laps||2 Laps|
|17||Robert Kubica||Williams||Mercedes||54||2 laps||2 Laps|
|Daniil Kvyat||Toro Rosso||Honda||41|