WindowsでのデフォルトのMySQLテーブルのインストール(mysql_install_db)


12

Linuxでは、デフォルトのMySQL許可テーブルをmysql_install_dbスクリプトで作成できますが、Windowsでは機能しません。

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

(いいえ、Googleの結果がWindowsに自動的にインストールされる方法でいっぱいになっているという応答を探しているわけではありません。ZIPパッケージではなくインストーラー配布の場合のみです。 MySQLがインストールされており、データディレクトリが破損しているか、置き換えられているなど。

回答:


13

私は以前にこれに直面していたことを知っていたため、なんとか解決できたので、ドライブを検索して、前回書いたバッチファイルを見つけました。

この問題が発生する他の人にとって、あなたがする必要があるのは、--bootstrapパラメータでサーバーデーモンを実行することです。

すべてのデータベースをSQLファイルにダンプし、それらを再インポートする(つまり、手動で、そして不便なことにvacuum)SQLiteのコマンドに対応する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ファイル配布を取得します。

ステップ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. 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-tablesskip-networkingからmy.ini

ステップ6。 net stop mysql

ステップ7。 net start mysql

これで、「whateverpasswordyouwant」をパスワードとして使用して、mysqlにrootとしてログインできます。

試してみる !!!


ヒントをありがとう。Linuxでは1つのスクリプトしか必要としないことを考慮すると、これは多くの手順です。:-(
Synetech

3

ご参考までに、

それはだ--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は単一のWebサーバーよりもはるかに汎用的であるため、かなり限られたユースケースシナリオです。
Synetech

ああ、わかる。そのエラーをグーグルで調べてからこのページにアクセスし、XAMPP(私のように)を使用している人に投稿したかっただけです。これが承認済みとしてマークされることは期待していませんが、他の人への参照として残されると思います。
アレック渓谷

いいね XAMPPを手動でリセットする必要があることはよくある問題だとは思いませんでした。
Synetech

それは、私はこれが起こったのか見当もつかないと私は慎重に手入れされた設定ファイルを上書きするのを恐れて、インストーラを再実行したくなかった、ではありません:P
アレック渓谷

ああ、わかる!MySQLにはデータベースファイルを縮小する組み込みの方法がないため(vacuumSQLite3 などのコマンドのように)、手動でダンプして、新しいファイルを作成する必要があります。しかし、私はいつもそうすることを心配しているので、できるだけ長く延期します。
Synetech
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.