Hướng Dẫn Khắc Phục Sự Cố ServBay MariaDB/MySQL
Tổng Quan
MariaDB và MySQL là hai hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở đứng đầu ngành, được sử dụng rộng rãi trong nhiều ứng dụng web và doanh nghiệp. ServBay tích hợp nhiều phiên bản MariaDB/MySQL sẵn sàng cho môi trường local trên macOS và Windows, giúp lập trình viên dễ dàng xây dựng và thử nghiệm. Dù ổn định, bạn vẫn có thể gặp lỗi không khởi động được, kết nối thất bại hoặc hiệu năng chậm trong quá trình sử dụng.
Hướng dẫn này giúp người dùng ServBay chẩn đoán và xử lý các sự cố MariaDB/MySQL phổ biến. Tài liệu bao gồm các lỗi thường gặp, quy trình kiểm tra, giải pháp chi tiết và lưu ý đường dẫn cùng lệnh chuyên biệt dành cho môi trường ServBay.
Lưu Ý Quan Trọng:
- Trước khi thực hiện bất kỳ thao tác nào có thể thay đổi dữ liệu hoặc cấu hình, vui lòng sao lưu cơ sở dữ liệu của bạn! ServBay có chức năng sao lưu tự động, hãy sử dụng định kỳ để bảo vệ dữ liệu.
- Ví dụ trong bài sử dụng số phiên bản (ví dụ
11.3
hoặc11.5
). Hãy thay thế bằng phiên bản bạn cài đặt thực tế trong ServBay. Bạn có thể kiểm tra thông tin này trong giao diện ứng dụng ServBay. - Các lệnh như
<username>
,<database>
,<your_backup.sql>
là mẫu đại diện. Hãy thay bằng tên người dùng, tên cơ sở dữ liệu và tên file backup của bạn. - Tài liệu dành cho cả macOS và Windows, mỗi phần sẽ ghi rõ đường dẫn và lệnh tương ứng.
Các Bước Chẩn Đoán Cơ Bản
Trước khi đi sâu vào từng lỗi, hãy thực hiện các kiểm tra cơ bản sau:
Kiểm tra trạng thái package ServBay: Mở ứng dụng ServBay, xác nhận phiên bản MariaDB/MySQL bạn cần đã bật và hiển thị là “Đang chạy”. Bạn cũng có thể kiểm tra qua dòng lệnh sau:
bashservbayctl status mariadb <version> # Ví dụ, kiểm tra trạng thái MariaDB 11.3: servbayctl status mariadb 11.3
1
2
3Xem nhật ký ứng dụng ServBay: Đôi khi ServBay sẽ ghi lại các lỗi khi khởi động, bạn có thể xem ở khu vực nhật ký trong ứng dụng hoặc kiểm tra file log chính của ServBay.
Xem nhật ký lỗi MariaDB/MySQL: Đây là bước quan trọng nhất khi phần mềm không khởi động hoặc gặp lỗi. Đường dẫn file log thường là như sau:
macOS:
bash/Applications/ServBay/logs/mariadb/<version>/<version>.err # Ví dụ, xem 50 dòng lỗi cuối của MariaDB 11.3: tail -n 50 /Applications/ServBay/logs/mariadb/11.3/11.3.err
1
2
3Windows:
cmdC:\ServBay\logs\mariadb\<version>\<version>.err # Ví dụ, xem 50 dòng lỗi cuối của MariaDB 11.3: powershell "Get-Content -Path 'C:\ServBay\logs\mariadb\11.3\11.3.err' -Tail 50"
1
2
3Hãy chú ý các dòng lỗi ở cuối file, chúng thường chỉ ra nguyên nhân sự cố.
Các Vấn Đề Phổ Biến Cùng Giải Pháp
1. Lỗi kết nối: SQLSTATE[HY000] [2002] No such file or directory
Lỗi này thường cho thấy ứng dụng khách không thể kết nối tới MariaDB/MySQL thông qua Unix socket. Trên macOS, Unix socket giúp giao tiếp nội bộ nhanh hơn so với TCP/IP. Nếu đường dẫn socket bị sai hoặc socket không tồn tại, bạn sẽ gặp lỗi này.
Nguyên Nhân và Giải Pháp:
- Gói MariaDB/MySQL chưa chạy:
- Kiểm tra trạng thái qua ServBay hoặc lệnh
servbayctl status mariadb <version>
. - Nếu chưa chạy, dùng:
servbayctl start mariadb <version>
, sau đó kiểm tra log lỗi (.err
) để biết lý do không khởi động.
- Kiểm tra trạng thái qua ServBay hoặc lệnh
- Sai đường dẫn socket (chỉ macOS/Linux):
- Ứng dụng hoặc công cụ dùng đường dẫn socket khác với cấu hình trong server MariaDB/MySQL (
my.cnf
). - macOS: Kiểm tra file cấu hình tại
/Applications/ServBay/etc/mariadb/<version>/my.cnf
với tham sốsocket
. - Windows: Không dùng Unix socket, chủ yếu dùng TCP/IP hoặc Named Pipe.
- macOS: Đảm bảo ứng dụng khách chỉ đúng đường dẫn socket, hoặc sử dụng đường dẫn mặc định của ServBay (thường ở
/Applications/ServBay/tmp/
hoặc/tmp/
, như/Applications/ServBay/tmp/mysql.sock
).
- Ứng dụng hoặc công cụ dùng đường dẫn socket khác với cấu hình trong server MariaDB/MySQL (
- Thiết lập mặc định của ServBay:
- Trong ServBay, mục “Cài đặt” -> “Máy chủ SQL mặc định”, đảm bảo bạn chọn đúng phiên bản MariaDB/MySQL làm gói mặc định. Một số công cụ như
mysql
khi không chỉ rõ-S
hoặc-h
sẽ sử dụng socket mặc định.
- Trong ServBay, mục “Cài đặt” -> “Máy chủ SQL mặc định”, đảm bảo bạn chọn đúng phiên bản MariaDB/MySQL làm gói mặc định. Một số công cụ như
- Lỗi quyền truy cập (permission):
- macOS: Người dùng chạy MariaDB/MySQL không có quyền ghi vào thư mục socket hoặc người dùng client không có quyền đọc socket. Thường ServBay sẽ xử lý quyền tự động, nhưng thay đổi thủ công có thể gây lỗi.
- Windows: Đảm bảo user chạy ServBay có quyền nghe port hoặc tạo pipe.
Cách xử lý thay thế (ép dùng TCP/IP):
- Thử kết nối dùng IP
127.0.0.1
thay cholocalhost
để ép ứng dụng sử dụng TCP/IP thay vì Unix socket. Nếu thành công, chắc chắn là lỗi socket.bashmysql -u <username> -p -h 127.0.0.1 -P 3306
1
2. Lỗi kết nối liên quan network (Connection refused
, Can't connect to MySQL server
)
Các lỗi này cho thấy ứng dụng không thể kết nối tới MariaDB/MySQL qua mạng TCP/IP.
Nguyên Nhân và Giải Pháp:
Gói MariaDB/MySQL chưa chạy: (Kiểm tra trạng thái và log như trên)
Port bị chiếm dụng:
- Đảm bảo port mặc định 3306 chưa bị app khác dùng.
macOS:
bashlsof -i :3306 # Hoặc netstat -anv | grep LISTEN | grep 3306
1
2
3Windows:
cmdnetstat -an | findstr :3306 # Hoặc PowerShell Get-NetTCPConnection -LocalPort 3306
1
2
3Nếu port bị chiếm, hãy dừng tiến trình đó hoặc đổi port trong cấu hình MariaDB/MySQL rồi khởi động lại.
- macOS:
/Applications/ServBay/etc/mariadb/<version>/my.cnf
- Windows:
C:\ServBay\etc\mariadb\<version>\my.cnf
Tường lửa chặn kết nối:
macOS:
- Kiểm tra tường lửa trong System Preferences -> Network -> Firewall.
- Cho phép tiến trình
mysqld
qua tường lửa:bash# Ví dụ, chỉnh đường dẫn cho phù hợp thực tế sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/ServBay/bin/mariadb/<version>/bin/mysqld sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/ServBay/bin/mariadb/<version>/bin/mysqld
1
2
3
Windows:
- Kiểm tra cài đặt Windows Defender Firewall hoặc phần mềm bảo mật khác.
- Thêm rule cho phép chương trình hoặc port:cmd
netsh advfirewall firewall add rule name="ServBay MariaDB" dir=in action=allow program="C:\ServBay\bin\mariadb\<version>\bin\mysqld.exe"
1
Lỗi cấu hình (
bind-address
):- Kiểm tra tham số
bind-address
trongmy.cnf
. Nếu là127.0.0.1
hoặclocalhost
thì chỉ máy local mới kết nối được qua TCP/IP. Cần kết nối từ máy khác, hãy đặt là0.0.0.0
hoặc IP cụ thể và đảm bảo tường lửa không chặn.
- Kiểm tra tham số
Lỗi mạng (
localhost
không resolve):- Đảm bảo
localhost
map đúng tới127.0.0.1
(IPv4) và::1
(IPv6).
macOS:
bashping localhost cat /etc/hosts
1
2Windows:
cmdping localhost type C:\Windows\System32\drivers\etc\hosts
1
2Đảm bảo file hosts có dòng đúng cho
localhost
. Tắt các phần mềm proxy nếu chúng làm gián đoạn traffic tớilocalhost
.- Đảm bảo
3. Gói MariaDB/MySQL không khởi động được
Nguyên Nhân và Giải Pháp:
Xem log lỗi (QUAN TRỌNG!): Nhìn log như đã nêu trên để biết lỗi cụ thể khi khởi động.
- macOS:
/Applications/ServBay/logs/mariadb/<version>/<version>.err
- Windows:
C:\ServBay\logs\mariadb\<version>\<version>.err
- macOS:
Lỗi file cấu hình: File cấu hình có cú pháp sai, đường dẫn hoặc tham số không hợp lệ.
Vị trí file cấu hình:
- macOS:
/Applications/ServBay/etc/mariadb/<version>/my.cnf
- Windows:
C:\ServBay\etc\mariadb\<version>\my.cnf
Kiểm tra cú pháp file cấu hình:
bash# macOS /Applications/ServBay/bin/mariadb/<version>/bin/mysqld --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf --validate-config # Windows C:\ServBay\bin\mariadb\<version>\bin\mysqld.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf --validate-config
1
2
3
4
5- macOS:
Port bị chiếm dụng: (Kiểm tra qua
lsof -i :<port>
hoặcnetstat
).Không đủ dung lượng ổ đĩa: Không đủ không gian cho data directory hoặc log directory.
Các thư mục liên quan:
- macOS: data
/Applications/ServBay/db/mariadb/<version>/
, log/Applications/ServBay/logs/mariadb/<version>/
- Windows: data
C:\ServBay\db\mariadb\<version>\
, logC:\ServBay\logs\mariadb\<version>\
- macOS: data
Lỗi quyền truy cập: User chạy MariaDB/MySQL không có quyền đọc file cấu hình, ghi data hoặc log. ServBay thông thường sẽ tự động cài quyền, nhưng nếu bạn sửa tay có thể gây lỗi.
Kiểm tra quyền trên macOS:
bashls -ld /Applications/ServBay/db/mariadb/<version> ls -l /Applications/ServBay/etc/mariadb/<version>/my.cnf ls -ld /Applications/ServBay/logs/mariadb/<version>
1
2
3Đảm bảo user chạy database (thường là
_mysql
) có quyền đọc, ghi, thực thi.Kiểm tra quyền trên Windows: Dùng File Explorer, kiểm tra Properties, cấp quyền đọc ghi cho tài khoản ServBay.
Dữ liệu bị lỗi/corrupt: (Xem phần "Cơ sở dữ liệu treo hoặc lỗi dữ liệu" bên dưới) Nếu shutdown không đúng cách hoặc do lỗi khác, file dữ liệu có thể hỏng khiến khởi động thất bại.
Sau khi sửa lỗi:
- Thử khởi động lại với
servbayctl restart mariadb <version>
4. Lỗi xác thực hoặc quyền người dùng
Sau khi kết nối thành công, bạn có thể gặp lỗi username/password sai hoặc thiếu quyền (Access denied
).
Nguyên Nhân và Giải Pháp:
- Sai tên đăng nhập hoặc mật khẩu: Kiểm tra kỹ username và password. ServBay có chức năng reset mật khẩu root phòng khi quên.
- Giới hạn truy cập địa chỉ Host: Tài khoản có thể chỉ cho phép kết nối từ một địa chỉ host, ví dụ như
'<username>'@'localhost'
. Kết nối từ'<username>'@'127.0.0.1'
hoặc khác host sẽ không được phép. Địa chỉ'%'
cho phép từ bất kỳ host nào. - Thiếu quyền: Người dùng không có quyền truy cập cơ sở dữ liệu hoặc thao tác nhất định (SELECT, INSERT, UPDATE, v.v.).
- Kiểm tra quyền của user:
- Đăng nhập bằng tài khoản có đủ quyền (ví dụ root):bash
mysql -u root -p
1 - Trong MySQL shell, kiểm tra quyền user:sql
SHOW GRANTS FOR '<username>'@'<hostname>'; -- Ví dụ: kiểm tra quyền của 'webapp' trên 'localhost' SHOW GRANTS FOR 'webapp'@'localhost'; -- Kiểm tra quyền của 'admin' với mọi host: SHOW GRANTS FOR 'admin'@'%';
1
2
3
4
5 - Nếu cần, sử dụng lệnh
GRANT
,REVOKE
để chỉnh sửa quyền; hoặc tạo user mới với quyền cần thiết.
- Đăng nhập bằng tài khoản có đủ quyền (ví dụ root):
5. Lỗi hiệu năng
Hiệu năng database kém sẽ ảnh hưởng chung tới ứng dụng.
Nguyên Nhân và Giải Pháp:
- Query chậm: Do câu truy vấn chưa tối ưu, thiếu index, hoặc execution plan chưa tốt.
- Kích hoạt log query chậm: Thêm vào
my.cnf
:slow_query_log = 1
vàlong_query_time = 1
(log các truy vấn lâu hơn 1 giây), chỉ rõ file log bằngslow_query_log_file
. Khởi động lại, sau đó phân tích log query chậm để tìm ra truy vấn tiêu tốn nhiều thời gian. - Dùng
EXPLAIN
: Phân tích plan truy vấn, xác định có dùng index, scan bao nhiêu dòng v.v.sqlEXPLAIN SELECT * FROM your_table_name WHERE column_name = 'value';
1 - Tối ưu câu truy vấn: Dựa vào kết quả
EXPLAIN
, sửa lại query, tránh dùngSELECT *
hoặc hàm ở WHERE, đảm bảo điều kiện có thể dùng index.
- Kích hoạt log query chậm: Thêm vào
- Thiếu hoặc index chưa tối ưu: Không có index cho cột thường dùng trong query, ORDER BY, GROUP BY.
- Phân tích cấu trúc bảng và query: Xác định cột nên tạo index.
- Tạo index:sqlLưu ý: Tạo index sẽ tăng chi phí ghi dữ liệu và chiếm thêm dung lượng, cân nhắc khi sử dụng.
CREATE INDEX idx_column_name ON your_table_name(column_name);
1
- Tham số cache chưa tối ưu: Tham số cache như
innodb_buffer_pool_size
,key_buffer_size
(MyISAM) trongmy.cnf
quá nhỏ hoặc quá lớn.- Điều chỉnh trong cấu hình: Dựa trên RAM máy và công dụng thực tế, điều chỉnh giá trị cache.
innodb_buffer_pool_size
(cho InnoDB) gợi ý đặt từ 50%-70% RAM server nếu chủ yếu phục vụ database. Sau khi đổi cấu hình, cần khởi động lại MariaDB/MySQL.ini[mysqld] # Ví dụ, chỉnh linh động theo máy innodb_buffer_pool_size = 2G # Nếu dùng MyISAM nhiều: # key_buffer_size = 256M
1
2
3
4
5
- Điều chỉnh trong cấu hình: Dựa trên RAM máy và công dụng thực tế, điều chỉnh giá trị cache.
- Hạn chế phần cứng: CPU quá tải, RAM thiếu gây swap, ổ đĩa I/O chậm. Kiểm tra bằng Activity Monitor (macOS) hoặc lệnh
top
/htop
trên terminal, xác định nguyên nhân.
6. Cơ sở dữ liệu treo hoặc lỗi dữ liệu
Database không khởi động, crash liên tục hoặc lỗi khi đọc/ghi thường do file dữ liệu bị hỏng.
Nguyên Nhân và Giải Pháp:
- Xem log lỗi: Như ở trên, log thường ghi rõ lý do crash và lỗi dữ liệu (InnoDB error, lỗi FS, lỗi phần cứng).
- macOS:
/Applications/ServBay/logs/mariadb/<version>/<version>.err
- Windows:
C:\ServBay\logs\mariadb\<version>\<version>.err
- macOS:
- Lỗi phần cứng: Lỗi ổ cứng, RAM gây ghi/xuất dữ liệu sai. Xem log hệ thống (Console.app) hoặc chạy chẩn đoán phần cứng.
- Lỗi phần mềm hoặc Bug: Một số phiên bản MariaDB/MySQL có Bug hoặc xung đột với phần mềm khác.
- Lỗi cấu hình: Tham số trong
my.cnf
sai có thể làm database không ổn định, dễ crash. - Shutdown bắt buộc/đột ngột: Tắt MariaDB/MySQL sai quy trình (đóng ServBay hay kill process) làm dữ liệu chưa được ghi đủ, file dữ liệu mất trạng thái nhất quán.
Giải Pháp:
- Thử khởi động lại an toàn: Dùng giao diện ServBay hoặc lệnh:
servbayctl restart mariadb <version>
. Dữ liệu có thể tự phục hồi. - Dùng
mysqlcheck
kiểm tra và sửa bảng: Công cụ này giúp kiểm tra lỗi dữ liệu, và có thể tự sửa (chủ yếu cho bảng MyISAM).bashLưu ý:# Dùng file cấu hình và user root do ServBay cung cấp, kiểm tra tất cả CSDL mysqlcheck --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p --check --all-databases # Với MyISAM, có thể thử tự sửa # mysqlcheck --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p --auto-repair --check --all-databases
1
2
3
4--auto-repair
chỉ hiệu quả cho MyISAM. InnoDB, cần thao tác nâng cao như "force recovery" hoặc phục hồi từ backup. - InnoDB force recovery (
innodb_force_recovery
): Nếu engine InnoDB không khởi động được (lỗi trong log), thử bật chế độ phục hồi cưỡng bức. Rất nguy hiểm, có thể gây mất hoặc lỗi dữ liệu! Chỉ dùng khi không thể khởi động và cần export dữ liệu khẩn cấp.- Sao lưu data directory trước (dù có thể đã hỏng): Copy
/Applications/ServBay/db/mariadb/<version>/
sang vị trí khác. - Sửa file
my.cnf
của phiên bản lỗi (/Applications/ServBay/etc/mariadb/<version>/my.cnf
). - Thêm vào
[mysqld]
dòng:innodb_force_recovery = N
(N là số từ 1, nếu thất bại thì tăng đến 6, mỗi lần chỉ nâng một cấp, mỗi lần thử khởi động. Nếu vẫn không được, nâng N rồi thử lại). - Khởi động lại MariaDB/MySQL:
servbayctl start mariadb <version>
. - Nếu khởi động được (dù ở chế độ chỉ đọc), lập tức backup dữ liệu bằng mysqldump!bashKiểm tra file dump có dung lượng và nội dung hợp lý!
mysqldump --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p --all-databases --routines --triggers --events > /path/to/your_emergency_backup.sql
1 - Xong backup, tắt MariaDB/MySQL:
servbayctl stop mariadb <version>
. - Sửa lại file
my.cnf
, xóa hoặc comment dònginnodb_force_recovery = N
. - Phục hồi dữ liệu: Thường cần tạo mới data directory, sau đó import file backup đã dump trước đó.
- Sao lưu data directory trước (dù có thể đã hỏng): Copy
- Phục hồi từ backup: Nếu không thể sửa được, hoặc dữ liệu vẫn lỗi, cần khôi phục từ backup đáng tin cậy. ServBay lưu backup tại:
/Applications/ServBay/backup/mariadb/<version>/
(nếu dùng chức năng backup tự động).- Lệnh phục hồi dữ liệu (giả sử muốn import vào DB
<target_database_name>
):bashLưu ý:# Đảm bảo đã tạo database đích # mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p -e "CREATE DATABASE <target_database_name>;" # Dùng lệnh import mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u <username> -p <target_database_name> < /Applications/ServBay/backup/mariadb/<version>/<your_backup.sql>
1
2
3
4
5<version>
là phiên bản MariaDB/MySQL đích.
- Lệnh phục hồi dữ liệu (giả sử muốn import vào DB
7. Lỗi sao lưu & phục hồi
Khi dùng chức năng backup của ServBay hoặc tự backup bằng mysqldump
, bạn có thể gặp lỗi.
Nguyên Nhân và Giải Pháp:
- File backup bị thiếu hoặc lỗi:
- Kiểm tra dung lượng file backup (
ls -lh /path/to/your_backup.sql
), so với dữ liệu thực tế. - Dùng text editor hoặc
less
xem nội dung, đảm bảo đúng định dạng SQL. - Nếu dùng
mysqldump
mà gặp lỗi, kiểm tra thông báo khi chạy lệnh. Nếu dùng backup của ServBay thì xem log ứng dụng để biết chi tiết.
- Kiểm tra dung lượng file backup (
- Lỗi cú pháp hoặc quyền khi nhập lại:
- Sai username, password hoặc tên DB đích.
- Thiếu quyền để import dữ liệu.
- Lỗi cú pháp SQL: nếu backup từ phiên bản hoặc hệ quản trị khác (như từ MySQL sang MariaDB), có thể không tương thích.
- Lỗi foreign key khi import: Thứ tự import bảng không đúng sẽ làm khóa ngoại (foreign key) lỗi do bảng liên quan chưa import. Có thể tạm tắt foreign key khi import, bật lại sau khi xong:sqlLưu ý: Chỉ tắt foreign key kiểm tra khi import, bật lại ngay sau đó để tránh sai lệch dữ liệu.
-- Trước khi import SET foreign_key_checks = 0; -- Sử dụng lệnh import, ví dụ: source /path/to/your_backup.sql; -- Trong MySQL Client -- Hoặc import như: mysql ... < /path/to/your_backup.sql -- Sau khi xong SET foreign_key_checks = 1;
1
2
3
4
5
6
7
8 - Lỗi charset hoặc collation: File backup dùng charset hoặc collation không tương thích với DB hoặc table đích, gây lỗi hoặc data sai. Đảm bảo DB đích config charset đồng nhất với file backup (ví dụ:
utf8mb4
).
Cách phục hồi đúng (ví dụ dòng lệnh):
macOS:
bash
# Nếu backup chỉ chứa một DB
# Đảm bảo DB đích (<target_database_name>) đã tồn tại
# mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p -e "CREATE DATABASE <target_database_name>;"
# Import với file cấu hình, user, password và DB đúng
mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u <username> -p <target_database_name> < /Applications/ServBay/backup/mariadb/<version>/<your_backup.sql>
# Nếu backup toàn bộ database (--all-databases), không cần chỉ rõ tên DB khi import
# mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u <username> -p < /Applications/ServBay/backup/mariadb/<version>/<your_backup.sql>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Windows:
cmd
REM Nếu backup chỉ chứa một DB
REM Đảm bảo DB đích (<target_database_name>) đã tồn tại
REM C:\ServBay\bin\mariadb\<version>\bin\mysql.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf -u root -p -e "CREATE DATABASE <target_database_name>;"
REM Import với file cấu hình, user, password và DB đúng
C:\ServBay\bin\mariadb\<version>\bin\mysql.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf -u <username> -p <target_database_name> < C:\ServBay\backup\mariadb\<version>\<your_backup.sql>
REM Nếu backup toàn bộ CSDL (--all-databases), không cần tên DB khi import
REM C:\ServBay\bin\mariadb\<version>\bin\mysql.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf -u <username> -p < C:\ServBay\backup\mariadb\<version>\<your_backup.sql>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Lưu ý: <version>
là phiên bản MariaDB/MySQL bạn khôi phục. File backup của ServBay luôn ở dạng dễ phục hồi, đồng thời cung cấp lựa chọn khi restore.
8. Lỗi đặc biệt: MariaDB 11.5.1 InnoDB không khởi động (ib_logfile0 was not found
/ Missing FILE_CHECKPOINT
)
Đây là lỗi nghiêm trọng đã xác nhận trên MariaDB 11.5.1 khiến engine InnoDB không thể khởi tạo hoặc phục hồi từ logfile, gây crash database.
Đặc điểm log lỗi:
Trong file log, có thể sẽ thấy các lỗi giống sau:
Ví dụ trên macOS (/Applications/ServBay/logs/mariadb/11.5/11.5.err
):
[ERROR] InnoDB: File /Applications/ServBay/db/mariadb/11.5/ib_logfile0 was not found
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
1
2
3
4
2
3
4
Ví dụ trên Windows (C:\ServBay\logs\mariadb\11.5\11.5.err
):
[ERROR] InnoDB: File C:\ServBay\db\mariadb\11.5\ib_logfile0 was not found
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
1
2
3
4
2
3
4
Hoặc:
[ERROR] InnoDB: Missing FILE_CHECKPOINT(xxxxx) at xxxxx
[ERROR] InnoDB: Log scan aborted at LSN xxxxx
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
1
2
3
4
5
2
3
4
5
Các lỗi này báo InnoDB mất hoặc không xử lý được file log, dẫn tới không tạo được engine storage.
Cách khắc phục (có thể phải di chuyển dữ liệu, hãy backup càng sớm càng tốt):
Đây là lỗi nghiêm trọng, ít khi khắc phục được bằng phương pháp truyền thống. Cách an toàn là ép chế độ force recovery để backup dữ liệu ra file sql, sau đó chuyển sang phiên bản MariaDB ổn định.
Thử chế độ force recovery để backup dữ liệu (RỦI RO!):
Sửa file cấu hình:
- macOS:
/Applications/ServBay/etc/mariadb/11.5/my.cnf
- Windows:
C:\ServBay\etc\mariadb\11.5\my.cnf
Thêm vào
[mysqld]
dòng sau:innodb_force_recovery = 6
Thử khởi động service:
bashservbayctl start mariadb 11.5
1Nếu khởi động được, backup ngay:
macOS:
bashmysqldump --defaults-file=/Applications/ServBay/etc/mariadb/11.5/my.cnf -u root -p --all-databases --routines --triggers --events > /Applications/ServBay/backup/mariadb/11.5/mariadb_11.5_emergency_backup.sql
1Windows:
cmdC:\ServBay\bin\mariadb\11.5\bin\mysqldump.exe --defaults-file=C:\ServBay\etc\mariadb\11.5\my.cnf -u root -p --all-databases --routines --triggers --events > C:\ServBay\backup\mariadb\11.5\mariadb_11.5_emergency_backup.sql
1Kiểm tra file backup đã sinh ra, đảm bảo dung lượng hợp lý.
- macOS:
Dừng MariaDB 11.5 và xử lý thư mục data version lỗi:
- Dừng MariaDB 11.5:
servbayctl stop mariadb 11.5
- Sửa file
my.cnf
, xóa hoặc comment dònginnodb_force_recovery
- Dừng MariaDB 11.5: