Cách thay đổi thư mục dữ liệu MySQL sang vị trí mới bằng cách sử dụng liên kết biểu tượng
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. RAID, lưu trữ khối mạng và các thiết bị khác có thể cung cấp khả năng dự phòng và các tính năng mong muốn khác.Cho dù bạn đang bổ sung thêm dung lượng, đánh giá các cách để 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ữ khác, hướng dẫn này sẽ hướng dẫn bạn cách di chuyển lại folder dữ liệu của MySQL.
Các hướng dẫn ở đây phù hợp với các server chạy một version MySQL. Nếu bạn có nhiều trường hợp, hướng dẫn Cách Di chuyển Thư mục Dữ liệu MySQL đến Vị trí Mới trên Ubuntu 16.04 có thể giúp bạn hướng dẫn thay đổi vị trí rõ ràng thông qua cài đặt cấu hình.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
-
Server Ubuntu 16.04 với user không phải root có quyền
sudo
. Bạn có thể tìm hiểu thêm về cách cài đặt user có các quyền này trong hướng dẫn Cài đặt server ban đầu với Ubuntu 16.04 . -
Server MySQL . Nếu bạn chưa cài đặt , hướng dẫn Cách cài đặt MySQL trên Ubuntu 16.04 có thể giúp bạn.
-
Bản backup database của bạn . Trừ khi bạn đang làm việc với một cài đặt mới của MySQL, bạn nên đảm bảo bạn có một bản backup dữ liệu . Hướng dẫn Cách backup database MySQL trên VPS Ubuntu có thể giúp bạn điều này.
Trong ví dụ này, ta đang di chuyển dữ liệu sang block storage device được gắn tại /mnt/volume-nyc1-01
. Bạn có thể tìm hiểu cách cài đặt một trong hướng dẫnCách sử dụng Bộ nhớ khối trên DigitalOcean .
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 đến một vị trí mới.
Bước 1 - Di chuyển Thư mục Dữ liệu MySQL
Để đảm bảo tính toàn vẹn của dữ liệu, ta sẽ tắt MySQL:
- sudo systemctl stop mysql
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 mình đã 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:
. . . Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.
Khi server ngừng hoạt động, ta sẽ di chuyển folder database hiện có đến vị trí mới:
- sudo mv /var/lib/mysql /mnt/volume-nyc1-01/mysql
Tiếp theo, ta sẽ tạo softlink :
- sudo ln -s /mnt/volume-nyc1-01/mysql /var/lib/mysql
Với softlink tại chỗ, đâ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 2 - Cấu hình luật kiểm soát truy cập AppArmor
Khi bạn di chuyển folder MySQL sang hệ thống file khác với server MySQL, bạn cần tạo một alias AppArmor.
Để thêm alias , hãy chỉnh sửa file alias
AppArmor:
- sudo nano /etc/apparmor.d/tunables/alias
Ở cuối file , thêm luật alias sau:
. . . 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
Ghi chú:
Nếu bạn bỏ qua bước cấu hình AppArmor và cố gắng khởi động mysql
, bạn sẽ gặp phải thông báo lỗi sau:
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
Đầu ra từ cả systemctl
và journalctl
kết thúc bằng:
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. Tuy nhiên, xem xét syslog
sẽ cho thấy vấn đề:
- sudo tail /var/log/syslog
Nov 24 00:03:40 digitalocean kernel: [ 437.735748] audit: type=1400 audit(1479945820.037:20): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mnt/volume-nyc1-01/mysql/mysql.lower-test" pid=4228 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=112 ouid=112
Bây giờ ta đã sẵn sàng để bắt đầu MySQL.
- sudo systemctl start mysql
- sudo systemctl status mysql
Khi bạn đã khởi động lại MySQL, hãy tận dụng cơ hội đảm bảo dữ liệu theo thứ tự và MySQL đang hoạt động như mong đợi.
Kết luận
Trong hướng dẫn này, ta đã di chuyển dữ liệu của MySQL và sử dụng softlink để làm cho MySQL nhận biết được vị trí mới. Ta cũng đã 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, 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ù công nghệ cơ bản là gì.
Cách tiếp cận này chỉ phù hợp nếu bạn đang chạy một version MySQL. Nếu bạn cần hỗ trợ nhiều version MySQL chạy trên một server , Cách di chuyển Thư mục Dữ liệu MySQL đến Vị trí Mới trên Ubuntu 16.04 có thể giúp bạn.
Các tin liên quan
Cách cài đặt MySQL trên CentOS 72016-12-01
Cách cài đặt MySQL trên Ubuntu 16.04
2016-11-23
Cách kết nối với server MySQL từ xa bằng MySQL Workbench
2016-10-21
Cách cấu hình một cụm Galera với MySQL 5.6 trên Ubuntu 16.04
2016-09-02
Cách di chuyển thư mục dữ liệu MySQL đến vị trí mới trên Ubuntu 16.04
2016-07-21
Cách tạo một cụm MySQL nhiều node trên Ubuntu 16.04
2016-06-17
Cách cài đặt MySQL trên Ubuntu 14.04
2016-03-08
Cơ sở hạ tầng SaltStack: Tạo Salt States cho server database MySQL
2015-10-05
Cách sử dụng Mytop để theo dõi hiệu suất MySQL
2015-08-27
Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên CentOS 7
2015-04-24