Maison > Article > base de données > Exemple d'analyse du transfert d'espace table dans MySQL
Description : MySQL (5.6.6 et supérieur), innodb_file_per_table est activé.
1.1. Étapes de l'opération :
0. Créez la même structure de table sur le serveur cible
1. Serveur de destination : ALTER TABLE t DISCARD TABLESPACE ;
2. Serveur source : FLUSH TABLES t FOR EXPORT ;
3. le serveur source .ibd, t.cfg vers le serveur de destination
4. Serveur source : UNLOCK TABLES ;
5. Serveur de destination : ALTER TABLE t IMPORT TABLESPACE ;
Démonstration
Test_purge sous la bibliothèque burn_test en multi- instance [mysql5711], transférée vers la table test_purge sous la bibliothèque burn_test2 dans [mysql57112]
1.2.1 Préparation
1 Créez un espace table sur le serveur cible
-- serveur source [mysql5711]
mysql>. ; sélectionnez * dans burn_test .test_purge;
+----+------+
| a |
+----+------+
| 3 | 30 |
| 4 | 40 |
| 5 | 50 |
+----+--- ---+
8 lignes dans l'ensemble (0,01 sec)
--Serveur cible [mysql57112]
--
-- test_purge n'existe pas sur le serveur cible, créez d'abord la table
mysql>
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
UNIQUE KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT= 11 DEFAULT CHARSET=utf8mb4 ;
Requête OK, 0 ligne affectée (0,16 sec)
2. Vérifiez après la création
#
# Serveur cible
#
-rw-r-----.1 mysql mysql 57344 21 mars 10:31 test_purge.ibd # Espace de table dont vous avez besoin pour passer DISCARD à l'espace table Suppression du fichier
ALTER TABLE test_purge DISCARD TABLESPACE; signifie conserver le fichier test_purge.frm et supprimer test_purge.ibd
3 Tongpi supprimer Supprimer le fichier ibd
--Serveur cible
mysql> table test_purge supprimer le tablespace ;
mysql> afficher les tables ;
+-----------------------+| Tables_in_burn_test_2 |
+--- --------------------+| test_backup1 |
| test_purge |
+------------ ------ ----+
2 lignes dans l'ensemble (0,00 sec)
mysql> sélectionnez * dans test_purge;
ERREUR 1814 (HY000) : l'espace de table a été supprimé pour la table 'test_purge'
[root@MyServer burn_test_2 ]> ll | grep test_purge
-rw-r-----.1 mysql mysql 8578 21 mars 10:31 test_purge.frm
Exporter l'espace table
1. commande pour exporter l'espace table (en même temps Ajouter un verrou en lecture)
-- Serveur source
Requête OK, 0 ligne affectée (0,00) sec)
2. Exportez le fichier cfg et le fichier ibd, copiez-les dans la base de données du serveur cible
# serveur source
#[root@MyServer burn_test]> --.1 mysql mysql 462 21 mars 10 :58 test_purge.cfg # Après l'exportation, le fichier supplémentaire contient des informations de métadonnées
-rw-r----- 1 mysql mysql 8578 4 mars 15:41 test_purge.frm
. -rw-r- ----.1 mysql mysql 57344 5 mars 15:28 test_purge.ibd
[root@MyServer burn_test]> cp test_purge.cfg test_purge.ibd /data/mysql_data/5.7.11_2/burn_test_2/ # Copiez l'espace table et le fichier cfg, veuillez utiliser scp à distance (démonstration multi-instance locale, le nom de la bibliothèque ici est différent)
3 Après avoir exporté l'espace table, déverrouillez-le dès que possible
-- Serveur source
mysql> déverrouiller les tables ; -- Déverrouillez-le dès que possible
Requête OK, 0 ligne affectée (0,00 sec)
Remarque : assurez-vous de copier les fichiers cfg et ibd avant le déverrouillage, car une fois déverrouillé, le fichier cfg sera supprimé
# Journaux sur le serveur source
[Note] InnoDB : Écriture des métadonnées de la table dans './burn_test/test_purge.cfg'
[Note] InnoDB : Table `burn_test`.`test_purge` vidé sur le disque[Note] InnoDB : Suppression du fichier de métadonnées './burn_test/test_purge.cfg' # Après avoir déverrouillé la table, le fichier est automatiquement supprimé
[Note] InnoDB : Reprise de la purge # Après le déverrouillage, restaurez le thread de purge
4. Autorisations pour modifier le fichier cfg et le fichier ibd sur le serveur cible
#
# Serveur cible
#
[root@MyServer burn_test_2]> ibd
5. Exécutez la commande d'importation sur le serveur cible Espace table
-- Serveur cible
--
mysql> alter table test_purge import tablespace; -- Importer l'espace table
Requête OK, 0 ligne affectée (0,24 sec)
mysql> select * from test_purge -- Peut lire à partir des données copiées depuis le serveur source
+----+------+
| a b |
+----+------+
| 10 |
| 3 | 30 |
| 5 | 50 |
| 7 | 70 |
| ----+----- -+
8 lignes dans l'ensemble (0,00 sec)
# Informations apparaissant dans error.log
InnoDB : importation d'un tablespace pour la table 'burn_test/test_purge' qui a été exportée depuis l'hôte 'MyServer'
Remarque :
Les noms des tables doivent être les mêmes. Après le test ci-dessus, les noms des bibliothèques peuvent être différents
Cette méthode peut également être utilisée pour la sauvegarde et la récupération des tables de partition# 🎜🎜#
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!