Maison >base de données >tutoriel mysql >Comment résoudre le problème selon lequel MySQL ne démarre pas après le déplacement du répertoire de données
Étant donné que le répertoire de données MySQL a été placé dans le répertoire racine lors de l'installation de la base de données, l'espace de stockage est désormais insuffisant. Je souhaite déplacer le répertoire de données vers un autre répertoire via mv, mais les données Une fois le répertoire déplacé vers un autre répertoire de données, le démarrage de la base de données échoue.
Ce test est basé sur MySQL 8.0.31
mysql> shutdown; Query OK, 0 rows affected (0.02 sec)
shell> pwd /mysql80
shell> mv /mysql80 /data shell> cd /data/mysql80/svr shell> ln -s mysql-8.0.31-linux-glibc2.12-x86_64 mysql
shell> chown -R mysql.mysql /data#🎜 🎜#5. Modifiez l'adresse du répertoire de données dans le fichier de configuration
shell> sed -i 's#/mysql80#/data/mysql80#g' my5001.cnf
shell> /data/mysql80/svr/mysql/bin/mysqld_safe \ --defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &
mysqld : Fichier '/mysql80/dbdata/data5001/log/binlog.000012' introuvable (OS errno 2 - Aucun fichier ou répertoire de ce type )
2023-02-27T10:38:09.240576 +08:00 0 [ERREUR] [MY-010958] [Serveur] Impossible d'ouvrir le fichier journal.2023-02-27T10:38:09.240657+ 08:00 0 [ERREUR] [MY-010041] [Serveur] ] Impossible d'initialiser le journal tcEnfin, grâce à la recherche, il a été constaté que le chemin absolu de chaque fichier2023-02-27T10:38:09.240718+08:00 0 [ERREUR] [MY-010119] [Serveur ] Abandon
2023-02-27T10:38:10.548605 +08:00 0 [Système] [MY-010910] [Serveur] /data/mysql80/svr/mysql/bin/mysqld : Arrêt terminé (mysqld 8.0. 31) MySQL Community Server - GPL.
#🎜🎜 #
L'erreur signalée ici montre que le fichierbinlog
est introuvable et que le répertoire debinlog code> affiché dans l'erreur est toujours le même qu'avant, mais le répertoire dans le fichier de configuration a été modifié#🎜🎜 #<pre class="brush:bash;">shell> grep &#39;log-bin&#39; my5001.cnf log-bin=/data/mysql80/dbdata/data5001/log/binlog log-bin-trust-function-creators</pre><br>7 Résolution de problèmes
binlog
est stocké dans l'adresse du fichier binlog.index
, le chemin ici est toujours le chemin précédent, le contenu est le suivant : # 🎜🎜#shell> cat binlog.index /mysql80/dbdata/data5001/log/binlog.000001 /mysql80/dbdata/data5001/log/binlog.000002 /mysql80/dbdata/data5001/log/binlog.000003 /mysql80/dbdata/data5001/log/binlog.000004 /mysql80/dbdata/data5001/log/binlog.000005 /mysql80/dbdata/data5001/log/binlog.000006 /mysql80/dbdata/data5001/log/binlog.000007 /mysql80/dbdata/data5001/log/binlog.000008 /mysql80/dbdata/data5001/log/binlog.000009 /mysql80/dbdata/data5001/log/binlog.000010 /mysql80/dbdata/data5001/log/binlog.000011 /mysql80/dbdata/data5001/log/binlog.000012
Modifiez le chemin absolu de binlog
dans le fichier binlog.index
: binlog
文件,并且报错显示的binlog
的目录还是之前的,但是配置文件中的目录已经修改
shell> sed -i 's#/mysql80#/data/mysql80#g' binlog.index shell> cat binlog.index /data/mysql80/dbdata/data5001/log/binlog.000001 /data/mysql80/dbdata/data5001/log/binlog.000002 /data/mysql80/dbdata/data5001/log/binlog.000003 /data/mysql80/dbdata/data5001/log/binlog.000004 /data/mysql80/dbdata/data5001/log/binlog.000005 /data/mysql80/dbdata/data5001/log/binlog.000006 /data/mysql80/dbdata/data5001/log/binlog.000007 /data/mysql80/dbdata/data5001/log/binlog.000008 /data/mysql80/dbdata/data5001/log/binlog.000009 /data/mysql80/dbdata/data5001/log/binlog.000010 /data/mysql80/dbdata/data5001/log/binlog.000011 /data/mysql80/dbdata/data5001/log/binlog.000012
最后通过查找发现 binlog.index
文件中存放着每个binlog
文件的绝对路径地址,这里的路径还是之前路径,内容如下:
shell> /data/mysql80/svr/mysql/bin/mysqld_safe --defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &
修改binlog.index
文件中binlog
的绝对路径:
sed -i 's#/mysql80#/data/mysql80#g' relaylog.index
# 重启实例 mysql> restart; # 启动主从复制 mysql> start replica;
数据库启动成功。
需要注意的是,如果该实例还作为其他实例的从节点,还需要设置 relaylog.index 文件中relay log的绝对路径,否则会报如下错误: 错误日志报错:
2023-02-27T15:56:55.224372+08:00 0 [ERROR] [MY-010599] [Repl] log /mysql80/dbdata/data5002/log/relaylog.000002 listed in the index, but failed to stat.
2023-02-27T15:56:55.224422+08:00 0 [ERROR] [MY-011059] [Repl] Error counting relay log space.
2023-02-27T15:56:55.226571+08:00 0 [ERROR] [MY-010426] [Repl] Slave: Failed to initialize the master info structure for channel ''; its record may still be present in 'mysql.slave_master_info' table, consider deleting it.
2023-02-27T15:56:55.226622+08:00 0 [ERROR] [MY-010529] [Repl] Failed to create or recover replication info repositories.
执行 start replica 时也会报错:
# 客户端报错
mysql> start replica;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
# error log报错
2023-02-27T15:57:53.858798+08:00 8 [ERROR] [MY-013124] [Repl] Slave SQL for channel '': Slave failed to initialize relay log info structure from the repository, Error_code: MY-013124
修改 relaylog.index
rrreee
La base de données a démarré avec succès.
9. En tant que nœud esclave
#🎜🎜# Il est à noter que si cette instance sert également de nœud esclave pour d'autres instances, vous devez également définir le chemin absolu du journal de relais dans le fichier relaylog.index, sinon l'erreur suivante sera signalée : Erreur de journal d'erreur : #🎜🎜##🎜🎜##🎜🎜#2023-02-27T15:56:55.224372+08:00 0 [ERREUR. ] [MY-010599] [Repl] journal / mysql80/dbdata/data5002/log/relaylog.000002 répertorié dans l'index, mais n'a pas réussi à stat.#🎜🎜#2023-02-27T15:56:55.224422+08:00 0 [ERREUR] [MY-011059] [Repl] Erreur de comptage de l'espace du journal du relais.#🎜🎜#2023-02-27T15:56:55.226571+08:00 0 [ERREUR] [MY-010426] [Repl] Esclave : échec de initialisez la structure d'information principale du canal '' ; son enregistrement peut toujours être présent dans la table 'mysql.slave_master_info', pensez à le supprimer.#🎜🎜#2023-02-27T15:56:55.226622+08:00 0 [ERREUR] [ MY-010529] [Repl] Échec de la création ou de la récupération des référentiels d'informations de réplication.#🎜🎜##🎜🎜##🎜🎜#Une erreur sera également signalée lors de l'exécution de la réplique de démarrage : #🎜🎜##🎜🎜##🎜🎜 ## Erreur client #🎜🎜#mysql> démarrer la réplique #🎜🎜#ERROR 1872 (HY000) : l'esclave n'a pas réussi à initialiser la structure des informations du journal de relais à partir du référentiel#🎜🎜## erreur du journal des erreurs#🎜🎜#2023-02- 27T15:57:53.858798+08:00 8 [ERREUR] [MY-013124] [Repl] SQL de l'esclave pour le canal '' : l'esclave n'a pas réussi à initialiser la structure des informations du journal de relais à partir du référentiel, code d'erreur : MY-013124#🎜🎜## 🎜🎜##🎜🎜#10.Solution du problème#🎜 🎜##🎜🎜#Modifier le chemin absolu du journal du relais dans le fichierrelaylog.index
#🎜🎜#rrreee#🎜🎜#Redémarrer le base de données et démarrez la réplication maître-esclave#🎜🎜#rrreee#🎜🎜 #À ce stade, la réplication maître-esclave revient à la normale. #🎜🎜#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!