Thay đổi thư mục dữ liệu MySQL trong Ubuntu Server 10.04


9

Tôi đã gặp lỗi sau khi cố gắng thay đổi thư mục dữ liệu trong máy chủ Ubuntu 10.04.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

2
... Và câu hỏi của bạn là? Lưu ý rằng nếu bạn chỉ di chuyển nội dung của các thư mục và không có tệp nào, bạn sẽ mất tất cả nội dung bảng InnoDB.
bobince

không có câu hỏi / muỗng. Chỉ cần hình dung điều này có thể thú vị với mọi người xung quanh đây. Điểm hay về nội dung bảng InnoDB!

2
Nếu bạn muốn hỏi và trả lời câu hỏi của riêng bạn thì tốt, nhưng hãy dành thời gian để thực sự hỏi một câu hỏi và cung cấp câu trả lời của bạn như một câu trả lời.
Zoredache

Câu trả lời:


8

Sau một số nhầm lẫn chung về quyền, OP nhận ra rằng vấn đề không phải là anh ta không có quyền và đường dẫn quyền mà AppArmor đã ngăn MySQL đọc và ghi vào vị trí mới.

Đây là giải pháp của anh ấy:

Trước tiên hãy dừng MySQL để không có gì lạ xảy ra trong khi bạn đang loay hoay:

$ sudo stop mysql

Sau đó di chuyển tất cả các thư mục cơ sở dữ liệu đến nhà mới của họ:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

Đừng di chuyển các tập tin, chúng sẽ được tạo bởi mysql, chỉ cần di chuyển các thư mục (là cơ sở dữ liệu).

Sau đó, lịch sự yêu cầu AppArmor cho phép mysql sử dụng thư mục mới:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

Sau đó nói với mysql rằng datadir đã di chuyển:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/

LƯU Ý: Tùy thuộc vào thiết lập cơ sở dữ liệu của bạn, bạn có thể cần phải thay đổi innodb-data-home-dir, v.v.

Sau đó khởi động lại AppArmor để đọc cài đặt mới:

$ sudo /etc/init.d/apparmor restart

Và khởi động lại MySQL bằng cách sử dụng datadir mới:

$ sudo start mysql

2
bạn có thể duy trì và chạy cơ sở dữ liệu bằng cách liên kết các tệp đến vị trí mới của chúng, thay vì di chuyển chúng ... trừ khi tất nhiên hai vị trí datadir nằm trên các phân vùng riêng biệt.
cpbills

Hướng dẫn chỉ di chuyển các thư mục không chính xác trong trường hợp bạn đang sử dụng innodb. Trong trường hợp đó, bạn sẽ phải di chuyển dữ liệu innodb và các tệp nhật ký (ibdata *, ib_logfile *).
đồi

Một lưu ý cho người khác bất cẩn như tôi. Bạn phải có dấu gạch chéo trong đường dẫn trong cấu hình AppArmor /new-mysql-dir/ rnếu không nó sẽ vẫn bị từ chối. Công cụ Linux cơ bản nhưng tôi không bao giờ có thể có dấu gạch chéo chính xác.
Jeff

Tôi vẫn bị AppArmor từ chối. Chủ đề này đã giúp làm cho nó vượt qua rào cản cuối cùng.
Jeff
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.