在Windows中安装默认的MySQL表(mysql_install_db)


12

在Linux中,可以使用该mysql_install_db脚本创建默认的MySQL授权表,但这在Windows上不起作用。

如何在Windows上安装默认授权表?

(不,我不是在寻找关于Google的结果如何在Windows上自动安装的包装,因为这只是安装程序发行版的情况,而不是ZIP包。此外,这在以后没有帮助MySQL已安装且数据目录已损坏或正在被替换等。)

Answers:


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

第三步 net start mysql

此时,您只需要键入'mysql'即可。但是,不能在禁用授予表的情况下运行GRANT命令。

步骤4.您将必须手动输入一个超级用户。像这样

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

b) 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-networkingmy.ini

第六步 net stop mysql

步骤7 net start mysql

现在,您可以使用'whateverpasswordyouwant'作为密码以root用户身份登录mysql。

试试看 !!!


感谢您的提示;考虑到在Linux上只需一个脚本,这是很多步骤。:-(
Synetech'3

3

仅供参考

它是--initialize现在,而不是过时的--bootstrap


注意 为了完整性:

要使用非特权帐户运行此命令,请执行以下操作:

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具有比仅单个Web服务器更多的通用性。
Synetech

哦,我知道。我只想为那些在搜索了该错误之后又使用XAMPP(如我)的人而张贴在该页面上。我不希望这被标记为已接受,但留给他人参考。
亚历克峡谷

好酷 我没有意识到必须手动重置XAMPP是一个常见问题。
Synetech 2011年

不是,我不知道这是怎么发生的,并且我不想重新运行安装程序,因为担心会覆盖精心修剪的配置文件:P
Alec Gorge

哦,我知道!由于MySQL没有内置的缩小数据库文件的方法(如vacuumSQLite3 等的命令),因此我不得不手动转储它并创建一个新的数据库,因为我没有太多空间。但是我一直很担心这样做,所以我尽可能地推迟它。
Synetech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.