PSG was initially drawn against Manchester United on Monday, throwing up a tantalising encounter between Messi and Cristiano Ronaldo.
However, a technical error meant the draw had to take place again and while Messi will not meet Ronaldo just yet, the Barcelona great will go up against his former club's Clasico rival.
Having finished second in Group A behind Manchester City, who were handed a favourable tie against Sporting CP, PSG will host Madrid in the first leg in February before visiting the Santiago Bernabeu in March.
That means Mbappe, who is a high-profile target for Madrid and could well have already signed a pre-contract agreement with Los Blancos by the time these fixtures roll around, will go up against his suitors.
It also sees Madrid legend Ramos go up against his old club, and it is the same story for Madrid boss Carlo Ancelotti, who coached PSG from 2011 to 2013.
United, on the other hand, will face Atletico Madrid, who had initially been due to play Bayern Munich. The Bundesliga giant has been drawn against Salzburg.
Liverpool may well lament its luck. Salzburg had been its original opponents, but Jurgen Klopp's team now have to prepare for a tie against Serie A champion Inter - albeit it made light work of the Nerazzurri's rivals Milan in the group stage.
Coincidentally, holder Chelsea was again drawn against Lille, having been set a tie with the Ligue 1 champions during the initial draw.
Villarreal will take on Juventus and Ajax go up against Benfica.
Champions League last 16 draw in full:
Salzburg v Bayern Munich
Sporting CP v Manchester City
Benfica v Ajax
Chelsea v Lille
Atletico Madrid v Manchester United
Villarreal v Juventus
Inter v Liverpool
PSG v Real Madrid