Единственият начин това може да се случи (в клиентска сесия) - и начинът, по който се случва при мен от време на време - е да получите кратко време за изчакване на клиентската връзка. Става така:
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)
Трябва да инициализирате променливите си и да ги използвате в рамките на непрекъсната клиентска сесия. Когато сесията изчезне, губите всичките си променливи.
Другото обяснение, както е посочено от други в коментарите, е, че командите удрят сървъра от различни връзки; проблемът ви може да не е изчакване, а че създавате командите "SET ..." и "SELECT ..." в различни връзки. Потребителските променливи не се споделят в различни връзки.