Jediný způsob, jak se to může stát (v relaci klienta) – a jak se to čas od času stává mně – je, že vás zasáhne krátký časový limit na klientském připojení. Jde to takto:
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)
Musíte inicializovat své proměnné a používat je v rámci souvislé klientské relace. Když relace skončí, ztratíte všechny své proměnné.
Další vysvětlení, jak zdůrazňují ostatní v komentářích, je, že příkazy zasahují server z různých připojení; váš problém nemusí být časový limit, ale to, že vytváříte příkazy "SET ..." a "SELECT ..." v různých připojeních. Uživatelské proměnné nejsou sdíleny mezi různými připojeními.