Trang chủ / Chuyên đề / Chuyển folder dữ liệu Mysql tới vị trí mới trên Ubuntu 18.04
Thứ sáu, 06/07/2018 | 00:00 GMT+7

Chuyển folder dữ liệu Mysql tới vị trí mới trên Ubuntu 18.04

Database phát triển theo thời gian, đôi khi tăng thêm dung lượng trên hệ thống file. Bạn cũng có thể xảy ra tranh chấp I / O khi chúng nằm trên cùng một phân vùng với phần còn lại của hệ điều hành. Cho dù bạn đang bổ sung thêm dung lượng, tối ưu hóa hiệu suất hoặc tìm cách tận dụng các tính năng lưu trữ, hướng dẫn này sẽ giúp bạn cách chuyển folder dữ liệu của MySQL.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần:

Trong ví dụ này, ta đang di chuyển dữ liệu sang block storage device (thiết-bị-lưu-trữ-khối) được gắn tại /mnt/volume-nyc1-01 . Dù bạn sử dụng bộ nhớ cơ bản nào, hướng dẫn này có thể giúp bạn di chuyển folder dữ liệu sang vị trí mới.

Bước 1 - Di chuyển Folder Dữ liệu MySQL

Để chuẩn bị cho việc di chuyển folder dữ liệu của MySQL, hãy xác minh vị trí hiện tại một phiên MySQL.

  • mysql -u root -p

Khi được yêu cầu, hãy cung cấp password root MySQL. Sau đó, từ dấu nhắc MySQL, hãy chọn folder dữ liệu:

  • select @@datadir;
Output
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

Kết quả này xác nhận MySQL được cấu hình để sử dụng folder dữ liệu mặc định, /var/lib/mysql/, vì vậy đó là folder ta cần di chuyển. Khi bạn đã xác nhận điều này, hãy nhập exit để rời khỏi màn hình.

Đảm bảo tính toàn vẹn của dữ liệu, ta sẽ tắt MySQL trước khi ta thực sự thay đổi folder dữ liệu:

  • sudo systemctl stop mysql

Bạn muốn chắc chắn rằng đã thành công, hãy sử dụng lệnh sau:

  • sudo systemctl status mysql

Bạn có thể chắc chắn rằng nó đã tắt nếu dòng cuối cùng của kết quả cho bạn biết server đã dừng:

Output
. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

Bây giờ server đã tắt, ta sẽ sao chép folder database hiện có sang vị trí mới bằng rsync . Sử dụng cờ -a bảo toàn các quyền và các thuộc tính folder khác, trong khi -v cung cấp kết quả dài dòng để bạn có thể theo dõi tiến trình.

Lưu ý: Hãy chắc chắn rằng không có dấu gạch chéo vào sau folder:

  • sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01

Khi rsync hoàn tất, hãy đổi tên folder hiện tại bằng phần mở rộng .bak và giữ nó cho đến khi ta xác nhận việc di chuyển thành công. Bằng cách đặt lại tên cho nó, ta sẽ tránh nhầm lẫn có thể phát sinh từ các file ở cả vị trí mới và cũ:

  • sudo mv /var/lib/mysql /var/lib/mysql.bak

Bây giờ ta chuyển đến file cấu hình .

Bước 2 - Trỏ đến Vị trí Dữ liệu Mới

MySQL có một số cách để ghi đè các giá trị cấu hình. Theo mặc định, datadir được đặt thành /var/lib/mysql trong file /etc/mysql/mysql.conf.d/mysqld.cnf . Chỉnh sửa file này để phản ánh folder dữ liệu mới:

  • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Tìm dòng bắt đầu bằng datadir= và thay đổi đường dẫn theo sau để phản ánh vị trí mới.

Trong trường hợp , file cập nhật trông giống như kết quả bên dưới:

/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
datadir=/mnt/volume-nyc1-01/mysql
. . .

Đây có vẻ là thời điểm thích hợp để chạy lại MySQL, nhưng còn một thứ nữa cần phải cấu hình trước khi ta có thể thực hiện điều đó thành công.

Bước 3 - Cấu hình luật kiểm soát truy cập AppArmor

Ta sẽ yêu cầu AppArmor cho phép MySQL ghi vào folder mới bằng cách tạo một alias (bí-danh) giữa folder mặc định và vị trí mới. Để thực hiện việc này, hãy chỉnh sửa file alias AppArmor:

  • sudo nano /etc/apparmor.d/tunables/alias

