Thay đổi thư mục dữ liệu MariaDB sang vị trí mới trên CentOS 7

Các cơ sở dữ liệu sẽ phát triển theo thời gian, đôi khi vượt quá không gian trên hệ thống tệp. Bạn cũng có thể gặp sự cạnh tranh 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. RAID, lưu trữ khối qua mạng và các thiết bị khác có thể cung cấp tính toàn vẹn dữ liệu và các tính năng hấp dẫn khác. Dù bạn đang thêm không gian, đánh giá cách tối ưu hiệu suất hoặc muốn tận dụng các tính năng lưu trữ khác, hướng dẫn này sẽ giúp bạn biết cách thay đổi thư mục dữ liệu MariaDB.

Điều kiện tiên quyết để thay đổi thư mục dữ liệu MariaDB sang một vị trí khác

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

  • Một máy chủ CentOS 7 với một người dùng không phải là người dùng root có đặc quyền sudo và đã cài đặt MariaDB.

Trong ví dụ này, chúng ta sẽ di chuyển dữ liệu đến một thiết bị lưu trữ khối được gắn kết tại /mnt/volume-nyc1- Dù bạn sử dụng lưu trữ dưới mọi hình thức nào, hướng dẫn này có thể giúp bạn thay đổi thư mục dữ liệu MariaDB sang một vị trí mới.

Các bước thay đổi thư mục dữ liệu MariaDB sang vị trí mới

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

Để chuẩn bị cho việc di chuyển thư mục dữ liệu của MariaDB, hãy xác minh vị trí hiện tại bằng cách bắt đầu một phiên tương tác sử dụng các thông tin đăng nhập quản trị.

$ mysql -u root -p

Khi yêu cầu, nhập mật khẩu root của MariaDB. Sau đó, từ giao diện dòng lệnh mysql, chọn thư mục dữ liệu:

MariaDB [(none)]> select @@datadir;
Output
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

Kết quả này xác nhận rằng MariaDB được cấu hình để sử dụng thư mục dữ liệu mặc định là /var/lib/mysql/. Đó là thư mục chúng ta cần di chuyển. Sau khi xác nhận điều này, gõ "exit" và nhấn "ENTER" để thoát khỏi màn hình monitor.

mysql> exit

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

$ sudo systemctl stop mariadb

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

$ sudo systemctl status mariadb

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ả thông báo rằng máy chủ đã dừng:

Output
. . .
Dec 16 18:29:26 mysql systemd[1]: Stopped MariaDB database server.

Bây giờ sau khi máy chủ đã tắt, chúng ta sẽ sao chép thư mục cơ sở dữ liệu hiện tại đến vị trí mới bằng cách sử dụng rsync. Sử dụng cờ -a để bảo tồn quyền và các thuộc tính khác của thư mục, trong khi cờ -v cung cấp đầu ra chi tiết để bạn có thể theo dõi tiến trình.

Lưu ý: Hãy đảm bảo không có dấu gạch chéo cuối cùng trên thư mục, điều này có thể được thêm nếu bạn sử dụng hoàn thành bằng tab. Khi có dấu gạch chéo cuối cùng, rsync sẽ sao chép nội dung của thư mục vào điểm gắn kết thay vì di chuyển nó vào thư mục mysql chứa dữ liệu:

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

Sau khi quá trình sao chép rsync hoàn tất, đổi tên thư mục hiện tại bằng một phần mở rộng .bak và giữ nó cho đến khi chúng ta đã xác nhận rằng quá trình di chuyển đã thành công. Bằng cách đổi tên, chúng ta sẽ tránh sự nhầm lẫn có thể phát sinh từ việc có các tệp tin trong cả vị trí mới và cũ:

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

Bây giờ chúng ta đã sẵn sàng để tập trung vào cấu hình.

Bước 2 - Chỉ định vị trí dữ liệu mới

MariaDB có nhiều cách để ghi đè các giá trị cấu hình. Theo mặc định, giá trị datadir được đặt là /var/lib/mysql trong tệp /etc/my.cnf. Hãy chỉnh sửa tệp này để phản ánh thư mục dữ liệu mới:

$ sudo vi /etc/my.cnf

Tìm dòng bắt đầu bằng datadir= và thay đổi đường dẫn sau đó để phản ánh vị trí mới. Ngoài ra, vì socket trước đây nằm trong thư mục dữ liệu, chúng ta cần cập nhật nó đến vị trí mới:

[mysqld]
. . .
datadir=/mnt/volume-nyc1-01/mysql
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
. . .

Sau khi cập nhật các dòng hiện tại, chúng ta cần thêm cấu hình cho client mysql. Chèn các thiết lập sau vào cuối tệp cấu hình, nhưng phải đặt trên dòng include để không phân tách các chỉ thị trong khối [mysqld]:

[client]
port=3306
socket=/mnt/volume-nyc1-01/mysql/mysql.sock

!includedir /etc/my.cnf.d

Khi bạn hoàn thành, nhấn ESCAPE, sau đó gõ :wq! để lưu và thoát khỏi tệp.

Bước 3 - Khởi động lại MariaDB

Bây giờ sau khi chúng ta đã cập nhật cấu hình để sử dụng vị trí mới, chúng ta đã sẵn sàng để khởi động MariaDB và xác minh công việc của chúng ta.

$ sudo systemctl start mariadb
$ sudo systemctl status mariadb

Để đảm bảo rằng thư mục dữ liệu mới đang được sử dụng, hãy khởi động monitor.

$ mysql -u root -p

Xem giá trị cho thư mục dữ liệu một lần nữa:

MariaDB [(none)]> select @@datadir;
Output
+----------------------------+
| @@datadir                  |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)

Gõ "exit" để thoát khỏi monitor.

Bây giờ sau khi bạn đã khởi động lại MariaDB và xác nhận rằng nó đang sử dụng vị trí mới, hãy kiểm tra xem cơ sở dữ liệu của bạn hoạt động đúng chức năng hay chưa. Sau khi xác minh tính toàn vẹn của dữ liệu hiện có, bạn có thể xóa thư mục sao lưu dữ liệu bằng lệnh sau: sudo rm -Rf /var/lib/mysql.bak.

Trong hướng dẫn này, chúng ta đã thay đổi thư mục dữ liệu MariaDB đến một vị trí mới. Dù chúng ta đã sử dụng một thiết bị Block Storage nhưng các hướng dẫn ở đây có thể được áp dụng cho việc định nghĩa lại vị trí của thư mục dữ liệu bất kể công nghệ cơ bản. Vì MariaDB được thiết kế như một phiên bản thay thế hoàn toàn cho MySQL, bạn có thể tìm hiểu thêm về quản lý thư mục dữ liệu từ các phần này trong tài liệu chính thức của MySQL.