Hamilton pipped Bottas by 0.199 seconds while Vettel was fifth fastest in the Ferrari, 0.543secs off the pace, BBC Sport reported.
Vettel, who had a spin late in the session, starts the weekend 40 points behind Hamilton, with a maximum of 150 available over the remaining six races.
The Red Bulls of Max Verstappen and Daniel Ricciardo were third and fourth.
They will start from the back of the grid because Red Bull has fitted new Renault engines to both cars and, as it has exceeded the maximum number of engine parts, that means they will receive grid penalties.
Mercedes' pace on a single lap suggested it has an advantage over Ferrari at the start of the weekend, which is bad news for Vettel, who really needs to beat Hamilton to revive his title hopes this weekend.
Vettel set the pace in the first practice session, but he was only 0.33secs quicker than Hamilton despite using the softest hyper-soft tire while the Mercedes was on the ultra-soft.
The time difference between those two tires is in the region of a second – so both sessions told a similar story, of a Mercedes that has a chunk of time over Ferrari.
However, Friday practice times can be misleading, as it is not clear what specification the cars are running in, so it would be premature to draw any conclusions.