Встановлення таблиць MySQL за замовчуванням у Windows (mysql_install_db)


12

У Linux, таблиці mysql_install_dbсценаріїв MySQL за замовчуванням можна створити за допомогою сценарію, але це не працює в Windows.

Як можна встановити таблиці дозволів за замовчуванням у Windows?

(Ні, я не шукаю відповіді на те, що результати Google запаковані про те, як вони автоматично встановлюються в Windows, тому що це стосується лише дистрибутива інсталятора, а не пакету ZIP. Крім того, це не допомагає після MySQL встановлений, і каталог даних пошкоджений або замінений або таке інше.)

Відповіді:


13

Я знав, що раніше стикався з цим і встиг розібратися з цим, тому шукав свої накопичувачі і знайшов пакетний файл, який я написав минулого разу.

Для всіх, хто відчуває цю проблему, потрібно запустити демон сервера з --bootstrapпараметрами.

Ось сценарій, за допомогою якого я скидав усі бази даних у файл SQL та повторно імпортував їх (тобто вручну - і незручно - реалізуючи аналог MySQL до vacuumкоманди 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_"

5

Якщо у вас виникла така дивна дилема в таблицях грантів MySQL для Windows, я рекомендую наступне:

Крок 1. Отримайте дистрибутив ZIP FIle, у якому немає інсталятора.

Крок 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, коли таблиці грантів відключені.

Крок 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

Тепер ви можете увійти в mysql як root, використовуючи "whatpasswordyouwant" як пароль.

Спробувати !!!


Дякую за поради; це багато кроків, враховуючи, що в Linux він займає лише один сценарій. :-(
Synetech

3

FYI,

це --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

О, я знаю. Я просто хотів опублікувати це для всіх, хто потрапив на цю сторінку після Googling за цю помилку, а також використовує XAMPP (як я). Я не чекаю, що це буде позначено як прийняте, але воно залишиться як орієнтир для інших.
Alec Gorge

Гаразд круто. Я не розумів, що необхідність вручну скинути XAMPP була поширеною проблемою.
Synetech

Це не так, я не маю поняття, як це сталося, і я не хотів відмовляти інсталятора, боячись переписати ретельно налаштовані файли конфігурації: P
Alec Gorge

О, я знаю! Оскільки MySQL не має вбудованого методу зменшення файлу бази даних (як-от vacuumкоманда SQLite3 та ін.), Я мушу вручну скидати його та створювати новий раз у раз, оскільки у мене немає багато місця; але я завжди переживаю за це, тому відкладаю це якомога довше.
Synetech
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.