Bạn có thể nhập MariaDB vào MySQL không?

Tôi đang cố gắng chuyển trang web của mình từ Windows Server chạy IIS 10, PHP và MYSQL 8 sang CentOS bằng Maria DB

Tôi đã xuất DB với MYSQL Workbench sang một tệp chứa yêu tinh nhưng tôi không thể lấy nó để nhập trong PhPMYAdmin. tôi nhận được lỗi này. Có ai biết cách tốt nhất để làm điều này?

Lỗi truy vấn SQL

TẠO BẢNG `wp_commentmeta` ( `meta_id` bigint unsigned NOT NULL AUTO_INCREMENT, `comment_id` bigint unsigned NOT NULL DEFAULT '0', `meta_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci DEFAULT NULL, `meta_value longtext` CHATEf8mb4 COLLATE . Tài liệu

  1. 1273 - Đối chiếu không xác định. 'utf8mb4_unicode_520_ci'

Tôi đã giải quyết vấn đề của mình

Tôi đã sử dụng một plugin WordPress có tên là "Di chuyển tất cả trong một wp" và nó hoạt động hoàn hảo

Bình luận

Nội dung được sao chép trên trang web này là tài sản của chủ sở hữu tương ứng và nội dung này không được MariaDB xem xét trước. Quan điểm, thông tin và ý kiến ​​được thể hiện bởi nội dung này không nhất thiết đại diện cho quan điểm của MariaDB hoặc bất kỳ bên nào khác

Chúng tôi đang nhận được nhiều yêu cầu di chuyển từ MariaDB sang MySQL. Dưới đây là hướng dẫn nhanh và các bước để làm theo

Trên máy chủ MariaDB

  • Tạo một kết xuất hợp lý của MariaDB (sử dụng MySQL Shell)
  • Tạo một người dùng chuyên dụng để sao chép [tùy chọn]

Trên máy chủ MySQL

  • Nhập/Tải kết xuất logic vào MySQL 8. 0 (sử dụng Vỏ MySQL)
    • Bạn có thể tải định nghĩa lược đồ và bảng mà không cần dữ liệu để sửa đổi bộ ký tự
    • Tải dữ liệu
  • Thiết lập sao chép giữa MariaDB và MySQL [tùy chọn]

Tiện ích tải & kết xuất MySQL Shell là phương pháp tốt nhất để thực hiện kết xuất logic. Những bãi chứa đó có thể được sử dụng để sao lưu logic nhưng cũng để di chuyển từ các phiên bản không thể nâng cấp vật lý tại chỗ

Đây là trường hợp di chuyển sang đám mây chẳng hạn

Cũng không thể nâng cấp tại chỗ khi chúng tôi muốn di chuyển từ phiên bản cũ hơn (hoặc thực hiện hạ cấp) của MySQL. Đây chính xác là những gì tôi đang trình bày trong bài viết này. di chuyển từ MariaDB 10. 6 đến MySQL 8. 0

Trình kiểm tra nâng cấp vỏ MySQL

Nếu chúng tôi muốn nâng cấp từ MySQL 5. 7 đến 8. 0, nên sử dụng MySQL Shell Upgrade Checker

Tuy nhiên, tiện ích MySQL Shell Upgrade Checker không hỗ trợ bất kỳ phiên bản nào dưới 5. 7, cũng không phải MariaDB

Tôi muốn nhấn mạnh rằng Trình kiểm tra nâng cấp vỏ MySQL

  • là bắt buộc đối với Nâng cấp tại chỗ
  • ít cần thiết hơn nhiều trong quá trình di chuyển bằng cách sử dụng kết xuất hợp lý

Cơ sở dữ liệu tôi đã sử dụng cho quá trình di chuyển này là cơ sở dữ liệu nhân viên và sbtest được tạo bởi sysbench

Trong toàn bộ quá trình di chuyển, sysbench tạo ra các giao dịch trên hệ thống (được kết nối với phiên bản MariaDB)

Kết xuất logic của MariaDB

Bây giờ chúng ta sẽ kết xuất dữ liệu (logic dump) bằng cách sử dụng MySQL Shell Dump & Load. Quá trình kết xuất được thực hiện song song và được lưu trữ cục bộ trên đĩa

Bạn có thể nhập MariaDB vào MySQL không?
dumpInstance() coi MariaDB là MySQL 5. 5 – lưu ý rằng GTID không tương thích giữa cả hai nền tảng

Kết xuất nhanh và chúng tôi đã có thể tải nó lên MySQL 8. 0

Chúng tôi cũng sẽ tận dụng cơ hội để chuyển sang bộ ký tự mới. UTF8mb4

Tải kết xuất vào MySQL 8. 0

Bạn nên tải người dùng trước (nếu chúng tôi định giữ họ). Người dùng được yêu cầu nếu định nghĩa được chỉ định với chế độ xem. Trong trường hợp chúng tôi không muốn chỉ định các trình xác định, bạn cần thực hiện kết xuất logic bằng cách sử dụng tùy chọn tương thích strip_definers như thế này

MariaDB JS> util.dumpInstance('/home/fred/dump/maria-10.6.7',
            {'compatibility': ['strip_definers']})

Trước tiên, chúng tôi tải tất cả các định nghĩa lược đồ và bảng bằng tùy chọn

MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
0 set false. Chúng ta cũng cần bỏ qua phiên bản của kết xuất

Bạn có thể nhập MariaDB vào MySQL không?

Khi tất cả các lược đồ và bảng được tải, chúng tôi sửa đổi bộ ký tự mặc định như thế này

Bạn có thể nhập MariaDB vào MySQL không?

Khi tất cả các sửa đổi được thực hiện, chúng tôi có thể tải dữ liệu song song

Bạn có thể nhập MariaDB vào MySQL không?
nhiều chủ đề có thể được chỉ định

Vấn đề tương thích

Cũng có thể MySQL Shell Dump không hoạt động với MariaDB vì nó không được hỗ trợ. Ví dụ: tùy thuộc vào định nghĩa dữ liệu của bạn, có thể cần phải tắt kết xuất bằng cách sử dụng khối. Điều này sẽ làm giảm tốc độ của các hoạt động kết xuất và tải

Di chuyển trực tiếp

Thông thường khi chúng ta muốn thực hiện migration với thời gian chết tối thiểu, chúng ta phải sử dụng bản sao. Lưu lượng truy cập vào ứng dụng không cần phải dừng trong quá trình kết xuất, trong khi khôi phục dữ liệu cho máy chủ mới

Vì vậy, khi máy chủ mới sẵn sàng, nó cần bắt kịp tất cả các giao dịch được thực hiện trong khoảng thời gian đó

Bản sao không đồng bộ sau đó được sử dụng để bắt kịp và chỉ khi máy chủ cũ và máy chủ mới được đồng bộ hóa, chúng tôi mới có thể quyết định chuyển lưu lượng (chuyển đổi) sang máy chủ mới

Bản sao có hoạt động giữa MariaDB và MySQL 8 không. 0?

MySQL cho phép sao chép từ phiên bản cũ sang phiên bản mới (không ngược lại). Vì vậy, nếu ứng dụng của bạn không sử dụng các tính năng dành riêng cho MariaDB, thì đây hoàn toàn không phải là vấn đề

Tôi đã thảo luận với một người bạn trong Percona Live và anh ấy giải thích với tôi rằng anh ấy đã sử dụng kỹ thuật này để di chuyển tất cả cơ sở dữ liệu của mình (sản xuất và phát triển) từ MariaDB sang MySQL 8. 0. Điều đó đại diện cho hàng terabyte dữ liệu

Chuẩn bị nhân rộng

từ chối trách nhiệm

Một số từ xúc phạm có thể xuất hiện trong một số lệnh. Trong MySQL, chúng tôi chú ý rất nhiều đến điều đó và chúng tôi đang xóa những từ xúc phạm đó ở mọi nơi, lệnh, nhận xét, kết quả, mã…

Để sao chép từ MariaDB sang MySQL 8. 0, trước tiên chúng tôi cần một người dùng chuyên dụng

MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';

Trong thư mục nơi chúng tôi lưu trữ kết xuất, có một tệp tên là

MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
1 chứa tất cả siêu dữ liệu của kết xuất

Chúng tôi sẽ sử dụng tệp đó để lấy tên và vị trí của tệp nhật ký nhị phân mà từ đó chúng tôi cần bắt đầu quá trình sao chép

Bạn có thể nhập MariaDB vào MySQL không?
@. json

Bắt đầu sao chép

Trên MySQL 8. 0, nếu chúng tôi muốn sử dụng GTID (luôn được khuyến nghị), chúng tôi cần thay đổi chế độ GTID để cho phép sao chép từ máy chủ MariaDB

MySQL> SET PERSIST gtid_mode=on_permissive;

Sau đó, chúng ta có thể thiết lập bản sao

MySQL> CHANGE REPLICATION SOURCE TO source_host='localhost',
              source_port=10607, source_user='repl',
              source_password='repl_passwd', 
              source_log_file='mariab-bin.000004', source_log_pos=20972403;

Và chúng ta có thể bắt đầu bản sao và đợi độ trễ giảm xuống

MySQL> START REPLICA;
MySQL> SHOW REPLICA STATUS\G
Bạn có thể nhập MariaDB vào MySQL không?

Kết luận

Chúng tôi hiện đã sẵn sàng chuyển tất cả lưu lượng truy cập (sysbench) sang MySQL 8 mới. 0 và chúng tôi có thể gỡ bỏ máy chủ MariaDB cũ

Chúng tôi không ngừng cải tiến tiện ích MySQL Shell Dump & Load. Nếu bạn gặp sự cố, vui lòng gửi lỗi hoặc thêm nhận xét về bài viết này

Thích di chuyển sang MySQL 8. 0

Câu hỏi thường gặp

Làm cách nào tôi có thể di chuyển từ các phiên bản MariaDB cũ hơn (10. 0, 10. 1, 10. 2, 10. 3,. ) sang MySQL 8. 0?

Sử dụng chính xác cùng một kỹ thuật tạo các kết xuất hợp lý. Và nhập chúng

Tôi đã đề cập đến chủ đề như vậy trong các bài viết trước. [1], [2]

Chúng tôi có thể thực hiện nâng cấp tại chỗ từ MariaDB lên MySQL 8 không. 0?

Không, MariaDB và MySQL 8. 0 bây giờ quá khác. Những sản phẩm đó đang sử dụng cùng một giao thức nhưng khác nhau. Ngay cả InnoDB giờ cũng khác giữa 2 cơ sở dữ liệu đó

Là bản sao từ MariaDB sang MySQL 8. 0 được hỗ trợ?

Nếu bạn đặt chế độ GTID thành cho phép ở phía MySQL, nó hầu như sẽ hoạt động mà không gặp vấn đề gì. Tránh sử dụng các tính năng cụ thể của MariaDB vì nó sẽ phá vỡ quá trình sao chép

Tôi có thể tải người dùng bằng cách sử dụng MySQL Shell Dump & Load không?

Không, vì cú pháp tạo người dùng không còn tương thích giữa cả hai cơ sở dữ liệu. Tuy nhiên, bạn có thể sử dụng plugin MySQL Shell để sao chép người dùng, xem bài viết này

Ví dụ

Bạn có thể nhập MariaDB vào MySQL không?
tải người dùng MariaDB bằng MySQL Shell
Bạn có thể nhập MariaDB vào MySQL không?
Ví dụ về plugin sao chép người dùng MySQL Shell

Xin lưu ý rằng một số từ khóa cụ thể của MariaDB như

MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
2 không được hỗ trợ

Nếu tôi sử dụng các tính năng cụ thể trong MariaDB như Bảng có phiên bản hệ thống thì sao?

Các bảng đó sẽ bị bỏ qua khỏi kết xuất vì loại bảng của chúng là

MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
3, MySQL Shell Dump & Load chỉ sử dụng
MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
0 và
MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
1. Đừng quên rằng nếu các tính năng như vậy được kích hoạt sau khi kết xuất & tải, trong khi quá trình sao chép đang chạy, điều này sẽ phá vỡ quá trình sao chép

Thêm

Chỉ vì tò mò, tôi đã vá MySQL Shell để kiểm tra xem kết quả của Trình kiểm tra nâng cấp MySQL Shell trên MariaDB 10 là gì. 6. 7

Chúng ta hãy xem đầu ra được tạo bằng phiên bản vá lỗi này của MySQL Shell

Bạn có thể nhập MariaDB vào MySQL không?
Bạn có thể nhập MariaDB vào MySQL không?
Bạn có thể nhập MariaDB vào MySQL không?
Bạn có thể nhập MariaDB vào MySQL không?

Chúng tôi có thể thấy rằng một số lỗi có liên quan đến việc kiểm tra không thể thực hiện được vì một số bảng

MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
2 bị thiếu

Các lỗi chính cũng liên quan đến 2 bảng trong lược đồ

MariaDB> CREATE USER repl@'%' IDENTIFIED by 'repl_passwd';
MariaDB> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
3, không có gì phải lo lắng vì những bảng đó không dành riêng cho ứng dụng của tôi

MariaDB có tương thích với MySQL không?

Trên thực tế MariaDB hoàn toàn tương thích với MySQL vì nó đã (và vẫn đang) được dự định là một sự thay thế hoàn hảo cho MySQL. Một bản cài đặt MySQL tiêu chuẩn đi kèm với một số công cụ hữu ích, chẳng hạn như mysqldump, rất hữu ích cho việc sao lưu. Nó có thể được sử dụng với cả MySQL và MariaDB.

MariaDB và MySQL có giống nhau không?

Mặc dù MariaDB là một nhánh của MySQL, hai hệ thống quản lý cơ sở dữ liệu này vẫn khá khác nhau . MariaDB được cấp phép GPL đầy đủ trong khi MySQL sử dụng phương pháp cấp phép kép. Mỗi nhóm luồng xử lý theo một cách khác nhau. MariaDB hỗ trợ rất nhiều công cụ lưu trữ khác nhau.