Satu-satunya cara ini bisa terjadi (dalam sesi klien) - dan cara itu terjadi untuk saya dari waktu ke waktu - adalah Anda mendapatkan sedikit waktu tunggu singkat pada koneksi klien. Ini seperti ini:
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)
Anda harus menginisialisasi variabel Anda dan menggunakannya dalam sesi klien yang berdekatan. Saat sesi hilang, Anda kehilangan semua variabel Anda.
Penjelasan lainnya, seperti yang ditunjukkan oleh orang lain di komentar, adalah bahwa perintah tersebut mengenai server dari koneksi yang berbeda; masalah Anda mungkin bukan batas waktu, tetapi Anda memulai perintah "SET ..." dan "SELECT ..." dalam koneksi yang berbeda. Variabel pengguna tidak dibagikan di berbagai koneksi.