Linuxでは、デフォルトのMySQL付与テーブルはmysql_install_db
スクリプトですが、Windowsでは機能しません。
Windowsにデフォルトの許可テーブルをインストールするにはどうすればよいですか?
(いいえ、Googleの結果がWindowsに自動的にインストールされる方法で満ちているという応答は探していません。これは、Zipパッケージではなく、インストーラーディストリビューションの場合のみであるためです。 MySQLがインストールされており、データディレクトリが破損しているか、置き換えられているなど)。
私は以前にこれに直面し、それを理解することに成功したことを知っていたので、ドライブを検索して、前回書き込んだバッチファイルを見つけました。
この問題が発生した他の人にとって、--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_"
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としてログインできます。
試してみる !!!
ご参考までに、
--initialize
廃止予定の代わりに--bootstrap
NB。完全を期すために:
非特権アカウントを使用してこれを実行するには:
mysqld.exe --log_syslog=0 --console --standalone --initialize
次に、サーバーを起動します。
mysqld.exe --log_syslog=0 --console --standalone
XAMPPを使用してこの問題が発生した場合、XAMPPにはこれらのデフォルトのmysqlテーブルのバックアップが付属しています。
このフォルダーC:\xampp\mysql\backup\mysql
のすべてをコピーしてC:\xampp\mysql\data\mysql
に貼り付け、すべてを上書きします。
警告:データが失われる可能性があります-わかりませんが、クリーンインストールを行いました。