Ở cuối file, thêm luật alias (bí-danh) sau:

/etc/apparmor.d/tunables/alias
. . .
alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/,
. . .

Để các thay đổi có hiệu lực, hãy khởi động lại AppArmor:

  • sudo systemctl restart apparmor

Lưu ý: Nếu bạn bỏ qua bước cấu hình AppArmor, bạn sẽ gặp phải thông báo lỗi sau:

Output
Job for mysql.service failed because the control process 
exited with error code. See "systemctl status mysql.service" 
and "journalctl -xe" for details.

Kết quả từ cả systemctljournalctl kết thúc bằng:

Output
Jul 18 11:03:24 ubuntu-512mb-nyc1-01 systemd[1]: 
mysql.service: Main process exited, code=exited, status=1/FAILURE

Vì các thông báo không tạo kết nối rõ ràng giữa AppArmor và folder dữ liệu, lỗi này có thể mất một chút thời gian để tìm ra.

Bước 4 - Khởi động lại MySQL

Bước tiếp theo là khởi động MySQL, nhưng nếu làm vậy, bạn sẽ gặp phải một lỗi khác. Lần này, thay vì sự cố AppArmor, lỗi xảy ra do tập lệnh mysql-systemd-start kiểm tra sự tồn tại của folder, -d hoặc liên kết mềm (softlink), -L , trùng với hai đường dẫn mặc định. Sẽ không thành công nếu chúng không được tìm thấy:

/ usr / share / mysql / mysql-systemd-start
. . .
if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then
 echo "MySQL data dir not found at /var/lib/mysql. Please create one."
 exit 1
fi

if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then
 echo "MySQL system database not found. Please run mysql_install_db tool."
 exit 1
fi

. . .

Ta sẽ tạo cấu trúc folder tối thiểu để vượt qua kiểm tra môi trường của tập lệnh.

  • sudo mkdir /var/lib/mysql/mysql -p

Bây giờ ta đã sẵn sàng để khởi động MySQL.

  • sudo systemctl start mysql
  • sudo systemctl status mysql

Đảm bảo folder dữ liệu mới đang thực sự được sử dụng, hãy khởi động trình theo dõi MySQL.

  • mysql -u root -p

Xem lại giá trị cho folder dữ liệu:

Output
+----------------------------+
| @@datadir                  |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)

Đến đây bạn đã khởi động lại MySQL và xác nhận nó đang sử dụng vị trí mới. Khi bạn đã xác minh tính toàn vẹn của bất kỳ dữ liệu hiện có nào, bạn có thể xóa folder dữ liệu sao lưu:

  • sudo rm -Rf /var/lib/mysql.bak

Khởi động lại MySQL lần cuối đảm bảo nó hoạt động như mong đợi:

  • sudo systemctl restart mysql
  • sudo systemctl status mysql

Kết luận

Trong hướng dẫn này, ta đã chuyển folder dữ liệu của MySQL đến một vị trí mới và cập nhật các ACL AppArmor của Ubuntu để phù hợp với việc điều chỉnh. Mặc dù ta đang sử dụng thiết bị Lưu trữ khối, nhưng các hướng dẫn ở đây sẽ phù hợp để xác định lại vị trí của folder dữ liệu dù lưu trữ là gì.

Để biết thêm về cách quản lý folder dữ liệu của MySQL, hãy xem các phần này trong tài liệu MySQL chính thức:



Các tin trước

Cài đặt và Sử dụng Docker với Ubuntu 18.04 2018-07-05

Cài đặt Firewall với UFW trên Ubuntu 18.04 2018-07-05

Tạo chứng chỉ Tự ký cho Apache trên Ubuntu 18-04 2018-07-05

Cài đặt MongoDB trên Ubuntu 18.04 2018-06-07

Cài đặt OpenVPN Server trên Ubuntu 18.04 2018-05-24

Cài đặt LEMP - Linux Nginx MySQL PHP trên Ubuntu 18 04 2018-05-23

Cài đặt và sử dụng PostgreSQL trên Ubuntu 18.04 2018-05-04

Cài đặt Linux Apache MySQL PHP (LAMP) trên Ubuntu 18 04 2018-04-27

Bảo mật cơ bản Ubuntu 18.04 2018-04-27

Cài đặt Apache Web Server trên Ubuntu 18.04 2018-04-27