web-dev-qa-db-ja.com

WindowsにデフォルトのMySQLテーブルをインストールする(mysql_install_db)

Linuxでは、デフォルトのMySQL付与テーブルはmysql_install_dbスクリプトですが、Windowsでは機能しません。

Windowsにデフォルトの許可テーブルをインストールするにはどうすればよいですか?

(いいえ、Googleの結果がWindowsに自動的にインストールされる方法で満ちているという応答は探していません。これは、Zipパッケージではなく、インストーラーディストリビューションの場合のみであるためです。 MySQLがインストールされており、データディレクトリが破損しているか、置き換えられているなど)。

12
Synetech

私は以前にこれに直面し、それを理解することに成功したことを知っていたので、ドライブを検索して、前回書き込んだバッチファイルを見つけました。

この問題が発生した他の人にとって、--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_"
13
Synetech

WindowsのMySQL付与テーブルにこの奇妙なジレンマがあった場合は、以下をお勧めします。

手順1.インストーラーが含まれていないZipファイル配布を入手します。

ステップ2.内容をC:\MySQLZipStuffに解凍します

手順3. C:\MySQLZipStuff\data\mysqlフォルダを探します

ステップ4. C:\MySQLZipStuff\data\mysql内のすべてのファイルを、目的のデータディレクトリのmysqlフォルダーにコピーします。

ステップ5. net start mysql

Mysqlフォルダーがすでにある場合は、代わりにこれを行うことができます。

ステップ1. [mysqld]セクションにこの行を追加して、my.iniを編集します

[mysqld]
skip-grant-tables
skip-networking

ステップ2. net stop mysql

ステップ3. net start mysql

この時点で、「mysql」と入力するだけでログインできます。ただし、付与テーブルを無効にしてGRANTコマンドを実行することはできません。

ステップ4. 1つのスーパーユーザーを手動で入力する必要があります。このような

a)INSERT INTO mysql.user SET user='root',Host='localhost';

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

これにより、ユーザーテーブルのすべての列が表示されます。次のように各列を手動で変更する必要があります。

UPDATE 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としてログインできます。

試してみる !!!

5
RolandoMySQLDBA

ご参考までに、

--initialize廃止予定の代わりに--bootstrap


NB。完全を期すために:

非特権アカウントを使用してこれを実行するには:

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

次に、サーバーを起動します。

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

XAMPPを使用してこの問題が発生した場合、XAMPPにはこれらのデフォルトのmysqlテーブルのバックアップが付属しています。

このフォルダーC:\xampp\mysql\backup\mysqlのすべてをコピーしてC:\xampp\mysql\data\mysqlに貼り付け、すべてを上書きします。

警告:データが失われる可能性があります-わかりませんが、クリーンインストールを行いました。

2
Alec Gorge