it-swarm-vi.com

Làm cách nào để di chuyển tệp dữ liệu MySQL vào phân vùng khác nhau?

Tôi có ổ cứng được phân vùng với hai phân vùng, vì vậy tôi có thể dễ dàng cài đặt lại Ubuntu và dùng thử các phiên bản khác nhau mà không làm mất dữ liệu thư mục chính. Nó được thiết lập như thế này:

20GB  -> /     (root)
180GB -> /home 

Tôi làm rất nhiều công việc phát triển, vì vậy tôi có liên kết tượng trưng thư mục /var/www của tôi với /home/valorin/workspace.

Nhưng tôi cũng muốn làm điều này với các tệp dữ liệu MySQL của mình, vì tôi cảm thấy khó chịu vì mỗi lần cài đặt lại máy, tôi cần thực hiện một SQLdump đầy đủ và sau đó khôi phục tất cả các DB trước khi tôi có thể làm được nhiều việc hơn.

Cách tốt nhất để làm điều này mà không phá vỡ MySQL là gì?

28
Stephen RC

Vâng, thực sự có một câu trả lời cụ thể của Ubuntu cho câu hỏi này.

Như được đề cập bởi liên kết Gergoes, về cơ bản, đây là về sửa đổi /etc/mysql/my.cnf và đặt một giá trị mới cho datadir = trong phần [mysqld] . Cho đến nay phần không cụ thể của câu trả lời.

Giả sử bạn đang chạy phiên bản Ubuntu hơi hiện đại, bạn rất có thể có AppArmor được cài đặt theo mặc định, với cấu hình cho /usr/sbin/mysqld trong chế độ thi hành. Hồ sơ mặc định đó rất có thể sẽ không chấp nhận datadir mới của bạn.

Chúng ta hãy giả sử rằng datadir mới của bạn sẽ là /home/data/mysql .

Nếu bạn mở tệp /etc/apparmor.d/usr.sbin.mysqld , bạn sẽ nằm trong số các quy tắc tìm thấy hai dòng này.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

Giả sử ví dụ của chúng tôi ở trên, chúng sẽ phải được thay thế hoặc (có lẽ tốt hơn) được bổ sung bởi hai dòng này.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

Trước khi chúng tôi có thể khởi động máy chủ MySQL của mình, với datadir mới, chúng tôi cũng sẽ phải tải lại rõ ràng hồ sơ apparmor mới của chúng tôi.

$ Sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
31
andol

Siêu người dùng có một hướng dẫn từng bước rất hay về cách giải quyết vấn đề này

Đây là một bộ hướng dẫn khác để làm điều tương tự http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Ở đây nó được đăng lại. Đi và bỏ phiếu ban đầu nếu bạn có thể trên siêu người dùng.

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

Đây là giải pháp của tôi:

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, 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

thêm dòng:

/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 

thay đổi dòng:

datadir=/var/lib/mysql

đến:

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

Hi vọng điêu nay co ich!

4
nelaaro

Đối với những người như tôi làm việc với VirtualBox và cần chuyển datadir MySQL sang thư mục dùng chung trên hệ thống Máy chủ, hãy làm theo hướng dẫn đơn giản tại http://vacilando.org/en/article/moving-mysql-data -files-virtualbox-shared-thư mục

0
Vacilando

Đây thực sự không phải là Ubuntu cụ thể. Tuy nhiên, đây là một cái gì đó có thể giúp: http://developer.spikeource.com/wiki/index.php/How_to_change_the_mysql_database_location

0
Nathan Osman