Windows와 Linux 배포판(Mint) 간에 MySQL 데이터베이스 파일을 공유하려고 합니다. 이중 부팅과 별도의 데이터 파티션(NTFS)이 있습니다.
umask
파티션을 마운트하고 소유권을 "mysql:mysql"로 설정하고 a를 000( chmod 777
) 으로 설정하려고 시도했지만 MySQL은 항상 다음과 같이 말합니다.
Fatal error: Can't open and lock privileges tables: Table 'host' is read only
시험을 마친이것하지만 여전히 작동하지 않습니다. 어떤 아이디어가 있나요? 나는 내 컴퓨터에 데이터베이스 복사본 두 개를 갖고 싶지 않습니다.
답변1
이를 수행하는 방법을 제안하는 웹 게시물이 많이 있지만 실제로 작동하게 만드는 방법을 알려주는 게시물을 찾을 수 없습니다. 그래서 몇 주간의 어려움 끝에 마침내 저에게 도움이 된 해결책이 있습니다.:-)
플랫폼: 각 시스템에 듀얼 부팅, Windows 10/Debian 8.5, MySQL 5.6.
팁: Debian Backport가 아닌 Oracle에서 MySQL 5.6으로 업그레이드하세요. 손상되어 올바르게 설치되지 않습니다.
경고하다!
다음을 수행하면
mount
공유 파티션에 있는 모든 파일의 소유권이 변경됩니다. 처음에는 이것이 걱정스러웠지만 지금까지는 문제가 되는 것으로 입증되지 않았습니다.시작하기 전에 모든 것을 백업하세요.
두 개의 독립적인 백업이 하나보다 낫습니다.저를 믿으세요. 저는 Midnight Light를 한두 번 본 적이 있고 그와 같은 것을 다시 보고 싶지 않습니다.
다른 사람들은 Windows는 대소문자를 구분하지 않고 Linux는 대소문자를 구분하기 때문에 이름을 모두 소문자로 만들어야 한다고 지적했습니다. 이는 데이터베이스 이름이 mysql/에 파일 이름 데이터 폴더에 저장될 때 변환되므로 최소한 최소한이라는 의미인 것 같습니다.
배경:MS Access 데이터를 Windows에서 Linux로 옮기고 있습니다. 첫 번째 단계는 내 데이터를 MS Access 외부로 옮기는 것입니다. Windows에 MySQL 5.6을 설치하고 MDBTools를 사용하여 Access에서 MySQL로 테이블을 복사하여 구조를 복사하고 Access에서 ODBC를 사용하여 데이터를 이동했습니다. 완전히 간단하지는 않으며 일부 이름과 기타 조정이 필요합니다. 예를 들어 "ok?"라는 필드의 이름을 "ok"로 변경해야 했고, 인덱스를 조정하고 기본 키에 주의를 기울여야 했습니다. 그런 다음 테이블이 여전히 Access에 있는 것처럼 계속 액세스할 수 있도록 ODBC를 통해 테이블을 다시 Access에 연결했습니다. 이제 테이블을 Linux에서도 액세스할 수 있는 위치로 이동할 준비가 되었습니다.
필요한 Windows 변경으로 시작하십시오.
1)설정적절한 크기의 ntfs 공유 파티션(내 파티션은 E:라고 하며 약 55GB).
(팁: 처음에는 충분히 크게 만드세요. 어떤 시점에서는 데이터베이스를 더 크게 만들어야 했는데 정말 고통스러웠습니다. 이제 mysql 데이터베이스 외에도 공유 Thunderbird/Icedove와 Firefox 프로필을 여기에 보관합니다. Windows에서 Linux로 전환할 때 음악, 스프레드시트, 문서와 같은 기타 공유 파일).
2)이동하다mysql 데이터베이스 폴더는 C:에서 E:
--from: C:/ProgramData/MySQL/MySQL Server 5.6/data/
--to: E:/mysql5.6/ 입니다.
삼)고쳐 쓰다(Windows) my.ini 파일은 새 mysql 서버 폴더를 가리킵니다.
--이 파일을 편집합니다: C:/ProgramData/MySQL/MySQL Server 5.6/my.ini
--이 매개변수를 변경합니다: datadir="E:/mysql5 . 6" 6/데이터\"
(후행 백슬래시가 무엇인지는 모르겠지만 유지하세요.)
4)시험Windows:
다음을 통해 MySQL 서버를 로드합니다. (
시작 메뉴) | MySQL | 시스템 트레이 모니터에서 인스턴스 시작
[서버 인스턴스가 정상적으로 시작되면 아이콘의 빨간색 표시등이 녹색으로 변합니다.]
다음으로 Linux를 일부 변경합니다.
1)고쳐 쓰다my.ini는 새 mysql 서버 폴더를 가리킵니다
. -- 이 파일을 편집하세요: /etc/mysql/my.ini
-- 이 매개변수를 변경하세요: datadir="/home/howard/Shared/mysql5.6/"
2)다음에 추가fstab에 라인을 마운트합니다:
LABEL="Shared" /home/username/Shared/ ntfs rw,nosuid,nodev,relatime,user_id=username,group_id=groupname,permissions,allow_other,noatime 0 2
팁:
나중에 Linux 사용자 "mysql"이 mysql 파일을 소유할 수 있도록 하려면 "permissions" 옵션이 필요합니다.
그러면 처음에 모든 파일의 소유권이 "루트"로 변경됩니다!
uid, gid, umode, dmode 및 fmode 옵션은 파일 소유권 및 권한을 개별적으로 변경할 수 있는 권한 옵션을 비활성화하므로 여기에 포함해서는 안 됩니다. 설치에서 "default_permissions"가 보고되면 문제가 발생한 것이므로 문제가 해결될 때까지 계속할 수 없습니다. (user_id, group_id 및 기타 마운트 옵션에는 이 문제가 없는 것으로 보이며 "권한" 옵션을 사용하여 작동합니다.)
마운트 유형이 ntfs인지 ntfs-3g인지는 중요하지 않은 것 같습니다.
"권한" 우선순위의 부작용은 파티션의 모든 파일이 다시 소유된다는 것입니다(Windows에서도 마찬가지입니다)!
삼)산공유 파티션
mount -a
(또는 다시 시작)
4)모든 파일의 소유권 변경기본 사용자 이름으로
chown -R <your Linux username>: /home/user/Shared/*
5)mysql 파일의 소유권 변경"mysql"에
chown -R mysql: /home/user/Shared/mysql5.6
중요한:Linux mysql에서는 "mysql"이라는 사용자가 해당 파일을 소유해야 합니다. 그렇지 않으면 서버가 중단됩니다. Windows에서는 그런 우려가 없는 것 같습니다.
Linux에서 테스트됨:
sudo mysql -u root --password="<your password>"
mysql> show databases;
mysql> quit
Windows로 돌아가서 방금 Linux에서 발생한 문제를 해결하세요.
현재 mysql 서버를 시작할 수 없습니다. 몇 가지 조사 끝에 이 문제에 대한 해결책을 찾았습니다.
먼저 "권한" 옵션을 사용하여 공유 파티션을 ntfs로 마운트한 다음 파일 소유권을 변경하면 Windows가 Linux 사용자 이름을 모르기 때문에 모든 파일과 폴더의 Windows 소유권이 "계정 알 수 없음"으로 변경되었습니다.
또한 보안 파일 및 디렉터리 "상속"이 있으면 꺼질 것이라고 생각합니다(확실하지는 않습니다). 공유 파티션에 트리를 복사하면 보안 권한에 상속이 생성됩니다. 그런데 Linux를 탑재한 후 무슨 일이 일어나는지 조사해보니 보안 권한이 상속되지 않는 것 같습니다. 대신 절대적인 안전 매개변수가 있습니다.
회색으로 표시된 확인란은 사용자 정의된 특수 권한이 있는 경우 회색으로 표시되는 특수 권한 확인란을 제외하고 상위 항목에서 상속된 값을 나타냅니다.
특수 권한은 일반 권한에 추가되는 것이 아니라 단지 일반 권한의 대체 보기인 것으로 보입니다. (Windows 권한 도구를 처음 사용하는 경우 시작하기 전에 테스트 파일에서 사용해 보세요.)
이에 대한 MS 문서가 잘못된 열 제목으로 인해 모두 엉망이 되었습니다.여기, 문제를 해결할 수 있도록 신고했습니다.
모든 파일 및 권한 소유권은 이제 다음과 같은 두 개의 "계정 알 수 없는" SID 중 하나입니다. (S-1-5-21-...)
이제 Windows 소유자가 소유자가 아니기 때문에 파일 보안을 변경하기가 더 어려워집니다. 따라서 첫 번째 단계는 보안 매개변수를 변경하려는 파일의 소유권을 되찾는 것입니다.
mysql이 다시 작동하도록 하려면(Linux mysql 서버가 이에 접근한 후) 파일에 약간의 보안 권한을 추가해야 합니다. 4명의 사용자 각각에게 추가하여 테스트했지만 관리자, 시스템 및 S-1-xxx 사용자에게 모든 권한을 부여하면 mysql이 시작되지 않았습니다. 하지만 모든 사람에게 더 많은 권한을 부여하자 mysql이 작동하기 시작했습니다. (모든 사람의 권한이 영향을 미치는 것이 이상하게 보이기 때문에 mysql에 작은 버그가 있는 것으로 의심됩니다.)
1)선택하다파일: E:/mysql5.6/dataauto.cnf
2)소유권을 가지세요.속성을 마우스 오른쪽 버튼으로 클릭하고 보안 | 고급 | 소유자:... 변경 Enter를 누른 다음 확인 |
이제 당신은 E:/mysql5.6/dataauto.cnf의 소유자입니다.
삼)놓다E:/mysql5.6/dataauto.cnf에 대한 다음 권한:
다시 사용하십시오: 속성 | 보안 | 고급
"모두"를 선택하고 편집 | 고급 권한 표시를 클릭하십시오.
다음 사항이 선택되어 있는지 확인하십시오.
- 폴더/실행 파일 나열,
- 확장된 속성을 읽고,
- 읽기 권한
그런 다음 확인 |을 클릭하고 확인 |
마지막으로 전체 테스트를 수행합니다.
다음 테스트 순서는 Linux MySQL 서버가 시작될 때 Windows MySQL 서버의 시작 기능을 방해하지 않는지 확인합니다.
1) Windows에서 Windows mysql 서버를 시작한 다음,
2) Linux로 재부팅하고 Linux mysql 서버를 시작한 다음,
3) Windows로 재부팅하고 mysql 서버를 다시 시작합니다.
업데이트할 수 있도록 여기에 문제를 보고해 주세요.