Tôi đang tạm thời sử dụng máy mac của bạn tôi cho đến khi máy của tôi được bảo dưỡng. Vì vậy, vào đầu tuần này, tôi đã xóa tài khoản người dùng của mình trên máy mac của anh ấy, nơi có một loạt cơ sở dữ liệu mà tôi cần. Tôi đã sao lưu hầu hết dữ liệu người dùng trước khi xóa tài khoản đó nhưng ngay sau đó tôi nhận ra rằng mình đã bỏ lỡ việc sao lưu cơ sở dữ liệu. Điều may mắn và có thể là lý do cho điều này là thư mục dữ liệu cơ sở dữ liệu thường nằm bên ngoài tài khoản người dùng. Trong bài viết này, tôi sẽ đề cập đến các gạch đầu dòng về cách tôi lấy lại dữ liệu DB này bằng tài khoản người dùng bạn bè của mình (hoặc bạn thậm chí có thể tạo một tài khoản mới và thực hiện các bước tương tự).
- Đảm bảo mariadb vẫn được cài đặt bằng cách chạy
brew install mariadb
. Tôi thấy rằng nó có sẵn nhưng homebrew không có quyền truy cập vào thư mục cài đặt vì nó được tạo từ một tài khoản người dùng khác. Vì vậy, trước tiên, chúng tôi khôi phục điều này bằng cách chạy:
sudo chown -R $(whoami) /usr/local/bin
Nếu lệnh ném ra một kết xuất lỗi hiển thị những thư mục nào mà nó không có quyền truy cập, bạn có thể chạy cùng một lệnh cho từng thư mục. Tôi cũng đã chạy brew upgrade mariadb
để cập nhật dữ liệu với bản cài đặt mariadb mới hơn (mặc dù tôi không khuyên bạn nên chạy phần mềm này nói chung cho đến khi bạn đã sao lưu cơ sở dữ liệu).
- Tiếp theo, bạn phải tìm ra thư mục dữ liệu nào mà mariadb sử dụng và chạy chown trên đó. Điều này có thể được thực hiện bằng cách chạy:
brew services list
Thao tác này sẽ cung cấp danh sách các dịch vụ đang chạy và cấu hình đang chạy của chúng. Chỉ cần mở cấu hình tác vụ mariadb và xem tham số --datadir
trong XML - phải nằm bên trong khối đối số. Trong trường hợp của tôi, đây là --datadir=/usr/local/var/mysql
. Bây giờ sao chép đường dẫn đó và chạy:
sudo chown -R $(whoami) /usr/local/var/mysql
Tại thời điểm này, bạn có thể tự hỏi, tại sao không chỉ cần sao chép thư mục dữ liệu vào máy Mac của riêng mình và sau đó mở cơ sở dữ liệu trực tiếp? Vấn đề ở đây là thư mục chỉ có .ibd và .frm các tệp mà mySQL thực sự không thể nhập được. Vì vậy, tôi phải chạy lại máy chủ mysql với dir dữ liệu này và sau đó xuất nó.
- Tiếp theo, tôi phải dừng mọi máy chủ mysql đang hoạt động để đảm bảo rằng tôi có thể khởi động mysql một cách suôn sẻ. Tôi làm điều này bằng cách chạy:
brew services stop mariadb
ps aux | grep mysql
Lệnh cuối cùng là kiểm tra xem không có phiên bản mysql nào khác đang chạy. Nếu lệnh trả về bất kỳ tiến trình nào đang chạy mysql, thì những tiến trình đó cần phải bị giết bằng lệnh kill -9 hoặc nếu không, hãy mở Activity Monitor, sử dụng tìm kiếm để lọc mysql và buộc giết chúng theo cách thủ công.
Bây giờ, phiên bản mysql mới có thể được bắt đầu bằng cách sử dụng:
brew services start mariadb
Ngoài ra, bạn thậm chí có thể gọi chương trình được tìm thấy trong thư mục bin được đề cập trong tệp XML của cấu hình dịch vụ homebrew, tức là lấy chuỗi chương trình đầu tiên và thay thế mysqld_safe
đến mysql.server start
và chạy lệnh. Trong trường hợp của tôi, tôi đã làm điều này bằng cách chạy:
/usr/local/opt/mariadb/bin/mysql.server start
Nó sẽ trở lại THÀNH CÔNG! nếu dịch vụ bắt đầu thành công. Nếu không, bạn sẽ phải kiểm tra nhật ký lỗi (nằm trong /usr/local/var/mysql
thư mục cho tôi) để tìm ra sự cố và giải quyết nó bằng một số googling.
Và đó là khá nhiều, bây giờ bạn có thể sao lưu cơ sở dữ liệu như bạn thường làm. Tôi làm điều này bằng cách chạy:
mysql -u root -p<password>
show databases
Và điều này sẽ cung cấp một danh sách tất cả các cơ sở dữ liệu. Và sau đó thực hiện lệnh sao lưu cho từng cơ sở dữ liệu bạn muốn sao lưu như:
mysqldump -u root -p<password> dbname > dbname.sql
Và đó là khá nhiều cách nó được thực hiện. Và tôi đã airdrop cơ sở dữ liệu vào máy tính xách tay của chính mình và đã hoàn tất.