NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
14/04/2023
Lượt xem

Cách dời thư mục dữ liệu MySQL tới vị trí mới trên Ubuntu 20.04

14/04/2023
11 phút đọc
Lượt xem

Đánh giá

5/5 - (178 bình chọn)

Trong quá trình sử dụng MySQL, bạn có thể gặp tình trạng khối lượng dữ liệu trong database gia tăng và vượt quá dung lượng hệ thống tệp cho phép. Hay vấn đề xảy ra tranh chấp I/O khi dữ liệu nằm trên cùng một phân vùng với những phần còn lại của hệ điều hành. Để khắc phục những tình trạng trên, trong bài viết này Vietnix sẽ hướng dẫn bạn cách dời thư mục dữ liệu MySQL tới vị trí mới trên Ubuntu 20.04.

Điều kiện để thực hiện việc dời thư mục dữ liệu MySQL tới vị trí mới trên Ubuntu 20.04

Để hoàn thành được các bước trong bài viết này, bạn cần có:

Trong bài viết này, Vietnix sẽ hướng dẫn bạn chuyển dữ liệu sang thiết bị block storage có địa chỉ /mnt/volume-nyc1-01. Dù đang sử dụng bộ nhớ nào thì sau khi đọc bài viết bạn cũng có thể di chuyển thư mục dữ liệu đến một vị trí mới.

Hiện tại Vietnix đang cung cấp dịch vụ VPS tốc độ cao với toàn quyền quản trị giúp người dùng có thể dễ dàng cài đặt hệ điều hành Ubuntu hay MySQL mà không bị hạn chế bất cứ tính năng nào. Với đa dạng cấu hình và mức giá, bạn có thể dễ dàng chọn lựa gói dịch vụ tối ưu nhất theo nhu cầu sử dụng. Liên hệ với đội ngũ Vietnix để được tư vấn chi tiết nhất.

Bước 1 – Di chuyển thư mục dữ liệu MySQL

Trước hết, bạn cần xác minh vị trí hiện tại của thư mục dữ liệu bằng cách chạy lệnh sau để nhắc MySQL server sẵn sàng hoạt động:

sudo mysql 

Lưu ý: Nếu đã cấu hình root MySQL với cách xác thực bằng mật khẩu, bạn có thể kết nối với MySQL bằng lệnh sau:

mysql -u root -p 

Khi được nhắc, bạn hãy cung cấp mật khẩu người dùng MySQL. Sau đó, từ prompt MySQL chạy câu lệnh SELECT để trả về thư mục dữ liệu đang hoạt động trong phiên bản MySQL này.

SELECT @@datadir;

Bạn có thể nhận được output như hình với thư mục được ghi trong biến datadir của MySQL:

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

Output này đã xác nhận rằng MySQL được cấu hình sử dụng thư mục dữ liệu mặc định /var/lib/mysql/. Vì vậy, đây là thư mục bạn cần di chuyển. Khi đã xác nhận được như vậy, hãy gõ exit để rời khỏi màn hình và quay lại dấu nhắc của bạn.

exit
Output  Bye

Để đảm bảo tính toàn vẹn của dữ liệu, bạn cần tắt MySQL trước khi thay đổi thư mục với lệnh:

sudo systemctl stop mysql

Lưu ý rằng systemctl không hiển thị kết quả của tất cả các lệnh. Vì vậy, nếu bạn muốn kiểm tra xem mình đã thực thi thành công hay chưa, hãy sử dụng lệnh sau:

sudo systemctl status mysql

Bạn có thể xác nhận MySQL đã tắt khi Active ở output xuất hiện inactive (dead)như dưới đây:

Output  ● mysql.service - MySQL Community Server       Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>       Active: inactive (dead) since Wed 2022-03-23 19:03:49 UTC; 5s ago      Process: 3415 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)     Main PID: 3415 (code=exited, status=0/SUCCESS)       Status: "Server shutdown complete"

Khi máy chủ đã tắt, bạn có thể sao chép thư mục database /var/lib/mysql sang vị trí /mnt/volume-nyc1-01 với rsync. Sử dụng cờ -a để duy trì quyền và các thuộc tính thư mục khác. Đồng thời -v cung cấp output chi tiết giúp bạn dễ dàng theo dõi tiến trình:

Lưu ý: Bạn phải đảm bảo rằng không có dấu gạch chéo nào ở cuối thư mục để tránh tình trạng rsync đổ nội dung của thư mục vào mount point thay vì chuyển nó vào thư mục mới.

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

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

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

Bước 2 – Chỉ vào vị trí nơi lưu dữ liệu mới

Có nhiều cách để ghi đè lên các giá trị đã được cấu hình trong MySQL. Theo mặc định, giá trị datadir sẽ được đặt ở /var/lib/mysql trong file /etc/mysql/mysql.conf.d/mysqld.cnf. Bạn có thể chỉnh sửa tệp này trong trình soạn thảo văn bản để tạo thành thư mục dữ liệu mới. Ví dụ với việc sử dụng nano:

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

