Den eneste måde dette kan ske (i en klientsession) - og sådan som det sker for mig fra tid til anden - er, at du bliver bidt af en kort timeout på klientforbindelsen. Det går sådan her:
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)
Du skal initialisere dine variabler og bruge dem i en sammenhængende klientsession. Når sessionen går væk, mister du alle dine variabler.
Den anden forklaring, som påpeget af andre i kommentarerne, er, at kommandoerne rammer serveren fra forskellige forbindelser; dit problem er muligvis ikke en timeout, men at du stammer fra kommandoerne "SET ..." og "SELECT ..." i forskellige forbindelser. Brugervariabler deles ikke på tværs af forskellige forbindelser.