Hamilton headed Bottas in qualifying but lost his advantage almost immediately after a slower getaway.
He was able to resist pressure from Sebastian Vettel and latterly Max Verstappen to complete Mercedes' one-two, while Verstappen claimed Honda's first podium finish since the 2008 British GP on its maiden race with Red Bull.
Bottas outdragged Hamilton into Turn 1 and was left untroubled for the entirety of the grand prix, aided by Mercedes being forced to react to an early Vettel pitstop and switch Hamilton to an inferior strategy.
Vettel stopped on lap 14 of 58, with Mercedes bringing in Hamilton one lap later to protect against the Ferrari's fresh-tyre advantage.
However, neither was able to lap as quickly on new medium tyres as Bottas on old softs, which allowed Bottas, Verstappen and Charles Leclerc to run several laps longer.
Bottas finally stopped eight laps after his teammate and continued unimpeded throughout the race, crushing the opposition by 20.8 seconds to win for the first time since the 2017 season finale in Abu Dhabi and produce the perfect response to his winless 2018 season.
The gap was flattered slightly by Hamilton having to nurse his mediums to the end to preserve second place, but the five-time world champion saw off Vettel in the middle phase of the grand prix.
Hamilton then kept Verstappen at arm's length once the Dutchman had cleared Vettel with ease around the outside of Turn 3 on lap 31.
Verstappen hounded the Mercedes, running 1.5s behind for most of the second half of the race, before running wide at Turn 1 and bouncing over the grass.
He dropped back, continued to push and set a new fastest lap of the race in the closing stages but was unable to overhaul Hamilton.
However, Bottas hit back on the penultimate tour to steal the first bonus point of the season and take his haul from the opening race to 26 points.
Ferrari's pre-season promise translated into fourth and fifth in Melbourne as Vettel slipped further and further back, eventually only finishing just ahead of Leclerc.
Vettel finished 50s behind race winner Bottas, with Leclerc – who had a trip across the gravel at Turn 1 earlier in the race – only fifth after appearing to back off once he caught his new teammate.
Kevin Magnussen had a lonely run to sixth to earn best-of-the-rest honours for Haas and avenge the team's horror show in Melbourne one year ago.
He shook off the race-long attention of Renault's Nico Hulkenberg, who slipped back in the final part of the race and only just held on at the head of a five-car train.
Kimi Raikkonen was next up, finishing eighth on his Alfa Romeo debut, with Racing Point's Lance Stroll also scoring points on his first start for a new team.
Returning Toro Rosso Daniil Kvyat capped his F1 comeback with a point for 10th, keeping the second Red Bull of Pierre Gasly at bay.
Gasly started near the back after a qualifying blunder from Red Bull and emerged from a late pitstop ahead of Kvyat, but was passed by the Russian into Turn 3 on his out-lap.
Qualifying surprise Lando Norris was unable to grab points on his F1 debut but did finish top rookie in 12th as McLaren's pace dropped come race day.
There were three retirements: Carlos Sainz the first of the new season after a fiery exit in his McLaren-Renault.
Home hero Daniel Ricciardo was next to go, a precautionary non-finisher after breaking his front wing taking to the grass on the run to the first corner.
Romain Grosjean stopped on track in his Haas after running in the points early on before slipping outside the top 10 because of a slow pitstop.