Menginstal Tabel MySQL default di Windows (mysql_install_db)

12

Di Linux, tabel hibah MySQL default dapat dibuat dengan mysql_install_dbskrip, tetapi itu tidak berfungsi pada Windows.

Bagaimana tabel hibah default dapat diinstal pada Windows?

(Tidak, saya tidak mencari tanggapan bahwa hasil Google dikemas penuh tentang bagaimana mereka diinstal secara otomatis pada Windows, karena itu hanya terjadi pada distribusi installer, bukan paket ZIP. Selain itu, itu tidak membantu setelah MySQL diinstal dan direktori data rusak atau sedang diganti atau semacamnya.)

Synetech
sumber

Jawaban:

13

Saya tahu saya pernah menghadapi ini sebelumnya dan berhasil mengatasinya, jadi saya mencari drive saya dan menemukan file batch yang saya tulis terakhir kali.

Untuk siapa pun yang mengalami masalah ini, apa yang perlu Anda lakukan adalah menjalankan daemon server dengan --bootstrapparameter.

Berikut ini adalah skrip yang saya gunakan untuk membuang semua database ke file SQL dan mengimpornya kembali (yaitu, secara manual — dan tidak nyaman — mengimplementasikan mitra MySQL ke vacuumperintah 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_"
Synetech
sumber
5

Jika Anda pernah mengalami dilema aneh ini di tabel hibah MySQL untuk Windows, saya sarankan yang berikut:

Langkah 1. Dapatkan distribusi ZIP FIle yang tidak memiliki installer di dalamnya.

Langkah 2. Buka zip isinya C:\MySQLZipStuff

Langkah 3. Cari foldernya C:\MySQLZipStuff\data\mysql

Langkah 4. Salin semua file C:\MySQLZipStuff\data\mysqlke folder mysql dari direktori data yang Anda inginkan.

Langkah 5. net start mysql

Jika Anda sudah memiliki folder mysql, Anda dapat melakukan ini sebagai gantinya:

Langkah 1. Edit my.inidengan menambahkan baris ini di bagian [mysqld]

[mysqld]
skip-grant-tables
skip-networking

Langkah 2. net stop mysql

Langkah 3. net start mysql

Pada titik ini, Anda cukup mengetik 'mysql' dan Anda masuk. Namun, Anda tidak dapat menjalankan perintah GRANT dengan tabel hibah dinonaktifkan.

Langkah 4. Anda harus memasukkan satu superuser secara manual. Seperti ini

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

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

Ini akan menampilkan semua kolom di tabel pengguna. Anda harus mengubah secara manual setiap kolom seperti ini:

UPDATE mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... WHERE user = 'root' AND host = 'localhost';

c) Siapkan kata sandi untuk root @ localhost seperti ini:

UPDATE mysql.user SET password=PASSWORD('whateverpasswordyouwant')
WHERE user='root' AND host='localhost';

Langkah 5. Hapus skip-grant-tablesdan skip-networkingdarimy.ini

Langkah 6. net stop mysql

Langkah 7. net start mysql

Sekarang Anda dapat login ke mysql sebagai root menggunakan kata sandi apa pun yang Anda inginkan.

Cobalah !!!

RolandoMySQLDBA
sumber
Terima kasih atas tipsnya; itu banyak langkah mengingat di Linux hanya dibutuhkan satu script. :-(
Synetech
3

FYI,

itu --initializesekarang, bukan usang--bootstrap


NB. demi kelengkapan:

Untuk menjalankan ini menggunakan akun yang tidak diprivat:

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

Kemudian mulai server:

mysqld.exe   --log_syslog=0 --console --standalone
Imifos
sumber
2

Bagi siapa saja yang menggunakan XAMPP dan mengalami masalah ini, XAMPP dikirimkan dengan cadangan dari tabel mysql default ini.

Salin semua yang ada di folder ini C:\xampp\mysql\backup\mysqldan rekatkan C:\xampp\mysql\data\mysql, timpa semuanya.

Diperingatkan: data mungkin hilang - saya tidak akan tahu, saya telah menginstal bersih.

Alec Gorge
sumber
Itu berguna untuk XAMPP, tetapi ini adalah skenario kasus penggunaan yang cukup terbatas karena MySQL jauh lebih bersifat umum daripada hanya satu server web.
Synetech
Oh saya tahu. Saya hanya ingin memposting di sana untuk siapa saja yang mendarat di halaman ini setelah Googling untuk kesalahan itu dan juga menggunakan XAMPP (seperti saya). Saya tidak berharap ini ditandai sebagai diterima, tetapi dibiarkan sebagai referensi untuk orang lain.
Alec Gorge
Oke keren Saya tidak menyadari harus me-reset XAMPP secara manual adalah masalah umum.
Synetech
Bukan, saya tidak tahu bagaimana ini terjadi dan saya tidak ingin memutarkan ulang installer karena takut menimpa file konfigurasi terawat: P
Alec Gorge
Oh saya tahu! Karena MySQL tidak memiliki metode bawaan untuk mengecilkan file database (seperti vacuumperintah SQLite3, et. Al.), Saya harus membuangnya secara manual dan membuat yang baru sekarang dan kemudian karena saya tidak memiliki banyak ruang; tapi saya selalu khawatir melakukannya, jadi saya menundanya selama mungkin.
Synetech