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


27

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 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ó /var/wwwthư mục symlinking của mình /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ì?

Câu trả lời:


30

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, rất có thể bạn đã cài đặt AppArmor theo mặc định, với cấu hình cho / usr / sbin / mysqld ở chế độ được 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

Điều này dường như không hoạt động trên Natty (11.4). Tôi đã phải khởi động MySQL bằng cách sử dụng / usr / sbin / mysqld để nó đọc thư mục dữ liệu đã thay đổi của tôi. Nếu không, nó tiếp tục đọc thư mục dữ liệu cũ của tôi. Đây có thể là một lỗi về phía tôi.
ba cốc

Ở trên không thể giải quyết vấn đề cho tôi trên Ubuntu 12.04 (Chính xác). Tôi phát hiện ra rằng người ta cần chỉnh sửa tệp /etc/apparmor.d/tunables/alias để bao gồm một dòng "bí danh / var / lib / mysql / -> / home / data / mysql /," Với vị trí này, tôi không cần bất kỳ thay đổi nào trong bất kỳ tệp AppArmor nào khác. Nó hoạt động ngay lập tức sau khi khởi động lại AppArmor với "/etc/init.d/apparmor restart" và MySQL với "restart mysql".
mak

Tôi nghĩ rằng một số quyền nhất định cần phải được đặt trên thư mục mới sẽ được sử dụng. Có ai biết chúng là gì không? Tôi biết cài đặt mysql tạo người dùng mysql ... và theo mặc định, tôi không thể truy cập nội dung của thư mục / var / lib / mysql.
NullVoxPopuli

4

Siêu người dùng có một hướng dẫn từng bước tốt đẹp 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!


0

Đâ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


Các hướng dẫn không thực sự hữu ích vì phần tôi không thể làm việc là AppArmour và bài đăng của bạn chỉ giải thích nó qua. Ngoài ra, trang web này có phải là câu hỏi dành riêng cho Ubuntu không? Làm thế nào để người dùng mới tìm kiếm trợ giúp biết Ubuntu cụ thể là gì hay không và họ nên hỏi họ xem họ có chung chung không?
Stephen RC

Trang web không có sẵn.
Hengjie


-1

Điều này sẽ không hoạt động như thế.

người dùng mysql có quyền ghi vào thư mục mới:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
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.