Windows에서 기본 MySQL 테이블 설치 (mysql_install_db)


12

Linux에서 mysql_install_db스크립트를 사용 하여 기본 MySQL 권한 부여 테이블을 작성할 수 있지만 Windows에서는 작동하지 않습니다.

Windows에서 기본 부여 테이블을 어떻게 설치할 수 있습니까?

(아니요, Windows의 결과가 Windows에 자동으로 설치되는 방법에 대한 결과로 가득 찬 구글의 결과는 찾지 못했습니다. 왜냐하면 ZIP 패키지가 아닌 설치 프로그램 배포의 경우에만 해당되기 때문입니다. MySQL이 설치되어 있고 데이터 디렉토리가 손상되었거나 교체 중입니다.)

답변:


13

나는 이것을 전에 직면하고 그것을 알아낼 수 있다는 것을 알았으므로 드라이브를 검색하고 마지막에 쓴 배치 파일을 찾았습니다.

이 문제가 발생하는 다른 사람은 --bootstrap매개 변수를 사용 하여 서버 데몬을 실행해야합니다 .

다음은 모든 데이터베이스를 SQL 파일로 덤프하고 다시 가져 오는 (즉, SQLite vacuum명령에 대한 MySQL 대응 물을 수동으로 그리고 불편하게) 가져 오는 데 사용한 스크립트 입니다.

::Start the server, change to the MySQL bin directory, and dump all databases
net start MySQL
cd       /d "%serverdir%\MySQL\bin"
mysqldump  -uroot -p --all-tablespaces --all-databases --add-drop-database --add-drop-table --add-locks --comments --complete-insert --compress --create-options --events --routines --quick --quote-names --set-charset --triggers > %temp%\all.sql

::Stop the server and rename the data directory (as backup)
net stop mysql
ren         "%datadir%\MySQL"        MySQL_

::Delete data folder in MySQL directory, optionally copy old mysql tables
rd    /s /q "%serverdir%\MySQL\data"
md          "%serverdir%\MySQL\data"
xcopy /s /e "%datadir%\MySQL_\mysql" "%serverdir%\MySQL\data"

::Bootstrap the server (creates grant tables if they dont exist)
mysqld --bootstrap

::Run server, optionally upgrade tables and move upgrade log to data directory
start mysqld --skip-grant-tables
mysql_upgrade --force
move "%serverdir%\MySQL\bin\mysql_upgrade_info" "%serverdir%\MySQL\data"

::Import all databases, shutdown, delete logs, then move to old data dir
mysql      -uroot -p < %temp%\all.sql
mysqladmin -uroot -p shutdown
md  "%datadir%\MySQL"
del "%serverdir%\MySQL\data\ib_logfile?"
xcopy /s /e "%serverdir%\MySQL\data\*" "%datadir%\MySQL"
rd    /s /q "%serverdir%\MySQL\data"

::Start the server, if it works, then all should be well, so del
net start mysql
rd    /s /q "%datadir%\MySQL_"

5

Windows 용 MySQL 권한 부여 테이블에서이 이상한 딜레마가 발생한 경우 다음을 권장합니다.

1 단계. 설치 프로그램이없는 ZIP 파일 배포판을 가져옵니다.

2 단계. 내용을 압축 해제 C:\MySQLZipStuff

3 단계. 폴더를 찾습니다 C:\MySQLZipStuff\data\mysql

단계 4. 모든 파일을 C:\MySQLZipStuff\data\mysql원하는 데이터 디렉토리의 mysql 폴더로 복사하십시오.

5 단계. net start mysql

mysql 폴더가 이미 있다면 대신 다음을 수행 할 수 있습니다.

1 단계. my.ini[mysqld] 섹션에이 줄을 추가하여 편집

[mysqld]
skip-grant-tables
skip-networking

2 단계. net stop mysql

3 단계. net start mysql

이때 'mysql'만 입력하면됩니다. 그러나 grant 테이블이 비활성화 된 상태에서 GRANT 명령을 실행할 수 없습니다.

단계 4. 하나의 수퍼 유저를 수동으로 입력해야합니다. 이렇게

ㅏ) INSERT INTO mysql.user SET user='root',host='localhost';

비) SELECT * FROM mysql.user WHERE user='root' AND host='localhost'\G

사용자 테이블의 모든 열이 표시됩니다. 다음과 같이 각 열을 수동으로 변경해야합니다.

업데이트 mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... WHERE user = 'root'AND host = 'localhost';

c) 다음과 같이 root @ localhost의 비밀번호를 설정하십시오.

UPDATE mysql.user SET password=PASSWORD('whateverpasswordyouwant')
WHERE user='root' AND host='localhost';

5. 제거 단계 skip-grant-tablesskip-networking에서를my.ini

단계 6. net stop mysql

7 단계. net start mysql

이제 비밀번호로 'whateverpasswordyouwant'를 사용하여 mysql에 root로 로그인 할 수 있습니다.

시도 해봐 !!!


팁 주셔서 감사합니다. Linux에서는 단일 스크립트 만 있으면됩니다. :-(
Synetech

3

참고로,

그건 --initialize대신 사용되지 않는의 지금--bootstrap


NB. 완전성을 위해 :

권한이없는 계정을 사용하여이를 실행하려면 다음을 수행하십시오.

mysqld.exe --log_syslog=0 --console --standalone --initialize

그런 다음 서버를 시작하십시오.

mysqld.exe   --log_syslog=0 --console --standalone

2

XAMPP를 사용하고이 문제가 발생하는 모든 사람에게 XAMPP는 이러한 기본 mysql 테이블의 백업을 제공합니다.

이 폴더의 모든 내용을 복사 C:\xampp\mysql\backup\mysql하여에 붙여넣고 C:\xampp\mysql\data\mysql모든 내용을 덮어 씁니다.

경고 : 데이터가 손실 될 수 있습니다. 잘 모르겠습니다. 새로 설치했습니다.


XAMPP에는 편리하지만 MySQL은 단일 웹 서버보다 훨씬 범용 적이기 때문에 사용 사례 시나리오가 매우 제한적입니다.
Synetech

오, 나 알아. 나는 그 오류에 대해 인터넷 검색 후이 페이지에 방문한 사람과 XAMPP (나 같은)를 사용하는 사람을 위해 게시하고 싶었습니다. 나는 이것이 승인 된 것으로 표시 될 것으로 기대하지는 않지만 다른 사람들을 위해 참조로 남겨두기를 기대합니다.
Alec Gorge

좋아. XAMPP를 수동으로 재설정해야한다는 것이 일반적인 문제라는 것을 알지 못했습니다.
Synetech

그렇지 않다. 나는 이것이 어떻게 일어 났는지 전혀 모른다. 그리고 신중하게 조작 된 설정 파일을 덮어 쓰는 것에 대한 두려움 때문에 설치 프로그램을 다시 실행하고 싶지 않았다. : P
Alec Gorge

오, 나 알아! MySQL에는 데이터베이스 파일을 축소하는 기본 제공 방법이 없기 때문에 ( vacuumSQLite3 의 명령 등), 수동으로 파일을 덤프하고 새 파일을 만들어야합니다. 공간이 충분하지 않기 때문입니다. 그러나 나는 항상 그렇게하는 것에 대해 걱정하고 있기 때문에 가능한 한 오랫동안 연기했습니다.
Synetech
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.