Cài đặt các bảng MySQL mặc định trong Windows (mysql_install_db)


12

Trong Linux, các bảng cấp mặc định của MySQL có thể được tạo bằng mysql_install_dbtập lệnh, nhưng điều đó không hoạt động trên Windows.

Làm thế nào các bảng cấp mặc định có thể được cài đặt trên Windows?

(Không, tôi không tìm kiếm phản hồi rằng kết quả của Google được đóng gói đầy đủ về cách chúng được cài đặt tự động trên Windows, vì đó chỉ là trường hợp với bản phân phối trình cài đặt, không phải gói ZIP. Ngoài ra, điều đó không giúp ích gì cho MySQL được cài đặt và thư mục dữ liệu bị hỏng hoặc đang được thay thế hoặc như vậy.)

Câu trả lời:


13

Tôi biết rằng tôi đã phải đối mặt với điều này trước đây và đã tìm ra nó, vì vậy tôi đã tìm kiếm các ổ đĩa của mình và tìm thấy một tập tin mà tôi đã viết lần trước.

Đối với bất kỳ ai khác gặp phải vấn đề này, điều bạn cần làm là chạy trình nền của máy chủ với các --bootstraptham số.

Đây là tập lệnh mà tôi đã sử dụng để kết xuất tất cả các cơ sở dữ liệu vào một tệp SQL và nhập lại chúng (nghĩa là, thủ công, và một cách bất tiện khi thực hiện một đối tác MySQL với vacuumlệnh của 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_"

5

Nếu bạn gặp vấn đề nan giải kỳ lạ này trong các bảng cấp MySQL cho Windows, tôi khuyên bạn nên như sau:

Bước 1. Nhận bản phân phối ZIP FIle không có trình cài đặt trong đó.

Bước 2. Giải nén nội dung của nó thành C:\MySQLZipStuff

Bước 3. Tìm thư mục C:\MySQLZipStuff\data\mysql

Bước 4. Sao chép tất cả các tệp trong C:\MySQLZipStuff\data\mysqlthư mục mysql của thư mục dữ liệu bạn muốn.

Bước 5. net start mysql

Nếu bạn đã có thư mục mysql, bạn có thể thực hiện việc này thay thế:

Bước 1. Chỉnh sửa my.inibằng cách thêm dòng này vào phần [mysqld]

[mysqld]
skip-grant-tables
skip-networking

Bước 2. net stop mysql

Bước 3. net start mysql

Tại thời điểm này, bạn chỉ có thể nhập 'mysql' và bạn đang ở. Tuy nhiên, bạn không thể chạy các lệnh GRANT với các bảng cấp bị vô hiệu hóa.

Bước 4. Bạn sẽ phải nhập một siêu người dùng bằng tay. Như thế này

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

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

Điều này sẽ hiển thị tất cả các cột trong bảng người dùng. Bạn sẽ phải thay đổi thủ công từng cột như thế này:

CẬP NHẬT mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... WHERE user = 'root' AND host = 'localhost';

c) Thiết lập mật khẩu cho root @ localhost như thế này:

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

Bước 5. Xóa skip-grant-tablesskip-networkingtừmy.ini

Bước 6. net stop mysql

Bước 7. net start mysql

Bây giờ bạn có thể đăng nhập vào mysql bằng root bằng cách sử dụng 'anypasswordyouwant' làm mật khẩu.

Hãy thử một lần !!!


Cảm ơn vì những lời khuyên; đó là rất nhiều bước xem xét trên Linux, nó chỉ mất một tập lệnh. :-(
Synetech

3

FYI,

--initializebây giờ, thay vì bị phản đối--bootstrap


Lưu ý vì lợi ích của sự hoàn chỉnh

Để chạy cái này bằng cách sử dụng tài khoản không có đặc quyền:

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

Sau đó khởi động máy chủ:

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

2

Đối với bất kỳ ai sử dụng XAMPP và gặp phải sự cố này, XAMPP cung cấp bản sao lưu của các bảng mysql mặc định này.

Sao chép mọi thứ trong thư mục này C:\xampp\mysql\backup\mysqlvà dán nó vào C:\xampp\mysql\data\mysql, ghi đè lên mọi thứ.

Được cảnh báo: dữ liệu có thể bị mất - Tôi không biết, tôi đã cài đặt sạch.


Điều đó rất hữu ích cho XAMPP, nhưng đó là một tình huống sử dụng khá hạn chế vì MySQL có mục đích chung hơn rất nhiều so với chỉ một máy chủ web.
Synetech

Ồ, tôi biết. Tôi chỉ muốn đăng rằng ở đó cho bất cứ ai hạ cánh trên trang này sau khi Googling cho lỗi đó và cũng sử dụng XAMPP (như tôi). Tôi không hy vọng điều này sẽ được đánh dấu là được chấp nhận, nhưng được để lại làm tài liệu tham khảo cho người khác.
Hẻm núi Alec

Được, tuyệt đấy. Tôi không nhận ra rằng phải tự thiết lập lại XAMPP là một vấn đề phổ biến.
Synetech

Không phải, tôi không biết chuyện này xảy ra như thế nào và tôi không muốn chạy lại trình cài đặt vì sợ ghi đè các tệp cấu hình được làm cẩn thận cẩn thận: P
Alec Gorge

Ồ, tôi biết! Vì MySQL không có phương pháp tích hợp để thu nhỏ tệp cơ sở dữ liệu (như vacuumlệnh của SQLite3, và cộng sự), nên tôi phải tự đổ nó và tạo một tệp mới ngay bây giờ vì tôi không có nhiều không gian; nhưng tôi luôn lo lắng về việc đó, vì vậy tôi bỏ nó càng lâu càng tốt.
Synetech
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.