Playing in England for the first time since their victory over Borussia Dortmund in last season’s final, Pep Guardiola’s side gave City a lesson in relentless attacking to take command of Group D.
A goalkeeping error from Joe Hart helped Franck Ribery give the visitors a seventh-minute lead and they added further goals through Thomas Mueller and Arjen Robben in the second half.
Substitute Alvaro Negredo replied in the 80th minute, before former City player Jerome Boateng saw red for a last-man foul on Yaya Toure, but on the ground where they had crushed derby rivals Manchester United just 10 days ago, City were soundly beaten.
“I’m very happy with the performance and with our game,” said Guardiola.
“We’ve got six points and we’ve taken a good step towards qualifying for the next stage. I think we dominated the game and we dominated possession.”
Bayern’s victory sent them three points clear at the top of the group and consigned City to a first home defeat in Europe since 2008, four days on from an unexpected 3-2 loss at Aston Villa.
City defender Micah Richards said “it felt like they had an extra man” and manager Manuel Pellegrini conceded that his side had been outclassed.
“I think we played really bad,” he said.
“It’s not the team we see every Sunday here in the Premier League and that was I think the worst thing.
“I know Bayern Munich always has possession, but I think it was not a good day for us.”
Guardiola boldly elected to play without a recognised striker, bringing Toni Kroos into his team to replace Mario Mandzukic and deploying Mueller as a ‘false nine’.
Pellegrini handed Richards only his second start of the campaign at right-back, but if the hulking Englishman was selected to help muzzle Ribery, the plan quickly backfired.
David Alaba ran in behind Richards to cross for Robben to head wide in the third minute and moments later, Bayern went ahead.
A sweeping pass from Rafinha found Ribery wide on the left and he brought the ball down, cut inside Jesus Navas, and dispatched a fierce right-foot shot from 25 yards that beat Hart at his near post.
It was another moment to forget for the England goalkeeper, who has committed several blunders since the turn of the year, but his team-mates were faring little better.
With Bayern pressing high, City were unable to get a foot on the ball, leaving Edin Dzeko as a lonely outpost in the visitors’ half and causing rumbles of discontent to roll around the arena.
Save an early header from Richards that Manuel Neuer easily caught, City were almost non-existent as an attacking presence in the first half.
Dzeko headed wide during a succession of City corners early in the second period, but Bayern were soon back on the attack, with Robben seeing a shot deflect wide off Vincent Kompany.
Two goals in the space of three minutes put Bayern out of sight.
They scored their second in the 56th minute, with Mueller ghosting in behind Gael Clichy to bring down Dante’s lofted pass, evade Hart’s star jump, and tuck the ball home.
Moments later, Fernandinho was robbed on halfway by Mueller, who fed Robben, and the Dutchman streaked past Matija Nastasic before beating Hart at his near post.
Hart saved from Robben, Kroos and Ribery thereafter, while Mueller hit the post during a spell of almost nonchalant Bayern supremacy, before City salvaged a measure of pride with a late flurry.
After substitute James Milner tested Neuer with a rising drive, Negredo curled home a fine 80th-minute consolation from the edge of the box.
Boateng was then shown a straight red card by referee Bjorn Kuipers after felling Toure as he bore down on goal, with David Silva hitting the bar from the resulting free-kick, but by then it was too late.