Heim  >  Artikel  >  Datenbank  >  So lösen Sie das Problem, dass MySQL nach dem Verschieben des Datenverzeichnisses nicht startet

So lösen Sie das Problem, dass MySQL nach dem Verschieben des Datenverzeichnisses nicht startet

WBOY
WBOYnach vorne
2023-05-26 10:13:052484Durchsuche

Hintergrundübersicht

Da das MySQL-Datenverzeichnis bei der Installation der Datenbank im Stammverzeichnis abgelegt wurde, reicht der Speicherplatz jetzt nicht mehr aus. Ich möchte das Datenverzeichnis über mv in andere Verzeichnisse verschieben, aber nachdem ich das Datenverzeichnis in andere Daten verschoben habe Verzeichnisse ist der Start der Datenbank fehlgeschlagen.

Wiederkehr des Problems

Dieser Test basiert auf MySQL 8.0.31

1. Schließen Sie die Datenbank

mysql> shutdown;
Query OK, 0 rows affected (0.02 sec)

2. Verschieben Sie das gesamte MySQL-Datenverzeichnis in ein anderes Verzeichnisse über mv

shell> pwd
/mysql80

4. Ändern Sie den Eigentümer und die Gruppe

shell>  mv /mysql80 /data
shell>  cd /data/mysql80/svr
shell>  ln -s mysql-8.0.31-linux-glibc2.12-x86_64 mysql

5. Ändern Sie die Adresse des Datenverzeichnisses in der Konfigurationsdatei

shell> chown -R mysql.mysql /data

6. Starten Sie die Datenbank

shell> sed -i 's#/mysql80#/data/mysql80#g' my5001.cnf

Zu diesem Zeitpunkt ist das Starten der Datenbank fehlgeschlagen, und Das Fehlerprotokoll meldete den folgenden Fehler:

mysqld: Datei '/mysql80 /dbdata/data5001/log/binlog.000012' nicht gefunden (Betriebssystemfehler Nr. 2 – Keine solche Datei oder kein solches Verzeichnis)
2023-02-27T10:38: 09.240576+08:00 0 [FEHLER] [MY-010958] [Server] Protokolldatei konnte nicht geöffnet werden Tc-Protokoll wird nicht initialisiert

2023-02-27T10:38:09.240718+08:00 0 [FEHLER] [MY-010119] [Server] wird abgebrochen
2023-02-27T10:38:10.548605+08:00 0 [System] [MY-010910] [Server] /data/mysql80/svr/mysql/ bin/mysqld: Herunterfahren abgeschlossen (mysqld 8.0.31) MySQL Community Server – GPL.


Der hier gemeldete Fehler zeigt, dass der binlog kann nicht gefunden werden und die Fehlermeldung zeigt, dass das Verzeichnis <code>binlog immer noch dasselbe ist wie zuvor, aber das Verzeichnis in der Konfigurationsdatei wurde geändert

shell> /data/mysql80/svr/mysql/bin/mysqld_safe \
--defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &
7

Durch die Suche wurde schließlich festgestellt, dass in der Datei binlog jeder binlog gespeichert ist. Der Pfad hier ist immer noch der vorherige Pfad Der Inhalt lautet wie folgt: binlog文件,并且报错显示的binlog的目录还是之前的,但是配置文件中的目录已经修改

shell> grep &#39;log-bin&#39; my5001.cnf 
log-bin=/data/mysql80/dbdata/data5001/log/binlog
log-bin-trust-function-creators

7.问题解决

最后通过查找发现 binlog.index 文件中存放着每个binlog文件的绝对路径地址,这里的路径还是之前路径,内容如下:

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

修改binlog.index文件中binlog的绝对路径:

shell> sed -i &#39;s#/mysql80#/data/mysql80#g&#39; 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

8.启动数据库

shell> /data/mysql80/svr/mysql/bin/mysqld_safe 
--defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &

数据库启动成功。

9.作为从节点

需要注意的是,如果该实例还作为其他实例的从节点,还需要设置 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

10.问题解决

修改 relaylog.index

sed -i &#39;s#/mysql80#/data/mysql80#g&#39; relaylog.index

Ändern Sie den absoluten Pfad von binlog in der Datei binlog.index:

# 重启实例
mysql> restart;
# 启动主从复制
mysql> start replica;

8. Datenbank starten

rrreee

Die Datenbank wurde erfolgreich gestartet. 🎜🎜9. Als Slave-Knoten🎜🎜Es ist zu beachten, dass, wenn die Instanz auch als Slave-Knoten für andere Instanzen verwendet wird, auch der absolute Pfad des Relay-Protokolls in der Datei „relaylog.index“ festgelegt werden muss Folgender Fehler wird gemeldet: Fehlerprotokollfehler:🎜 🎜🎜2023-02-27T15:56:55.224372+08:00 0 [ERROR] [MY-010599] [Repl] log /mysql80/dbdata/data5002/log/relaylog. 000002 im Index aufgeführt, konnte jedoch nicht angegeben werden. 56:55.226571+08:00 0 [ERROR] [MY-010426] [Repl] Slave: Die Master-Info-Struktur für Kanal konnte nicht initialisiert werden. Der Datensatz ist möglicherweise noch in der Tabelle „mysql.slave_master_info“ vorhanden. Löschen Sie ihn möglicherweise .🎜2023-02-27T15:56:55.226622 +08:00 0 [FEHLER] [MY-010529] [Repl] Replikationsinformations-Repositorys konnten nicht erstellt oder wiederhergestellt werden.🎜🎜🎜Ein Fehler wird auch beim Ausführen der Startreplik gemeldet: 🎜🎜... [ERROR] [MY-013124] [Repl] Slave-SQL für Kanal '': Slave konnte die Relay-Log-Informationsstruktur aus dem Repository nicht initialisieren, Fehlercode: MY-013124🎜🎜🎜10 Problem gelöst🎜🎜Ändern Sie den absoluten Pfad des Relays Melden Sie sich in der Datei relaylog.index an🎜 rrreee🎜Starten Sie die Datenbank neu und starten Sie die Master-Slave-Replikation🎜rrreee🎜Zu diesem Zeitpunkt kehrt die Master-Slave-Replikation zum Normalzustand zurück. 🎜

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass MySQL nach dem Verschieben des Datenverzeichnisses nicht startet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen