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.)

Synetech
źródło

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 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_"
Synetech
źródło
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 !!!

RolandoMySQLDBA
źródło
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
Imifos
źródło
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ę.

Wąwóz Alec
źródło
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,