>데이터 베이스 >MySQL 튜토리얼 >데이터 디렉터리 이동 후 MySQL이 시작되지 않는 문제를 해결하는 방법

데이터 디렉터리 이동 후 MySQL이 시작되지 않는 문제를 해결하는 방법

WBOY
WBOY앞으로
2023-05-26 10:13:052525검색

백그라운드 개요

데이터베이스 설치시 MySQL 데이터 디렉터리가 루트 디렉터리에 위치했기 때문에 이제 저장공간이 부족하여 mv를 통해 데이터 디렉터리를 다른 디렉터리로 이동하고 싶은데, 데이터 디렉터리를 다른 데이터로 이동한 후입니다. 디렉터리, 데이터베이스 시작에 실패했습니다.

문제 재발

이 테스트는 MySQL 8.0.31

1을 기반으로 합니다. 데이터베이스를 닫습니다

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

2. 현재 데이터 디렉터리의 위치를 ​​봅니다.

shell> pwd
/mysql80

3. 전체 MySQL 데이터 디렉터리를 다른 디렉터리로 이동합니다. mv

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

를 통해 디렉터리를 수정합니다. 4. 소유자 및 그룹을 수정합니다.

shell> chown -R mysql.mysql /data

5. 구성 파일에서 데이터 디렉터리의 주소를 수정합니다.

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

6. 데이터베이스를 시작합니다.

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

이때 데이터베이스 시작에 실패했습니다. 오류 로그에서 다음 오류를 보고했습니다.

mysqld: 파일 '/mysql80 /dbdata/data5001/log/binlog.000012' 찾을 수 없음(OS errno 2 - 해당 파일 또는 디렉터리 없음)
2023-02-27T10:38: 09.240576+08:00 0 [ERROR] [MY-010958] [서버] 로그 파일을 열 수 없습니다.
2023-02-27T10:38:09.240657+08:00 0 [ERROR] [MY-010041] [서버] 열 수 없습니다. tc log를 초기화하지 않습니다
2023-02-27T10:38:09.240718+08 :00 0 [ERROR] [MY-010119] [서버] Aborting
2023-02-27T10:38:10.548605+08:00 0 [시스템] [MY-010910] [서버] /data/mysql80/svr/mysql/ bin/mysqld: 종료 완료(mysqld 8.0.31) MySQL 커뮤니티 서버 - GPL.

여기에 보고된 오류는 binlog 파일을 찾을 수 없으며 오류 메시지에 <code>binlog 디렉터리는 이전과 동일하지만 구성 파일의 디렉터리가 수정되었습니다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

7 문제가 해결되었습니다.

결국 검색을 통해 binlog.index 파일에는 각 binlog 파일의 절대 경로 주소가 저장되어 있는 것으로 나타났습니다. 내용은 다음과 같습니다.

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

binlog.index 파일에서 binlog의 절대 경로를 수정합니다.

rrreee🎜8 데이터베이스 시작 🎜rrreee🎜데이터베이스가 성공적으로 시작되었습니다. 🎜🎜9. 슬레이브 노드🎜🎜인스턴스가 다른 인스턴스의 슬레이브 노드로도 사용되는 경우에도 Relaylog.index 파일에 릴레이 로그의 절대 경로를 설정해야 한다는 점에 유의해야 합니다. 다음 오류가 보고됩니다: 오류 로그 오류:🎜 🎜🎜2023-02-27T15:56:55.224372+08:00 0 [ERROR] [MY-010599] [Repl] log /mysql80/dbdata/data5002/log/relaylog. 000002가 인덱스에 나열되었지만 통계에 실패했습니다. 🎜2023-02-27T15:56:55.224422+08:00 0 [ERROR] [MY-011059] [Repl] 릴레이 로그 공간 계산 오류.🎜2023-02-27T15: 56:55.226571+08:00 0 [ERROR] [MY-010426] [Repl] 슬레이브: '' 채널에 대한 마스터 정보 구조를 초기화하지 못했습니다. 해당 레코드가 여전히 'mysql.slave_master_info' 테이블에 있을 수 있습니다. 삭제를 고려하세요. .🎜2023-02-27T15:56:55.226622 +08:00 0 [ERROR] [MY-010529] [Repl] 복제 정보 저장소를 생성하거나 복구하지 못했습니다.🎜🎜🎜복제 시작을 실행할 때도 오류가 보고됩니다. 🎜🎜🎜# 클라이언트 오류 🎜mysql> 복제본 시작;🎜 오류 1872(HY000): 슬레이브가 저장소에서 릴레이 로그 정보 구조를 초기화하지 못했습니다.🎜# 오류 로그 오류🎜2023-02-27T15:57:53.858798+08:00 8 [ERROR] [MY-013124] [Repl] '' 채널의 슬레이브 SQL: 슬레이브가 저장소에서 릴레이 로그 정보 구조를 초기화하지 못했습니다. Error_code: MY-013124🎜🎜🎜10 문제 해결🎜🎜릴레이의 절대 경로를 수정하세요. relaylog.index 파일에 로그인🎜 rrreee🎜데이터베이스를 재시작하고 마스터-슬레이브 복제를 시작하세요🎜rrreee🎜이제 마스터-슬레이브 복제가 정상으로 돌아옵니다. 🎜

위 내용은 데이터 디렉터리 이동 후 MySQL이 시작되지 않는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제