Nota: MySQL (5.6.6 dan ke atas), innodb_file_per_table didayakan.
1.1. Langkah operasi:
0 Pelayan sasaran mencipta struktur jadual yang sama
1 Pelayan destinasi: ALTER TABLE t BUANG RUANG MEJA;
2 JADUAL t UNTUK EKSPORT;
3 Salin fail t.ibd, t.cfg dari pelayan sumber ke pelayan destinasi
4 RUANG MEJA IMPORT;
Pindahkan jadual test_purge di bawah perpustakaan burn_test dalam [mysql5711] dalam beberapa keadaan ke jadual test_purge di bawah perpustakaan burn_test2 dalam [mysql57112]
1. Cipta ruang jadual pada pelayan sasaran
-- pelayan sumber [mysql5711]
mysql> +--- -+------+
| a |+----+
| 1 |
| |.
| |
+----+------+
8 baris dalam set (0.01 saat)
-- pelayan sasaran [mysql57112]
--
- - test_purge dalam sasaran Ia tidak wujud pada pelayan, buat jadual dahulu
mysql> BUAT JADUAL `test_purge` (
`a` int(11) BUKAN NULL AUTO_INCREMENT,
`b` int(11 ) NULL LALAI,
KUNCI UTAMA (`a`),
) ENGINE=InnoDB AUTO_INCREMENT=11 CARSET lalai=utf8mb4;
Soalan OK, 0 baris terjejas (0.16 saat)
2. Semak selepas penciptaan
#
# Pelayan sasaran
#
[root@MyServer burn_test_2]> rw-r-- ---. 1 mysql mysql 8578 21 Mac 10:31 test_purge.frm # Struktur jadual
-rw-r----- 1 mysql mysql 57344 21 Mac 10:31 test_purge.ibd #. Ruang jadual, perlu lulus DISCARD memadam fail ruang jadual
ALTER TABLE test_purge BUANG RUANG MEJA; untuk menyimpan fail test_purge.frm dan memadam test_purge.ibd
3 >
-- Pelayan sasaran
mysql> ubah jadual test_purge buang ruang jadual;
Soalan OK, 0 baris terjejas (0.04 saat)
mysql> ------ --------------+
| Tables_in_burn_test_2 |
+------------------. -----+
|test_purge |
+----------------------+2 baris dalam set (0.00 saat)
mysql> pilih * daripada test_purge;ERROR 1814 (HY000): Tablespace telah dibuang untuk jadual 'test_purge'
[root@MyServer burn_test_2]>
-rw-r -----. 1 mysql mysql 8578 Mac 21 10:31 test_purge.frm
1.2.2 Eksport ruang jadual
1 perintah eksport untuk mengeksport ruang jadual (pada masa yang sama Tambah kunci baca)
-- Pelayan sumber
mysql> jadual ini
Pertanyaan OK, 0 baris terjejas (0.00 saat)
2 Salin fail cfg dan fail ibd yang dieksport ke pangkalan data pelayan sasaran
#
# Pelayan sumber
-rw-r----- 1 mysql mysql 462 Mac 21 10:58 test_purge.cfg # Selepas eksport, fail tambahan mengandungi beberapa maklumat metadata.
-rw-r -----. 1 mysql mysql 8578 Mac 4 15:41 test_purge.frm
[root@MyServer burn_test]> cp test_purge.cfg test_purge.ibd /data/mysql_data/5.7.11_2/burn_test_2/ # Salin ruang jadual dan fail cfg dari jauh (demonstrasi berbilang contoh tempatan nama perpustakaan di sini berbeza)
3 Selepas mengeksport ruang jadual, buka kuncinya secepat mungkin
-- Pelayan sumber
mysql> mungkin
Pertanyaan OK, 0 baris terjejas (0.00 saat)
Nota: Pastikan anda menyalin fail cfg dan ibd sebelum membuka kunci, kerana apabila membuka kunci, fail cfg akan dipadamkan
# Log pada sumber pelayan
[Nota] InnoDB: Menghentikan pembersihan # Sebenarnya hentikan pembersihan , cuma cari jadual ujian untuk eksport
[Nota] InnoDB: Menulis metadata jadual ke './burn_test/test_purge.cfg'
[Nota] InnoDB: Jadual `burn_test`.`test_purge` disiram ke cakera
[Nota] InnoDB: Memadam fail meta-data './burn_test/test_purge.cfg' # Selepas membuka kunci jadual, fail dipadamkan secara automatik
[Nota] InnoDB: Menyambung semula pembersihan # Selepas membuka kunci, pulihkan benang pembersihan
#
# Pelayan sasaran#[root@MyServer burn_test_2]> chown mysql.mysql test_purge.cfg test_purge .ibd
5. >mysql> alter table test_purge import tablespace -- import ruang jadual
Soalan OK, 0 baris terjejas (0.24 saat)
mysql> 🎜>+----+------+
| a |
+----+------
| 1 | |.. 30 |
| |. 100 |
+----+----- -+
8 baris dalam set (0.00 saat)
# Maklumat muncul dalam ralat.log
InnoDB: Mengimport ruang jadual untuk jadual 'burn_test/test_purge' yang telah dieksport daripada hos 'MyServer'
Nota:
Nama jadual mestilah sama Selepas ujian di atas, nama perpustakaan boleh berbeza
Kaedah ini juga boleh digunakan untuk sandaran dan pemulihan jadual partition
Atas ialah kandungan terperinci Contoh analisis pemindahan ruang jadual dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!