Barca held by vibrant Villarreal
The champions have 40 points from 16 matches but second-placed Real can overhaul them on goal difference with victory at Osasuna on Sunday.
Barca coach Pep Guardiola had given World Player of the Year Lionel Messi a few extra days holiday and the Argentina forward was watching from the stands at a rain-soaked Nou Camp.
After presenting the six trophies won in 2009 to their fans before kickoff, Barcelona took the lead in the seventh minute and appeared on track for an eighth home win of the campaign.
Thierry Henry lashed a superb first-time shot against the bar and Pedro controlled the rebound on his chest before arrowing a drive into the far corner of the net.
The visitors worked well to deny space to Barca's creative midfielders and David Fuster had a chance to level just before the half hour but his downward header bounced just over the bar.
Fuster made amends six minutes after the break when he met Cani's cross at the far post and beat goalkeeper Victor Valdes with a low half-volley.
With the rain lashing down, Villarreal keeper Diego Lopez palmed away a curling effort from substitute Andres Iniesta in the 65th minute and Barca captain Carles Puyol cleared a Giuseppe Rossi effort off the line in the 87th.
Guardiola had warned his all-conquering side against complacency before the match and said the result would make the players stronger and more committed.
"It was a very tough game, returning from the holidays to play one of the best teams like Villarreal," he told a news conference.
The team needed to "fine-tune a few things" and recuperate for Tuesday's King's Cup last 16, first leg match against Sevilla, he added.
Elsewhere on Saturday, substitute Nikola Zigic netted in the third minute of added time to give Valencia a 1-0 win over Espanyol and lift them into third place above Sevilla.
Valencia have 32 points, two ahead of the Andalusians, who squandered the lead and conceded a goal in the fourth minute of added time to lose 2-1 at Atletico Madrid.
Sevilla also had midfielder Aldo Duscher dismissed for a second yellow card in the 73rd minute.
Renato had put them in front just before the break when he looped a header over Atletico keeper Sergio Asenjo from Diego Perotti's corner.
Atletico levelled when an attempted clearance by Sevilla keeper Andres Palop three minutes into the second half cannoned back off defender Ivica Dragutinovic into the empty net.
With a draw looking likely, captain Antonio Lopez burst into the penalty area to send a firm header into the net for his side's first home win since the end of November.
Injured Spain internationals David Silva and Pablo Hernandez were missing for Valencia at the Mestalla and the home team initially struggled to create chances.
La Liga top scorer David Villa raced through the Espanyol defence in the 54th minute but goalkeeper Carlos Kameni blocked his low shot with an outstretched leg.