Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

WBOY
Freigeben: 2023-05-26 10:13:05
nach vorne
2470 Leute haben es durchsucht

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)
Nach dem Login kopieren

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

shell> pwd
/mysql80
Nach dem Login kopieren

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
Nach dem Login kopieren

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

shell> chown -R mysql.mysql /data
Nach dem Login kopieren

6. Starten Sie die Datenbank

shell> sed -i 's#/mysql80#/data/mysql80#g' my5001.cnf
Nach dem Login kopieren

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< Die Datei /code> 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 &
Nach dem Login kopieren
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
Nach dem Login kopieren

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
Nach dem Login kopieren

修改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
Nach dem Login kopieren

8.启动数据库

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

数据库启动成功。

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
Nach dem Login kopieren

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

# 重启实例
mysql> restart;
# 启动主从复制
mysql> start replica;
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!