Java Spring에서 개발하고 Windows 10에서 로컬로 실행되는 MySQL 데이터베이스에 데이터를 저장하는 시스템이 있습니다.
어제 최신 Windows 업데이트를 실행했는데 2시간 동안 컴퓨터를 작동한 후 충돌이 발생했습니다... 그 이후로 Windows가 시작되지 않고 개인 데이터를 유지할 수 있는 가능성과 함께 Windows를 다시 설치할 수 있는 옵션이 제공됩니다. 하지만 그렇게 하면 MySQL과 저장된 모든 데이터가 지워질 것이라고 생각합니다.
동일한 시스템에서 Linux를 실행하고 있으므로 mysqldump를 사용하여 데이터베이스를 백업하기 위해 Linux를 사용하여 데이터베이스에 액세스하려고 합니다.
이를 위해 다음 명령을 사용하여 Windows에서 데이터가 저장되는 디렉터리를 Linux 디렉터리에 마운트하려고 했습니다.
sudo mount --bind '/media/guillaume/Windows/ProgramData/MySQL/MySQL Server 5.7/Data' /var/lib/mysql
그런 다음 mysql 서버를 다시 시작하고 SQL 콘솔을 열었습니다. Windows 암호(Linux의 SQL 암호와 다름)를 사용하여 SQL 콘솔에 로그인할 수 있었고 Windows 컴퓨터에 저장된 모든 데이터베이스를 나열할 수 있었습니다.
더 복잡해질 때입니다. SQL 콘솔은 관심 있는 데이터베이스의 모든 테이블을 나열할 수 있지만 어떤 이유로 테이블의 내용을 쿼리할 수는 없습니다. 모든 테이블을 나열할 수 있지만 테이블을 쿼리할 수는 없습니다. SQL에서는 방금 나열했는데도 그러한 테이블이 존재하지 않는다고 알려줍니다.
스크린샷이 있어서 오타는 없지만 사이트에서 이미지 게시를 허용하지 않습니다...
이 문제를 어떻게 해결할 수 있나요? 아니면 Windows가 시작되지 않는 경우에도 Windows 위치에서 덤프를 생성하는 더 스마트한 방법이 있습니까?
도움을 주셔서 감사합니다!
답변1
작동하지 않는 이유는 동일한 이름을 가진 Linux의 다른 데이터베이스와 구별하기 위해 Windows에서 데이터베이스의 이름을 "database_W"로 바꾸었고 내가 수행한 백업에서 복구했기 때문입니다. 몇주 전에.
Windows ProgramData 파일을 외부 디스크에 복사했기 때문에 해당 데이터베이스 백업을 대상 폴더에 복사한 다음 SQL 콘솔과 IDE에서 이 원본 데이터베이스, 모든 테이블 및 모든 데이터를 볼 수 있었습니다. 내 IDE를 사용하여 백업 파일(덤프)을 만들었습니다.
Rinzwind가 지적했듯이, 특히 Windows 업데이트 전에 데이터를 정기적으로 백업하는 것이 중요합니다... 교훈을 얻었습니다!
그래서 제가 데이터를 복구하기 위해 한 일은 다음과 같습니다.
- Linux를 사용하여 Windows 데이터에 액세스하고 모든 데이터를 백업하십시오.
- SQL 데이터를 복구하려면 다음 위치에 관심이 있습니다
'/media/guillaume/Windows/ProgramData/MySQL/MySQL Server 5.7/Data'
. 거기에 어떤 이름도 변경하지 마십시오! - 다음 명령을 사용하여 Windows ProgramData 파일을 적절한 Linux 디렉터리에 마운트합니다.
sudo mount --bind '/media/guillaume/Windows/ProgramData/MySQL/MySQL Server 5.7/Data' /var/lib/mysql
- SQL 서비스를 다시 시작하세요(저는 다음 명령을 사용했습니다: service mysql restart).
- Linux 터미널의 SQL 콘솔을 사용하여 Linux에서 Windows 데이터베이스를 볼 수 있고 데이터에 액세스할 수 있는지 확인합니다(select * from table 문 유형을 사용하여).
- IDE에서 덤프 파일을 생성하려면 IDE를 사용하여 이 데이터베이스에 연결합니다(Windows 자격 증명 사용).