Franck Ribery gave Juergen Klinsmann’s side a faint hope with a coolly taken goal in the 47th minute, sending Barcelona goalkeeper Victor Valdes to ground with a smart dummy, before lifting the ball over him into the top corner.
But Seydou Keita unleashed a 73rd-minute piledriver to level the scores on the night and send Pep Guardiola’s side through after a slick exchange between Samuel Eto’o and Andres Iniesta inside the Bayern box.
Barcelona were good value for regaining parity after extended spells of possession in which the German side had no answer to their opponent’s tight control and quick passing in around their box.
Thierry Henry did not recover sufficiently from a virus to be given a starting berth, with the Frenchman confined to the bench, but Barcelona did not miss having another forward, holding a 4-0 aggregate lead from the first leg.
But as early as the fifth minute, Bayern had an opportunity to get themselves back in the tie; Luca Toni missed a free header with the ball directed with pin-point precision by Jose Sosa from the right, and the Italian completely unmarked. Then a minute later Toni was more clinical, firing his shot past Valdes from close-range, only to see the offside flag raised by the linesman as he was about to wheel away in celebration.
It was to be a frustrating night for the Italian, who was well contained by Gerard Pique and Carlos Puyol, and found clean-cut chances limited after his earlier aberration.
Iniesta and Xavi were their usual inventive selves, and Iniesta foraged a path into the Bayern penalty area from the left wing, but his pass inside to Eto’o was mis-controlled by the striker, who squandered what would have been a decent shooting chance in the 20th minute.
A decent chance presented itself to Eto’o who bustled his way through on goal, but just as he looked to slot his shot past Hans-Joerg Butt, Phillip Lahm made a good sliding block.
In the 40th minute, Ribery cut inside to collect a pass from Ze Roberto, before unleashing a fierce drive, but it narrowly drifted past Valdes’s near post as the frustration grew around the Allianz Arena.
Four bookings reflected a scrappy and fragmented first half of football, but Bayern’s urgency to get back into the tie could not be doubted; their composure in the final third was however lacking.
But Ribery showed what was required two minutes after the break; the winger collected a neat pass from Ze Roberto, before showing real composure in fooling Valdes by pretending to strike earlier, before crisply placing his shot over the keeper’s body.
Barcelona came close to equalising through Lionel Messi five minutes later, as a deep ball from Daniel Alves almost found the forward at the back post, but Lucio somehow cleared from under him.
A minute later, Iniesta went down in the Bayern box looking for a penalty, but the referee waved play on, with Christian Lell left looking bewildered by the Barcelona midfielder’s antics. An impeccably-timed sliding tackle from the excellent Lucio denied Eto’o from equalising as the striker was about to shoot from inside the Bayern box as the home side held on valiantly to their lead.
The Brazilian defender was an immense presence at the back for the hosts, with a string of fine challenges and a combination of power and pace which left Eto’o without many opportunities in front of goal.
But it was not to last, as Barcelona finally got the goal their possession deserved: Keita, who was loitering on the edge of the box, unleashed a thunderous drive from the edge of the box after neat play from Iniesta and Eto’o to level the scores in the 73rd minute.
As full-time drew closer, both managers made a changes, but it was too late for Klinsmann and his Bayern side, who will be left to rue their thrashing in the first leg at the Nou Camp. Guardiola’s Barcelona will now face Chelsea in the semi-finals.