답변:
나는 이것을 전에 직면하고 그것을 알아낼 수 있다는 것을 알았으므로 드라이브를 검색하고 마지막에 쓴 배치 파일을 찾았습니다.
이 문제가 발생하는 다른 사람은 --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 don’t 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_"
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-tables
및 skip-networking
에서를my.ini
단계 6. net stop mysql
7 단계. net start mysql
이제 비밀번호로 'whateverpasswordyouwant'를 사용하여 mysql에 root로 로그인 할 수 있습니다.
시도 해봐 !!!
XAMPP를 사용하고이 문제가 발생하는 모든 사람에게 XAMPP는 이러한 기본 mysql 테이블의 백업을 제공합니다.
이 폴더의 모든 내용을 복사 C:\xampp\mysql\backup\mysql
하여에 붙여넣고 C:\xampp\mysql\data\mysql
모든 내용을 덮어 씁니다.
경고 : 데이터가 손실 될 수 있습니다. 잘 모르겠습니다. 새로 설치했습니다.
vacuum
SQLite3 의 명령 등), 수동으로 파일을 덤프하고 새 파일을 만들어야합니다. 공간이 충분하지 않기 때문입니다. 그러나 나는 항상 그렇게하는 것에 대해 걱정하고 있기 때문에 가능한 한 오랫동안 연기했습니다.
:-(