Mysql
釋放低磁碟 PC 上的 mysql 空間
我有一台帶小磁碟的 PC:
Filesystem Size Used Avail Use% Mounted on /dev/root 3.5G 3.1G 249M 93% / devtmpfs 459M 0 459M 0% /dev tmpfs 463M 0 463M 0% /dev/shm tmpfs 463M 36M 428M 8% /run tmpfs 5.0M 8.0K 5.0M 1% /run/lock tmpfs 463M 0 463M 0% /sys/fs/cgroup /dev/mmcblk0p1 63M 25M 38M 40% /boot tmpfs 64M 140K 64M 1% /mnt/ramdisk
我有一個簡單的數據庫,但其中一個表有超過 500 萬行,在這麼小的記錄上佔用了很多:
# ls -lh /var/lib/mysql/datalogger/ total 1.1G ... -rw-rw---- 1 mysql mysql 1.1G Nov 10 09:56 avg_values.ibd ...
我的目標是在沒有佔用太多空間的其他類似電腦上完成(大約在該表中的一半)是執行刪除超過 6 個月的數據的查詢。查詢與案例無關。查詢後,執行
optimize NO_WRITE_TO_BINLOG table avg_values;
釋放ibd
空間。有問題的電腦的問題是——我相信——可用空間非常有限,你不能對這麼大的表執行查詢(我理解是通過記憶體),導致通信不穩定,即使查詢有一個限制:
MariaDB [datalogger]> select * from avg_values limit 10; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 5 Current database: datalogger ERROR 2013 (HY000): Lost connection to MySQL server during query
對於其他較小的表,通常沒有問題(儘管它也表示錯誤):
MariaDB [datalogger]> select * from raw_values; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 5 Current database: datalogger +----+---------------------+-------------------+------+-------+ | id | timestamp | channel | raw | value | +----+---------------------+-------------------+------+-------+ | 1 | 2021-11-10 09:46:51 | AI1 | 1 | 0.011 | | 2 | 2021-11-10 09:46:51 | AI2 | 1 | 0.011 | | 3 | 2021-11-10 09:46:51 | AI3 | 2 | 0.022 | | 4 | 2021-11-10 09:46:51 | AI4 | 2 | 0.022 | | 5 | 2021-11-10 09:46:51 | pyr1_sensor1_data | 113 | 113 | | 6 | 2021-11-10 09:46:51 | pyr1_body_temp | 42 | 42 | | 7 | 2021-11-10 09:46:51 | pyr2_sensor1_data | NULL | NULL | | 8 | 2021-11-10 09:46:51 | pyr2_body_temp | NULL | NULL | | 9 | 2021-11-10 09:46:46 | AI1 | 1 | 0.011 | | 10 | 2021-11-10 09:46:46 | AI2 | 1 | 0.011 | | 11 | 2021-11-10 09:46:46 | AI3 | 2 | 0.022 | | 12 | 2021-11-10 09:46:46 | AI4 | 2 | 0.022 | | 13 | 2021-11-10 09:46:46 | pyr1_sensor1_data | 115 | 115 | | 14 | 2021-11-10 09:46:46 | pyr1_body_temp | 42 | 42 | | 15 | 2021-11-10 09:46:46 | pyr2_sensor1_data | NULL | NULL | | 16 | 2021-11-10 09:46:46 | pyr2_body_temp | NULL | NULL | | 17 | 2021-11-10 09:46:52 | AI1 | 1 | 0.011 | | 18 | 2021-11-10 09:46:52 | AI2 | 1 | 0.011 | | 19 | 2021-11-10 09:46:52 | AI3 | 2 | 0.022 | | 20 | 2021-11-10 09:46:52 | AI4 | 2 | 0.022 | | 21 | 2021-11-10 09:46:52 | pyr1_sensor1_data | 112 | 112 | | 22 | 2021-11-10 09:46:52 | pyr1_body_temp | 42 | 42 | | 23 | 2021-11-10 09:46:52 | pyr2_sensor1_data | NULL | NULL | | 24 | 2021-11-10 09:46:52 | pyr2_body_temp | NULL | NULL | +----+---------------------+-------------------+------+-------+ 24 rows in set (0.02 sec)
有什麼方法可以執行這些查詢,尤其是使用這個小磁碟來釋放空間?
沒有簡單的方法來優化有限的儲存空間或任何理智的查詢,因為在查詢執行期間您可能會用完空間。你有兩個選擇:
從遠端機器掛載 NFS 驅動器並將 mysql 的 tmpdir 指向它或將 mysql 的 tmpdir 指向 /dev/shm。對此要非常謹慎,並在執行此類操作之前始終進行備份