Giới thiệu
Cơ sở dữ liệu phát triển theo thời gian, đôi khi vượt xa không gian trên hệ thống tệp. Bạn cũng có thể gặp phải sự tranh chấp đầu vào/đầu ra [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. Mảng dự phòng của các đĩa độc lập [RAID], lưu trữ khối mạng và các thiết bị khác, có thể cung cấp dự phòng và các tính năng mong muốn khác. Cho dù bạn có thêm không gian, đánh giá các cách để tối ưu hóa 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ẽ hướng dẫn bạn chuyển thư mục dữ liệu MySQL.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần:
Máy chủ Ubuntu 20.04 với người dùng không root có đặc quyền
2 và tường lửa được bật. Bạn có thể tìm hiểu thêm về cách thiết lập người dùng với các đặc quyền này trong thiết lập máy chủ ban đầu của chúng tôi với hướng dẫn Ubuntu 20.04.root user withOutput
+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set [0.00 sec]
2 privileges and a firewall enabled. You can learn more about how to set up a user with these privileges in our Initial Server Setup with Ubuntu 20.04 guide.Output
+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set [0.00 sec]Một máy chủ MySQL. Nếu bạn đã cài đặt MySQL, hãy xem hướng dẫn của chúng tôi về cách cài đặt MySQL trên Ubuntu 20.04.
Trong hướng dẫn này, chúng tôi đã di chuyển dữ liệu sang một thiết bị lưu trữ khối được gắn vào
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
3. Bạn có thể tìm hiểu cách thiết lập một trong tài liệu sau về khối lượng lưu trữ khối trên DigitalOcean.Bất kể lưu trữ cơ bản nào bạn sử dụng, hướng dẫn này có thể giúp bạn chuyển thư mục dữ liệu đến một vị trí mới.
Bước 1 - Di chuyển thư mục dữ liệu MySQL
Để chuẩn bị để di chuyển thư mục dữ liệu MySQL, hãy để xác minh vị trí hiện tại bằng cách bắt đầu phiên MySQL tương tác bằng thông tin quản trị. Chạy lệnh sau để mở dấu nhắc máy chủ MySQL:
- sudo mysql
Lưu ý: Nếu bạn đã định cấu hình người dùng MySQL gốc của mình để xác thực bằng mật khẩu, bạn có thể kết nối với MySQL vì người dùng này với lệnh sau:: If you configured your root MySQL user to authenticate using a password, you can connect to MySQL as this user with the following command:
- mysql -u root -p
Khi được nhắc, hãy cung cấp mật khẩu người dùng MySQL. Sau đó, từ lời nhắc MySQL, chạy câu lệnh
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
4 sau. Điều này sẽ trả về thư mục dữ liệu hoạt động của phiên bản MySQL này, luôn được ghi lại trong biến MySQLTHER Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
5 :::- SELECT @@datadir;
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
Đầu ra 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,
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
6, do đó, thư mục bạn cần di chuyển. Khi bạn đã xác nhận điều này, hãy viết Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
7 để rời khỏi màn hình và quay lại dấu nhắc lệnh của bạn:- exit
Output
Bye
Để đảm bảo tính toàn vẹn của dữ liệu, hãy tắt MySQL trước khi thực hiện các thay đổi đối với thư mục dữ liệu:
- sudo systemctl stop mysql
Lưu ý rằng
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
8 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 kiểm tra xem bạn có thành công hay không, hãy sử dụng lệnh sau:- sudo systemctl status mysql
Bạn có thể xác nhận nó đã ngừng hoạt động nếu dòng
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
9 trong đầu ra nêu rõ, nó - exit
0 như được tô sáng trong ví dụ sau: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"
Bây giờ máy chủ đã tắt, bạn có thể sao chép thư mục cơ sở dữ liệu hiện có,
- exit
1, vào vị trí mới, Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
3, với - exit
3. Sử dụng cờ - exit
4 bảo tồn các quyền và các thuộc tính thư mục khác, trong khi - exit
5 cung cấp đầu ra dài dòng để bạn có thể làm theo tiến trình:Lưu ý: Hãy chắc chắn rằng không có dấu gạch chéo trên thư mục, có thể được thêm vào nếu bạn sử dụng hoàn thành tab. Khi có một dấu gạch chéo kéo dài,
3 sẽ đổ nội dung của thư mục vào điểm gắn kết thay vì chuyển nó vào thư mục
7 chứa. Be sure there is no trailing slash on the directory, which may be added if you use tab completion. When there’s a trailing slash,
- exit
3 will dump the contents of the directory into the mount point instead of transferring it into a containing - exit
7 directory.- sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01
Khi lệnh
- exit
3 hoàn tất, đổi tên thư mục hiện tại với tiện ích mở rộng - exit
9 và giữ cho 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 nó, bạn sẽ tránh sự nhầm lẫn có thể phát sinh từ các tệp ở cả vị trí mới và địa điểm cũ:- mysql -u root -p
0Bây giờ bạn đã sẵn sàng để tiến hành bước tiếp theo và bắt đầu cấu hình.
Bước 2 - Chỉ vào vị trí dữ liệu mới
MySQL có một số cách để ghi đè giá trị cấu hình. Theo mặc định,
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
5 được đặt thành - exit
1 trong tệp Output
Bye
2. Chỉnh sửa tệp này trong trình soạn thảo văn bản ưa thích của bạn để phản ánh thư mục dữ liệu mới. Ở đây chúng tôi sẽ sử dụng Output
Bye
3:- mysql -u root -p
1Tìm dòng bắt đầu với
Output
Bye
4. Khéo léo dòng bằng cách xóa dấu hiệu pound [Output
Bye
5] và thay đổi đường dẫn để phản ánh vị trí mới. Trong trường hợp này, nội dung tệp được cập nhật sẽ như sau:/etc/mysql/mysql.conf.d/mysqld.cnf
- mysql -u root -p
2Khi bạn đã thực hiện bản cập nhật này, hãy lưu và thoát tệp. Nếu bạn sử dụng
Output
Bye
3, bạn có thể làm điều này bằng cách nhấn Output
Bye
7, thì Output
Bye
8 và Output
Bye
9. Bây giờ, nó gần như là thời gian để đưa MySQL lên một lần nữa, nhưng trước đó, có một điều nữa để cấu hình để thành công.Bước 3 - Định cấu hình các quy tắc kiểm soát truy cập apparmor
Trong bước này, bạn cần nói với Apparmor để cho MySQL ghi vào thư mục mới bằng cách tạo bí danh giữa thư mục mặc định và vị trí mới. Apparmor là một mô -đun bảo mật trong nhân Linux cho phép các quản trị viên hệ thống hạn chế các khả năng của chương trình thông qua hồ sơ chương trình, thay vì chính người dùng. Bắt đầu bằng cách mở và chỉnh sửa tệp
- sudo systemctl stop mysql
0 của Apparmor:- mysql -u root -p
3Ở dưới cùng của tệp, giải phóng dòng sau và thêm quy tắc bí danh:
/etc/apparmor.d/tunables/alias
- mysql -u root -p
4Khi bạn hoàn thành, hãy lưu và thoát tệp.
Đối với các thay đổi có hiệu lực, hãy khởi động lại APPARMOR:
- mysql -u root -p
5Lưu ý: Nếu bạn bỏ qua bước cấu hình apparmor, bạn sẽ nhận được thông báo lỗi sau: If you skipped the AppArmor configuration step, you will receive the following error message:
- mysql -u root -p
6Vì thông báo này không tạo ra kết nối rõ ràng giữa apparmor và thư mục dữ liệu, lỗi này có thể mất một thời gian để tìm ra.
Khi bạn đã cấu hình đúng cách, bạn có thể chuyển sang bước tiếp theo.
Bước 4 - Khởi động lại MySQL
Bây giờ, thời gian để bắt đầu MySQL. Tuy nhiên, nếu bạn làm, bạn sẽ gặp phải một lỗi khác. Thay vì sự cố Apparmor, lỗi này là do
- sudo systemctl stop mysql
1, một tập lệnh hỗ trợ quản lý MySQL thông qua - sudo systemctl stop mysql
2. Bạn có thể kiểm tra tập lệnh này bằng lệnh sau:- mysql -u root -p
7Tập lệnh này kiểm tra sự tồn tại của một thư mục,
- sudo systemctl stop mysql
3 hoặc liên kết tượng trưng, - sudo systemctl stop mysql
4, phù hợp với đường dẫn thư mục dữ liệu mặc định. Nếu nó không tìm thấy một trong hai điều này, tập lệnh sẽ kích hoạt lỗi và ngăn MySQL bắt đầu:/usr/share/mysql/mysql-systemd-start
- mysql -u root -p
8Sau khi bạn kiểm tra tệp này, hãy đóng nó mà không thực hiện bất kỳ thay đổi nào.
Vì bạn cần một thư mục phù hợp hoặc liên kết tượng trưng để khởi động máy chủ, bạn phải tạo cấu trúc thư mục tối thiểu để vượt qua kiểm tra môi trường tập lệnh:
- mysql -u root -p
9Bây giờ bạn đã sẵn sàng để bắt đầu MySQL:
- SELECT @@datadir;
0Xác nhận MySQL đang chạy bằng cách kiểm tra trạng thái:
- sudo systemctl status mysql
- SELECT @@datadir;
2Để đảm bảo rằng thư mục dữ liệu mới thực sự được sử dụng, hãy bắt đầu Màn hình MySQL:
- SELECT @@datadir;
3Bây giờ truy vấn cho giá trị của thư mục dữ liệu một lần nữa:
- SELECT @@datadir;
- SELECT @@datadir;
5Sau khi bạn khởi động lại MySQL và xác nhận rằng nó sử dụng vị trí mới, hãy tận dụng cơ hội để đảm bảo rằng cơ sở dữ liệu của bạn có chức năng đầy đủ. Khi bạn đã hoàn thành, hãy thoát cơ sở dữ liệu như sau và quay lại dấu nhắc lệnh:
- exit
Output
Bye
Bây giờ 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 thư mục dữ liệu sao lưu:
- SELECT @@datadir;
8Sau đó, khởi động lại MySQL một lần cuối cùng:
- SELECT @@datadir;
9Và cuối cùng, xác nhận nó hoạt động như mong đợi bằng cách kiểm tra trạng thái:
- sudo systemctl status mysql
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
1Nếu dòng
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set [0.00 sec]
9 tuyên bố - sudo systemctl stop mysql
6 điều này xác nhận rằng MySQL đang hoạt động.Sự kết luận
Trong hướng dẫn này, bạn đã học cách di chuyển thư mục dữ liệu MySQL, sang một vị trí mới và cập nhật danh sách kiểm soát truy cập apparmor Ubuntu, để phù hợp với điều chỉnh. Mặc dù chúng tôi đã sử dụng một thiết bị lưu trữ khối, các hướng dẫn ở đây phải phù hợp để xác định lại vị trí của thư mục dữ liệu bất kể công nghệ cơ bản.
Để biết thêm thông tin về việc quản lý các thư mục dữ liệu MySQL, hãy xem các phần sau trong tài liệu chính thức của MySQL:
- Thư mục dữ liệu MySQL
- Thiết lập nhiều thư mục dữ liệu