Hướng dẫn move mysql data directory ubuntu - di chuyển thư mục dữ liệu mysql ubuntu

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

    Output

    +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
    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 with

    Output

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

  • 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:

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

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

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

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

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

  1. 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ó
  1. 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ó,

  1. exit
1, vào vị trí mới,

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
3, với
  1. exit
3. Sử dụng cờ
  1. exit
4 bảo tồn các quyền và các thuộc tính thư mục khác, trong khi
  1. 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,

  1. exit
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
  1. exit
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,
  1. exit
3 will dump the contents of the directory into the mount point instead of transferring it into a containing
  1. exit
7 directory.

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

Khi lệnh

  1. exit
3 hoàn tất, đổi tên thư mục hiện tại với tiện ích mở rộng
  1. 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ũ:

  1. mysql -u root -p
0

Bâ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
  1. 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:

  1. mysql -u root -p
1

Tì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

  1. mysql -u root -p
2

Khi 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

  1. sudo systemctl stop mysql
0 của Apparmor:

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

  1. mysql -u root -p
4

Khi 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:

  1. mysql -u root -p
5

Lư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:

  1. mysql -u root -p
6

Vì 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

  1. sudo systemctl stop mysql
1, một tập lệnh hỗ trợ quản lý MySQL thông qua
  1. sudo systemctl stop mysql
2. Bạn có thể kiểm tra tập lệnh này bằng lệnh sau:

  1. mysql -u root -p
7

Tập lệnh này kiểm tra sự tồn tại của một thư mục,

  1. sudo systemctl stop mysql
3 hoặc liên kết tượng trưng, ​​
  1. 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

  1. mysql -u root -p
8

Sau 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:

  1. mysql -u root -p
9

Bây giờ bạn đã sẵn sàng để bắt đầu MySQL:

  1. SELECT @@datadir;
0

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

  1. sudo systemctl status mysql
  1. 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:

  1. SELECT @@datadir;
3

Bây giờ truy vấn cho giá trị của thư mục dữ liệu một lần nữa:

  1. SELECT @@datadir;
  1. SELECT @@datadir;
5

Sau 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:

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

  1. SELECT @@datadir;
8

Sau đó, khởi động lại MySQL một lần cuối cùng:

  1. SELECT @@datadir;
9

Và 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:

  1. sudo systemctl status mysql

Output

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

Nếu dòng

Output

+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
9 tuyên bố
  1. 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

Làm cách nào để chuyển thư mục dữ liệu MySQL đến một vị trí mới trong Ubuntu 20?

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. ....
Bước 2 - Chỉ vào vị trí dữ liệu mới. ....
Bước 3 - Định cấu hình các quy tắc kiểm soát truy cập apparmor. ....
Bước 4 - Khởi động lại MySQL ..

Tôi có thể sao chép thư mục dữ liệu MySQL sang máy chủ khác không?

Có hai lựa chọn rộng rãi.Chuyển/var/lib/mysql dir vào máy chủ mới như hiện tại hoặc thực hiện quy trình xuất và nhập.Sao chép toàn bộ thư mục MySQL sẽ có nghĩa là ít dữ liệu được truyền và sao chép chính xác cơ sở dữ liệu từ máy này sang máy kia.Transfer the /var/lib/mysql dir to the new server as it is or do an export and import process. Copying the whole mysql directory will mean less data being transferred and an exact replication of the database from one machine to the other.

Đường dẫn MySQL trên Ubuntu ở đâu?

Định cấu hình máy chủ MySQL trên hệ điều hành Ubuntu..
Tìm các tệp cấu hình.Theo mặc định, bạn có thể tìm thấy các tệp cấu hình MySQL® trong: /etc /mysql.....
của tôi.Tệp cấu hình CNF.....
Nhật ký tệp.....
mysqld và mysqld_safe.....
mysqladmin.....
Sao lưu.....
Cơ sở dữ liệu.....
Những bài viết liên quan..

Dữ liệu MySQL được lưu trữ trong Linux ở đâu?

MySQL lưu trữ các tệp DB trong/var/lib/mysql theo mặc định, nhưng bạn có thể ghi đè này trong tệp cấu hình, thường được gọi là/etc/my.CNF, mặc dù Debian gọi nó là/etc/mysql/my.CNF.Lưu câu trả lời này./var/lib/mysql by default, but you can override this in the configuration file, typically called /etc/my. cnf , although Debian calls it /etc/mysql/my. cnf . Save this answer.