Maison  >  Article  >  base de données  >  Exemple d'analyse du transfert d'espace table dans MySQL

Exemple d'analyse du transfert d'espace table dans MySQL

WBOY
WBOYavant
2023-05-27 12:22:061127parcourir

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>

`a` int( 11) NON NULL AUTO_INCREMENT,

`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
#

[root@MyServer burn_test_2]> ---- -.1 mysql mysql 8578 21 mars 10:31 test_purge.frm # Structure de la table

-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 ;

Requête OK, 0 ligne affectée (0,04 sec)

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

mysql> vider la table test_purge pour l'exportation -- Ajouter en fait un verrou en lecture à cette table

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 : Arrêt de la purge # En fait, arrêtez la purge, trouvez simplement une table de test pour l'exportation

[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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer