De enige manier waarop dit kan gebeuren (in een clientsessie) - en zoals het bij mij van tijd tot tijd gebeurt - is dat je een korte time-out krijgt op de clientverbinding. Het gaat als volgt:
mysql> set @a = 10;
mysql> [wait for N+1 minutes, where N is the client timeout]
mysql> select @a;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
U moet uw variabelen initialiseren en gebruiken binnen een aaneengesloten clientsessie. Wanneer de sessie stopt, verlies je al je variabelen.
De andere verklaring, zoals door anderen in de opmerkingen is aangegeven, is dat de opdrachten de server vanuit verschillende verbindingen raken; uw probleem is misschien niet een time-out, maar dat u de commando's "SET ..." en "SELECT ..." in verschillende verbindingen start. Gebruikersvariabelen worden niet gedeeld tussen verschillende verbindingen.