Chelsea took the lead before the break when Fernando Torres finished smartly.
But Branislav Ivanovic was sent off moments later for a reckless challenge on Aleksandar Kolarov.
City took advantage as Yaya Toure swept home, Carlos Tevez hit the top corner and Samir Nasri volleyed in and, despite Ryan Bertrand’s late tap-in, City held on.
Sergio Aguero could have made it 4-2 a minute from the end, but he missed the target from seven yards out with the goal at his mercy.
In a lively season opener in which plenty of players were eager to make their mark, Premier League winners City appeared sharper than their opponents, who won both the FA Cup and Champions League last season.
Victory sealed City’s first victory in this fixture for 40 years, having won the FA Charity Shield in 1972.