Windows'ta varsayılan MySQL Tablolarını yükleme (mysql_install_db)


12

Linux'ta, mysql_install_dbkomut dosyasıyla varsayılan MySQL hibe tabloları oluşturulabilir , ancak bu Windows'ta çalışmaz.

Varsayılan hibe tabloları Windows'a nasıl yüklenebilir?

(Hayır, Google'ın sonuçlarının Windows'ta otomatik olarak nasıl yüklendikleriyle ilgili olarak dolu olduğu cevabını aramıyorum, çünkü bu sadece ZIP paketinde değil, yükleyici dağıtımında da geçerlidir. MySQL kurulu ve veri dizini bozuk veya değiştirilmiş ya da benzeri.)

Yanıtlar:


13

Daha önce bununla karşılaştığımı biliyordum ve anlayabildim, bu yüzden sürücülerimi aradım ve son kez yazdığım bir toplu iş dosyası buldum.

Bu sorunu yaşayan herkes için yapmanız gereken, sunucu arka plan programını --bootstrapparametrelerle çalıştırmaktır .

İşte tüm veritabanlarını bir SQL dosyasına dökmek ve bunları yeniden almak için kullandığım komut dosyası (yani, manuel ve uygunsuz bir şekilde SQLite vacuumkomutuna bir MySQL karşılığı uygulamak ).

::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 için MySQL hibe tablolarında bu garip ikileminiz varsa, aşağıdakileri tavsiye ederim:

Adım 1. İçinde yükleyici olmayan ZIP Dosya dağıtımını alın.

2. Adım. İçeriğinin C:\MySQLZipStuff

Adım 3. Klasörü arayın C:\MySQLZipStuff\data\mysql

Adım 4. C:\MySQLZipStuff\data\mysqlÜzerindeki tüm dosyaları istediğiniz veri dizininin mysql klasörüne kopyalayın.

Adım 5. net start mysql

Eğer zaten mysql klasörünüz varsa bunu yapabilirsiniz:

Adım 1. my.iniBu satırı [mysqld] bölümüne ekleyerek düzenleyin

[mysqld]
skip-grant-tables
skip-networking

Adım 2. net stop mysql

Aşama 3. net start mysql

Bu noktada, sadece 'mysql' yazabilirsiniz ve giriş yapıyorsunuz. Ancak, Hibe tabloları devre dışı bırakıldığında GRANT komutlarını çalıştıramazsınız.

Adım 4. Manuel olarak bir süper kullanıcı girmeniz gerekecektir. Bunun gibi

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

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

Bu, kullanıcı tablosundaki tüm sütunları gösterecektir. Her sütunu şu şekilde manuel olarak değiştirmeniz gerekecektir:

GÜNCELLEME mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... NEREDEN kullanıcı = 'kök' VE ana bilgisayar = 'localhost';

c) root @ localhost için şu şekilde bir şifre oluşturun:

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

Adım 5. Çıkarın skip-grant-tablesve skip-networkingçıkarınmy.ini

6. Adım net stop mysql

Adım 7. net start mysql

Şimdi şifre olarak 'whateverpasswordyouwant' komutunu kullanarak mysql'ye root olarak giriş yapabilirsiniz.

Bir şans ver !!!


İpuçları için teşekkürler; Linux'ta yalnızca tek bir komut dosyası gerektirdiğini düşünen birçok adım var. :-(
Synetech

3

Bilginize,

bu kadar --initializekullanımdan kaldırılan ki, şimdi--bootstrap


NB. bütünlüğü uğruna:

Bunu ayrıcalıksız bir hesap kullanarak çalıştırmak için:

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

Ardından sunucuyu başlatın:

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

2

XAMPP kullanan ve bu sorunu yaşayan herkes için, XAMPP bu varsayılan mysql tablolarının bir yedeğiyle birlikte gelir.

Bu klasördeki her şeyi kopyalayın C:\xampp\mysql\backup\mysqlve C:\xampp\mysql\data\mysqlher şeyin üzerine yazarak yapıştırın .

Dikkat edin: veriler kaybolabilir - bilemezdim, temiz bir kurulum yaptım.


Bu XAMPP için kullanışlıdır, ancak MySQL'in tek bir web sunucusundan çok daha genel amaçlı olması nedeniyle oldukça sınırlı bir kullanım senaryosu.
Synetech

A, biliyorum. Ben sadece bu hata için Googling sonra bu sayfaya indi ve aynı zamanda XAMPP (benim gibi) kullanan herkes için göndermek istedim. Bunun kabul edilmiş olarak işaretlenmesini beklemiyorum, ancak başkaları için referans olarak bırakılmasını bekliyorum.
Alec Gorge

Peki tamam. El ile XAMPP sıfırlamak zorunda yaygın bir sorun olduğunu fark etmedi.
Synetech

Bunun nasıl olduğu hakkında hiçbir fikrim yok ve dikkatlice bakımlı yapılandırma dosyalarının üzerine yazma korkusu nedeniyle yükleyiciyi tekrar çalıştırmak istemedim: P
Alec Gorge

A, biliyorum! MySQL veritabanı dosyasını küçültmek için yerleşik bir metoda sahip olmadığından vacuum(SQLite3, et al. Komutu gibi ), manuel olarak dökümü ve şimdi yeni bir tane oluşturmam gerekiyor; ama her zaman bunu yapmaktan endişe ediyorum, bu yüzden mümkün olduğunca uzun süre erteledim.
Synetech
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.