2010-11-15 35 views
11

Trong bản cài đặt MySQL của tôi, tôi có một cơ sở dữ liệu InnoDB mà tôi biết sẽ phát triển rất lớn nên tôi đã quyết định chuyển nó sang đĩa riêng. Tôi đã hy vọng để làm điều này bằng cách di chuyển các tập tin vào đĩa khác và sau đó tạo ra một liên kết tượng trưng nhưng tôi chạy vào lỗi!Di chuyển cơ sở dữ liệu MySQL InnoDB để tách ổ đĩa

Đây là những gì tôi đã làm:

1) Trong my.cnf tôi đã thiết

[mysqld] innodb_file_per_table

(Công trình này, tôi có một .ibd mỗi .frm trong thư mục cơ sở dữ liệu.)

2) tôi đã kiểm tra nếu liên kết tượng trưng là ok với SHOW VARIABLES LIKE "have_symlink";

(tôi biết rằng tài liệu ation nói:

Chỉ hỗ trợ đầy đủ các liên kết cho Bảng MyISAM. Đối với các tệp được sử dụng bởi bảng cho các công cụ lưu trữ khác, bạn có thể gặp sự cố lạ nếu bạn cố gắng sử dụng liên kết tượng trưng.

Nhưng tôi cần chìa khóa nước ngoài ...)

3) Tôi di chuyển các thư mục cơ sở dữ liệu và tạo ra một liên kết tượng trưng.

4) Khởi động lại mysql và thử:

mysql> USE db_name 
Database changed 
mysql> SHOW TABLES; 
ERROR 1018 (HY000): Can't read dir of './db_name/' (errno: 13) 
mysql> exit 
[email protected]# perror 13 
OS error code 13: Permission denied 

liên kết tượng trưng là (như mong đợi) lrwxrwxrwx mysql mysql db_name -> /path-to/db_name/

điều khoản thư mục cơ sở dữ liệu là drwx------ mysql mysql

tất cả các quyền tập tin là -rw-rw---- mysql mysql

Tôi đang sử dụng Ubuntu 10.04 Server với MySQL 5.1.41 (mặc định từ apt).

Bạn đã thực hiện thành công công việc này chưa?

+0

Cách dễ nhất là lấy mysqldump và sau đó thả cấu hình thay đổi lược đồ và nhập nó, nếu DB của bạn không thực sự lớn. – vinothkr

+0

Tôi muốn giữ phần còn lại của các cơ sở dữ liệu trên đĩa hệ thống (đối với drupal và những thứ như vậy) và chỉ di chuyển cái cụ thể này ra khỏi thư mục dữ liệu. Xin lỗi nếu điều này không rõ ràng từ câu hỏi. – Norling

+0

Điều này có thể phù hợp hơn với http://serverfault.com/ - bỏ phiếu để di chuyển nó ... – richsage

Trả lời

16

Tắt công trình này nhưng appArmor cũ của tôi đã chặn MySQL đọc thư mục đã di chuyển.

sudo nano /etc/apparmor.d/usr.sbin.mysqld 

dòng add:

/new-db-path/ r, 
/new-db-path/** rwk, 

Cảm ơn đã giúp đỡ!

+0

cùng một vấn đề trên Ubuntu 12.04 sau khi di chuyển cơ sở dữ liệu và thay thế nó bằng một liên kết tượng trưng. Chỉnh sửa hồ sơ AppArmor khi bạn đề xuất công việc. Cảm ơn! –

+0

Cảm ơn. Đây cũng là giải pháp của tôi. – Yada

+0

Cảm ơn! Đừng quên khởi động lại dịch vụ apparmor sau khi thay đổi điều này –

10

Norling Jr. lưu ngày của tôi với đầu AppArmor, nhưng kể từ khi tôi đã có một số rắc rối cấu hình nó , Tôi đang viết một câu trả lời chi tiết hơn. Tôi đang sử dụng Ubuntu 12.04.

Bắt đầu trở thành gốc để cứu sự cần thiết phải gõ tất cả những gì sudos:

sudo su - 

Sau MySQL docs, trước tiên bạn di chuyển đã tạo cơ sở dữ liệu thư mục của bạn để con đường khác:

mv /var/lib/mysql/yourdatabase /new/path/ 

Dưới đây là cái bẫy đầu tiên của tôi. Kiểm tra nếu người dùng mysql có quyền truy cập vào con đường mới này:

sudo -u mysql ls /new/path/yourdatabase 

Nếu bạn có quyền truy cập bị từ chối, có lẽ bạn nên cung cấp cho thực hiện phép mỗi dir mẹ:

chmod a+x /new /new/path/ 

thử nghiệm để truy cập các tập tin một lần nữa. Nếu nó vẫn không hoạt động, hãy thử hỏi một câu hỏi trong Stack Overflow :-)

liên kết vị trí dir mới và cung cấp cho nó những điều khoản chính xác: file cấu hình địa phương chỉnh sửa AppArmor

ln -s /new/path/yourdatabase /var/lib/mysql/ 
chown mysql:mysql /var/lib/mysql/yourdatabase 

Hãy. Bạn không nên thay đổi tập tin /etc/apparmor.d/usr.sbin.mysqld. Chỉnh sửa conf địa phương, do đó bạn sẽ không mất nó sau khi cập nhật hệ thống:

emacs /etc/apparmor.d/local/usr.sbin.mysqld 

thêm các cấu hình Norling Jr:

/new/path/yourdatabase/ r, 
/new/path/yourdatabase/** rwk, 

Đừng bỏ lỡ các dấu phẩy cuối cùng. Lưu tập tin và tải lại cấu hình AppArmor:

apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld 

này sẽ không chỉ cần tải lại AppArmor cấu hình MySql, mà còn kiểm tra nó nếu không có bất kỳ lỗi cú pháp (một điều rất quan trọng). Nếu bạn không chạy trình phân tích cú pháp, ký tự mới sẽ không được áp dụng.

Cuối cùng, chỉ cần mở ứng dụng khách mysql và nhập SHOW DATABASES. Nếu cơ sở dữ liệu của bạn xuất hiện, mọi thứ có lẽ là tốt. Nhập 'USE yourdatabase' cho một lần kiểm tra khác.

Một thử nghiệm mạnh mẽ hơn cũng sẽ tải lại dịch vụ mysql: 'dịch vụ mysql restart' và cố truy cập cơ sở dữ liệu của bạn.

Bây giờ tôi sẽ nhớ lần sau tôi cần làm điều đó. Google và SO cùng là những máy tính xách tay tốt nhất trên thế giới :-)

+2

điều này cực kỳ hữu ích, THANKS! –

1

Nó nên có thể sử dụng gắn kết địa phương (bindings) có quyền phù hợp và gắn kết oprions (bao gồm cả selinux hoặc AppArmor bối cảnh):

/dev/sdc on /var/lib/mysql/my-db/ 
/dev/sdd on /var/lib/mysql/her-db/ 
fs.example.com:/path/to/wherever on /var/lib/mysql/my-other-db/ 

Mặc dù Tôi chưa thử nghiệm giải pháp này vì vậy hãy tự chịu rủi ro.

+0

Tôi có thể xác nhận tác phẩm này. Bạn phải dành toàn bộ phân vùng để chỉ là thư mục con mysql, nhưng một khi bạn làm điều đó và gắn kết nó đúng cách nó hoạt động tuyệt vời. – GaryO

Các vấn đề liên quan