Cách nhanh nhất để di chuyển cơ sở dữ liệu từ máy chủ này sang máy chủ khác


7

Tôi đang di chuyển một cơ sở dữ liệu MySQL duy nhất (~ 10GB không nén) từ máy chủ này sang máy chủ khác trên cùng một mạng. Phiên bản MySQL hiện tại là 5.1.41và phiên bản mới là 5.5.24. Cơ sở dữ liệu chứa cả bảng MyISAM và InnoDB. Có thể sử dụng phương pháp này:

  1. Tắt MySQL trên cả hai máy chủ
  2. Sao chép /datathư mục từ máy chủ cũ sang máy chủ mới
  3. Bắt đầu máy chủ mới

Tôi nhận ra câu hỏi cơ bản này có thể đã được hỏi 1000 lần trước đây nhưng hầu hết những câu hỏi tôi từng thấy không đề cập đến việc thay đổi phiên bản & hỗ trợ cả MyISAM và InnoDB.

Câu trả lời:


5

Nếu bạn đang thay đổi phiên bản, ĐỪNG CHUYỂN ĐỔI SCHema mysql .

Tại sao bạn không nên di chuyển thư mục mysql? Nó phải làm với các đặc quyền xác thực.

Số lượng cột trong mysql.user khác nhau từ phiên bản này sang phiên bản khác

Nếu bạn chạy desc mysql.user

  • Bạn sẽ thấy 31 hàng cho MySQL 4.1
  • Bạn sẽ thấy 37 hàng cho MySQL 5.0
  • Bạn sẽ thấy 39 hàng cho MySQL 5.1
  • Bạn sẽ thấy 42 hàng cho MySQL 5.5

Tôi đã viết về điều này trước đây

Nó là OK để di chuyển mọi thứ khác. Trên máy mới có MySQL 5.5.24, hãy làm điều này:

