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.
Dieser Test basiert auf 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
shell> sed -i 's#/mysql80#/data/mysql80#g' my5001.cnf
2023-02-27T10:38: 09.240576+08:00 0 [FEHLER] [MY-010958] [Server] Protokolldatei konnte nicht geöffnet werden Tc-Protokoll wird nicht initialisiert72023-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 derbinlog< 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ändertshell> /data/mysql80/svr/mysql/bin/mysqld_safe \ --defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &Nach dem Login kopieren
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 'log-bin' my5001.cnf log-bin=/data/mysql80/dbdata/data5001/log/binlog log-bin-trust-function-creators
最后通过查找发现 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 '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
shell> /data/mysql80/svr/mysql/bin/mysqld_safe --defaults-file=/data/mysql80/conf/my5001.cnf --user=mysql &
数据库启动成功。
需要注意的是,如果该实例还作为其他实例的从节点,还需要设置 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
sed -i 's#/mysql80#/data/mysql80#g' relaylog.index
binlog
in der Datei binlog.index
: # 重启实例 mysql> restart; # 启动主从复制 mysql> start replica;
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 Dateirelaylog.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!