L'unico modo in cui ciò può accadere (in una sessione client) - e il modo in cui mi succede di tanto in tanto - è che tu venga morso da un breve timeout sulla connessione client. Funziona così:
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)
Devi inizializzare le tue variabili e usarle all'interno di una sessione client contigua. Quando la sessione va via, perdi tutte le tue variabili.
L'altra spiegazione, come sottolineato da altri nei commenti, è che i comandi colpiscono il server da connessioni diverse; il tuo problema potrebbe non essere un timeout, ma che stai originando i comandi "SET ..." e "SELECT ..." in connessioni diverse. Le variabili utente non sono condivise tra connessioni diverse.