mv /var/lib/mysql /var/lib/mysql/mysql55
mkdir /var/lib/mysql
<scp or rsync /var/lib/mysql of MySQL 5.1.41 over to /var/lib.mysql of MySQL 5.5.24>
rm -f /var/lib/mysql/mysql/*
cp /var/lib/mysql/mysql55/* /var/lib/mysql/mysql/*
chown -R mysql:mysql /var/lib/mysql
service mysql start

Vì vậy, câu hỏi vẫn còn:

Làm thế nào để bạn chuyển Đặc quyền người dùng trong MySQL 5.1.41 cũ sang MySQL 5.5.24 ???

Có hai cách để thực hiện việc này bắt đầu trên máy MySQL 5.1.41:

PHƯƠNG PHÁP # 1: Sử dụng pt-show-Grants

Chương trình Bộ công cụ Percona này di chuyển in ra Quyền của người dùng trong Pure SQL. Bạn có thể chạy kết quả đầu ra vào một tệp văn bản. Sau đó, thực thi tệp văn bản trong MySQL 5.5.24. Kết thúc câu chuyện.

pt-show-grants ... > MySQLUserGrants.sql

PHƯƠNG PHÁP # 2: Thi đua pt-show-trợ cấp

Tôi đã thực hiện kỹ thuật của riêng mình cho pt-show-Grants

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

Dù bằng cách nào, hãy chuyển MySQLUserGrant.sql sang máy MySQL 5.5.24 và thực thi tập lệnh

Tôi đã viết về điều này trước đây: nhập cơ sở dữ liệu myisam 5.0 vào máy chủ innodb 5.5


Điều đó thật tuyệt! Tôi thực sự không quan tâm đến quyền người dùng hiện có. Làm thế nào để tôi làm điều này và chỉ cần tạo một người dùng mới với toàn quyền trên máy chủ mới?
bloudermilk

root @ localhost không nên có mật khẩu khi cài đặt. Nó nên có đầy đủ đặc quyền rồi. Chỉ cần đăng nhập như sau : mysql -uroot -plocalhost. Sau khi vào, chạy SHOW GRANTS;nó sẽ nói bạn có quyền riêng tư đầy đủ. Bạn sẽ cần phải gán một mật khẩu. Chỉ cần chạySET PASSWORD = PASSWORD('myn3wp4$$w0rd');
RolandoMySQLDBA

Rolando, tôi phải không đồng ý với bạn đã thực hiện nâng cấp hàng chục lần từ 5.1 lên 5.5. mysql_upTHER sẽ giải quyết các khác biệt và các thay đổi tương thích ngược. Không cần phải làm điều này.
Aaron Brown

Việc nhập một kết xuất được tạo bởi phiên bản MySQL A vào phiên bản MySQL B. Các tệp kết xuất thường (luôn luôn?) Chứa "DROP TABLE foo; CREATE TABLE foo" các mysqlcơ sở dữ liệu (ví dụ như kiểm tra có lẽ MySQL cấu trúc của các bảng và làm thay đổi chúng khi cần thiết, nếu có cột thiếu?), sau đó tôi đồng ý với Rolando rằng nó có vẻ an toàn hơn để tránh nó.
Đánh dấu Doliner

1

Đã thực hiện nâng cấp 5.1-> 5.5 nhiều lần, đây là cách bạn nâng cấp từ 5.1 lên 5.5 với máy chủ thứ hai.

  1. Tắt phiên bản 5.1
  2. Sao chép thư mục dữ liệu (thường /var/lib/mysql) từ máy chủ 5.1 sang máy chủ 5.5 (thông qua rsync, scp, CDROM, bittorrent, máy đánh chữ, bất cứ điều gì)
  3. Đảm bảo thư mục dữ liệu và tất cả các tệp trên 5.5 được sở hữu bởi mysqlngười dùng
  4. Bắt đầu MySQL 5.5
  5. Kiểm tra nhật ký lỗi cho các lỗi. Bạn có thể sẽ thấy một số trường bị thiếu trong các bảng khác nhau trong mysqlcơ sở dữ liệu.
  6. chạy mysql_upgrade
  7. dừng MySQL 5.5
  8. bắt đầu MySQL 5.5
  9. Kiểm tra nhật ký lỗi một lần nữa. Những lỗi đó cần được giải quyết.
  10. Có một bơ thực vật.

Không cần bất kỳ sự phức tạp bổ sung trừ khi bạn có lỗi chưa được giải quyết trong nhật ký.


Tôi biết, có lẽ phương pháp của tôi hơi hoang tưởng. +1 cho giải pháp của bạn.
RolandoMySQLDBA

0

Di chuyển phiên bản chính nó được đề nghị bạn làm một mysqldump và tải lại. Các phiên bản nhỏ được coi là OK nhưng bạn nên chạy tệp nhị phân mysql_upTHER được cung cấp .

Cách nhanh nhất để thực hiện điều này giả định rằng các máy chủ được kết nối qua VPN để bạn xử lý mã hóa cho bạn ở cấp độ đó. kết nối mọi thứ trên VPN sẽ bổ sung thêm chi phí cho việc mã hóa lại CPU. Để chuẩn bị trên máy chủ mới, hãy thiết lập mới bằng mysql_install_db

Trên máy chủ mới chạy lần đầu tiên

nc -l 12345 | mysql -u root -p 

Điều đó sẽ chỉ treo và nghe trên cổng 12345 cho đến khi bạn thực hiện bước tiếp theo này trên máy chủ cũ

mysqldump -u root -p --databases db1 db2 db3 | nc new-server-hostname 12345 

Thực hiện tải lại như thế này sẽ cung cấp cho bạn thêm lợi ích của việc chống phân mảnh các bảng của bạn. Ví dụ này cũng ngụ ý rằng bạn không phiền khi khóa 5.1 DB trong khi kết xuất.


Thật kỳ lạ khi các tài liệu MySQL đề xuất bước hoàn toàn không cần thiết này.
Aaron Brown

Ngay cả khi bạn cảm thấy không cần thiết phải đổ / tải lại trong quá trình nâng cấp vẫn là thời gian tốt để dọn dẹp nhà cửa và chống phân mảnh bàn của bạn.
atxdba

Chắc chắn, nếu bạn có thể chịu đựng được nhiều mất điện. Tuy nhiên, tôi muốn làm điều tương tự với bảng tối ưu hóa. Nó sẽ nhanh hơn nhiều.
Aaron Brown

Kết xuất từ ​​một nô lệ, bắt đầu nô lệ, chỉ có thời gian chết là điều mà thiết lập của bạn cần để trỏ ứng dụng đến máy chủ mới trong quá trình quảng bá để thành thạo.
atxdba

Điều đó đúng, nhưng có thể mất nhiều ngày để tạo bản sao này trên bất kỳ tập dữ liệu có kích thước hợp lý nào bằng cách sử dụng mysqldump / tải và bạn phải đảm bảo rằng bạn giữ đủ các bản ghi nhị phân xung quanh. Thật đơn giản và nhanh hơn khi chỉ sao chép các tệp nhị phân, từ bản sao lưu lạnh (thời gian chết) hoặc bản sao lưu nóng / ấm (ảnh chụp nhanh Xtrabackup / hệ thống tập tin). OP đã yêu cầu "cách nhanh nhất." :) Nếu bạn muốn chống phân mảnh các bảng của mình, hãy chạy nhiều BẢNG TỐI ƯU song song trên các bảng trên máy chủ mới.
Aaron Brown
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.