Sau đó, bạn tìm dòng bắt đầu bằng datadir=. Bỏ ghi chú dòng bằng cách xóa dấu thăng ( #) và thay đổi đường dẫn để chỉ tới vị trí mới. Nội dung tệp được cập nhật sẽ như sau:

. . . datadir=/mnt/volume-nyc1-01/mysql . . .

Khi đã cập nhật thành công, bạn hãy lưu và thoát khỏi tệp. Nếu đang sử dụng nano, bạn có thể thực hiện bằng cách nhấn CTRL + X, sau đó nhấn YENTER

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

Trong bước này, bạn cần yêu cầu AppArmor cho phép MySQL ghi dữ liệu vào thư mục mới. Trong đó, AppArmor là một module bảo mật trong Linux cho phép quản trị viên hạn chế quyền hạn thông qua cấu hình chương trình thay vì người dùng. Hãy bắt đầu bằng cách mở và chỉnh sửa file alias trên AppArmor:

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

Ở dưới cùng của tệp, bạn hãy bỏ ghi chú dòng sau và thêm quy tắc alias:

. . . alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/, . . .

Sau khi hoàn tất, hãy lưu và thoát khỏi tệp.

Để các thay đổi có hiệu lực, bạn cần khởi động lại AppArmor với lệnh:

sudo systemctl restart apparmor

Lưu ý: Nếu bỏ qua bước cấu hình AppArmor, bạn sẽ nhận được 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.

Sau khi đã cấu hình AppArmor chuẩn, bạn có thể chuyển sang bước tiếp theo.

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

Bây giờ nếu tiến hành khởi động lại MySQL ngay thì bạn sẽ gặp phải một lỗi khác. Lỗi này xuất phát từ mysql-systemd-start, một script hỗ trợ quản lý MySQL thông qua systemd. Bạn tiến hành gõ lệnh:

nano /usr/share/mysql/mysql-systemd-start

Script này kiểm tra sự tồn tại của thư mục -d hoặc symbolic link -L xem có khớp với đường dẫn thư mục dữ liệu mặc định hay không. Nếu không tìm thấy một trong hai thứ này, script sẽ gây ra lỗi và ngăn MySQL khởi động:

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

Sau khi bạn đã kiểm tra file này, hãy đóng file và đảm bảo không thực hiện thay đổi nào.

Bạn cần thư mục thích hợp hoặc symbolic link để khởi động máy chủ. Do đó, hãy tạo cấu trúc thư mục tối thiểu với lệnh sau:

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

Bây giờ khởi động MySQL với lệnh:

sudo systemctl start mysql

Xác nhận MySQL đang chạy bằng cách kiểm tra trạng thái:

sudo systemctl status mysql

Bạn có thể nhận được output như sau, chú ý vào dòng active:

Output  ● mysql.service - MySQL Community Server       Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>       Active: active (running) since Wed 2022-03-23 20:51:18 UTC; 4s ago      Process: 17145 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=>     Main PID: 17162 (mysqld)       Status: "Server is operational"        Tasks: 38 (limit: 1132)       Memory: 376.7M       CGroup: /system.slice/mysql.service               └─17162 /usr/sbin/mysqld

Để đảm bảo thư mục dữ liệu mới thực sự có thể sử dụng, hãy khởi động màn hình MySQL. Thay thế username database tương ứng của bạn:

/mysql -u username -p

Thực hiện truy vấn lại giá trị của thư mục dữ liệu:

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

Sau khi khởi động lại MySQL, cần xác nhận rằng thư mục dữ liệu đang sử dụng vị trí mới cũng như đã có đầy đủ chức năng. Cuối cùng, hãy thoát khỏi database và quay lại command prompt:

exit
Output Bye

Sau khi xác minh được tính toàn vẹn dữ liệu, bạn có thể xóa thư mục backup trước đó bằng lệnh:

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

Sau đó, hãy khởi động lại MySQL lần cuối:

sudo systemctl restart mysql

Cuối cùng, thực hiện kiểm tra trạng thái xem nó đã hoạt động đúng như mong muốn chưa:

sudo systemctl status mysql
Output  ● mysql.service - MySQL Community Server       Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>       Active: active (running) since Wed 2022-03-23 20:53:03 UTC; 4s ago      Process: 17215 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=>     Main PID: 17234 (mysqld)       Status: "Server is operational"        Tasks: 38 (limit: 1132)       Memory: 368.9M       CGroup: /system.slice/mysql.service               └─17234 /usr/sbin/mysqld

Nếu dòng Active xuất hiện trạng thái active(running) thì có nghĩa là MySQL đang hoạt động.

Ngoài ra, bạn cũng nên tham khảo thêm về MariaDB, một hệ quản trị cơ sở dữ liệu mã nguồn mở được phát triển dựa trên MySQL cũng như cách cài đặt và sử dụng MariaDB trên Ubuntu 20.04. Để có thể tận dụng các tính năng mạnh mẽ của hệ quản trị cơ sở dữ liệu mã nguồn mở này xây dựng và quản lý các ứng dụng dữ liệu hiệu quả trên Ubuntu 20.04.

Lời kết

Trên đây là những hướng dẫn đơn giản và chi tiết về cách dời thư mục dữ liệu MySQL tới vị trí mới trên Ubuntu 20.04. Hy vọng bài viết đã giúp bạn hiểu rõ về quy trình và các bước cần thiết để thực hiện việc này một cách thành công. Nếu bạn đang quan tâm đến việc di chuyển thư mục dữ liệu MySQL trên Ubuntu 20.04, hãy thực hiện các bước một cách cẩn thận và chắc chắn làm sao cho phù hợp với nhu cầu và điều kiện cụ thể của bạn.

Ngoài ra, bạn cũng có thể tìm hiểu thêm cách quản lý các thư mục dữ liệu MySQL ở những bài viết khác của Vietnix để giúp quá trình thực hiện dễ dàng hơn. Nếu bạn cần thêm thông tin hoặc có những thắc mắc cụ thể hãy để lại bình luận bên dưới, Vietnix sẽ hỗ trợ bạn nhanh chóng nhất.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG