Instalowanie domyślnych tabel MySQL w systemie Windows (mysql_install_db)


12

W systemie Linux domyślne mysql_install_dbskrypty tabel MySQL można tworzyć za pomocą skryptu, ale to nie działa w systemie Windows.

Jak można zainstalować domyślne tabele uprawnień w systemie Windows?

(Nie, nie szukam odpowiedzi, w której wyniki Google są pełne, o tym, jak są one automatycznie instalowane w systemie Windows, ponieważ dzieje się tak tylko w przypadku dystrybucji instalatora, a nie pakietu ZIP. Poza tym to nie pomaga po MySQL jest zainstalowany, a katalog danych jest uszkodzony lub jest zastępowany itp.)

Odpowiedzi:


13

Wiedziałem, że już się z tym zmierzyłem i udało mi się to rozgryźć, więc przeszukałem dyski i znalazłem plik wsadowy, który napisałem ostatnim razem.

Dla każdego, kto napotka ten problem, wystarczy uruchomić demona serwera z --bootstrapparametrami.

Oto skrypt, którego użyłem, aby zrzucić wszystkie bazy danych do pliku SQL i ponownie je zaimportować (to znaczy ręcznie - i niewygodnie - zaimplementować odpowiednik MySQL do vacuumpolecenia SQLite ).

::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_"

5

Jeśli miałeś ten dziwny dylemat w tabelach grantu MySQL dla Windows, polecam następujące:

Krok 1. Pobierz dystrybucję ZIP FIle, która nie zawiera instalatora.

Krok 2. Rozpakuj jego zawartość C:\MySQLZipStuff

Krok 3. Wyszukaj folder C:\MySQLZipStuff\data\mysql

Krok 4. Skopiuj wszystkie pliki C:\MySQLZipStuff\data\mysqldo folderu mysql żądanego katalogu danych.

Krok 5. net start mysql

Jeśli masz już folder mysql, możesz to zrobić w zamian:

Krok 1. Edytuj my.ini, dodając ten wiersz w sekcji [mysqld]

[mysqld]
skip-grant-tables
skip-networking

Krok 2. net stop mysql

Krok 3. net start mysql

W tym momencie możesz po prostu wpisać „mysql” i jesteś w. Jednak nie możesz uruchamiać poleceń GRANT z wyłączonymi tabelami grantu.

Krok 4. Musisz ręcznie wprowadzić jednego administratora. Lubię to

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

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

Spowoduje to wyświetlenie wszystkich kolumn w tabeli użytkowników. Będziesz musiał ręcznie zmienić każdą kolumnę w następujący sposób:

AKTUALIZACJA mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... GDZIE użytkownik = 'root' AND host = 'localhost';

c) Ustaw hasło dla root @ localhost w następujący sposób:

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

Krok 5. Usuń skip-grant-tablesi skip-networkingzmy.ini

Krok 6. net stop mysql

Krok 7. net start mysql

Teraz możesz zalogować się do mysql jako root, używając „whatpasswordyouwant” jako hasła.

Spróbuj !!!


Dzięki za wskazówki; to wiele kroków, biorąc pod uwagę, że w systemie Linux wystarczy tylko jeden skrypt. :-(
— Synetech,

3

Do Twojej wiadomości

to --initializeteraz, zamiast przestarzałe--bootstrap


NB dla kompletności:

Aby uruchomić to na nieuprzywilejowanym koncie:

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

Następnie uruchom serwer:

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

2

Dla każdego, kto używa XAMPP i doświadcza tego problemu, XAMPP jest dostarczany z kopią zapasową tych domyślnych tabel mysql.

Skopiuj wszystko z tego folderu C:\xampp\mysql\backup\mysqli wklej go C:\xampp\mysql\data\mysql, nadpisując wszystko.

Ostrzegam: dane mogą zostać utracone - nie wiedziałbym, że miałem czystą instalację.


Jest to przydatne dla XAMPP, ale jest to dość ograniczony scenariusz przypadków użycia, ponieważ MySQL jest o wiele bardziej ogólnego przeznaczenia niż pojedynczy serwer WWW.
— Synetech,

Oh, wiem. Chciałem tylko zamieścić to tam dla każdego, kto wylądował na tej stronie po Googlingu z powodu tego błędu, a także używa XAMPP (jak ja). Nie oczekuję, że zostanie to oznaczone jako zaakceptowane, ale pozostanie jako odniesienie dla innych.
— Alec Gorge

Ok spoko. Nie zdawałem sobie sprawy, że ręczne resetowanie XAMPP było częstym problemem.
— Synetech,

Nie, nie mam pojęcia, jak to się stało i nie chciałem ponownie uruchamiać instalatora z obawy przed zastąpieniem starannie wypielęgnowanych plików konfiguracyjnych: P
— Alec Gorge

Oh, wiem! Ponieważ MySQL nie ma wbudowanej metody zmniejszania pliku bazy danych (jak vacuumpolecenie SQLite3 i in.), Muszę go ręcznie zrzucić i od czasu do czasu utworzyć nowy, ponieważ nie mam dużo miejsca; ale zawsze martwię się o to, więc odkładam to na tak długo, jak to możliwe.
— Synetech,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.