Đó sẽ là thiết lập sạch nhất và bạn có thể hoàn thành nhiệm vụ chỉ bằng một truy vấn nếu bạn thiết lập các bảng LIÊN KẾT để sao chép dữ liệu của mình từ máy chủ sản xuất từ xa sang Cơ sở dữ liệu đào tạo vì bạn sẽ thực hiện việc này một cách thường xuyên và đang xử lý
Quan trọng. Nếu bạn sửa đổi dữ liệu trong các bảng LIÊN KẾT của cơ sở dữ liệu đào tạo, thì cơ sở dữ liệu sản xuất cũng sẽ bị ảnh hưởng. Chỉ các lối tắt từ xa đến cơ sở dữ liệu sản xuất mới tồn tại trong bảng Fed
Tương tự, sao chép dữ liệu cục bộ
_10Bảng FED CREATE phải phù hợp với cấu trúc của bảng từ xa. Đây là một ví dụ về SQL tôi đã sử dụng để kiểm tra mã
________Đầu tiênOP, vì bạn sẽ thực hiện việc này thường xuyên và đang xử lý hàng triệu bản ghi trên máy chủ sản xuất, tôi khuyên bạn nên thiết lập các bảng LIÊN KẾT để sao chép dữ liệu của bạn từ máy chủ sản xuất từ xa sang DB đào tạo. Nó sẽ là thiết lập sạch nhất và bạn có thể sử dụng một truy vấn duy nhất để hoàn thành công việc
QUAN TRỌNG. Không chỉnh sửa dữ liệu trong các bảng LIÊN KẾT trong DB đào tạo của bạn, nếu không bạn sẽ thực hiện những thay đổi đó trong DB sản xuất. Các bảng của FED chỉ là lối tắt từ xa đến DB sản xuất
Sao chép dữ liệu cục bộ như vậy…
INSERT IGNORE INTO trainingDB.usersTable (username, email) (SELECT username, email FROM `federated_table` WHERE username = 'xx');Đây là SQL mẫu tôi đã sử dụng để kiểm tra mã. (Bảng FED CREATE phải khớp với cấu trúc bảng từ xa)
CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users';Nó cung cấp một tập lệnh trang Web và một lớp mở rộng PHP MySQLi để kết nối với một máy chủ cơ sở dữ liệu MySQL nhất định
Tập lệnh thực thi các truy vấn bằng cách sử dụng lớp để sao chép tất cả các bản ghi bảng từ một cơ sở dữ liệu trong một máy chủ sang một máy chủ khác trong cùng một máy chủ hoặc một máy chủ khác
Nó sao chép 100 bản ghi bảng cùng một lúc nếu những bản ghi đó không bị hỏng
Máy chủ MySQL gốc và đích có thể chạy các phiên bản MySQL khác nhau
Lưu ý rằng nếu máy chủ MySQL gốc gặp sự cố, bạn nên khởi động lại máy chủ trước khi sử dụng lớp này để sao chép các bản ghi
Nếu quá trình đọc từ các bảng bị hỏng mất nhiều thời gian hơn, bạn nên đặt tùy chọn giới hạn thời gian thực thi PHP ít nhất là 2 phút (120 giây)
Đối với điều này, bạn có thể sử dụng câu lệnh INSERT INTO SELECT. Trước tiên chúng ta hãy tạo một bảng -
mysql> create table DemoTable1900 ( ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ClientName varchar(20), ClientAge int default 29 ) auto_increment=1000; Query OK, 0 rows affected (0.00 sec)Chèn một số bản ghi vào bảng bằng lệnh chèn -
mysql> insert into DemoTable1900(ClientName,ClientAge) values('Chris',45); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1900(ClientName,ClientAge) values('David',29); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1900(ClientName,ClientAge) values('Mike',37); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1900(ClientName) values('Sam'); Query OK, 1 row affected (0.00 sec)Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -
mysql> select * from DemoTable1900;Điều này sẽ tạo ra đầu ra sau -
+----------+------------+-----------+ | ClientId | ClientName | ClientAge | +----------+------------+-----------+ | 1000 | Chris | 45 | | 1001 | David | 29 | | 1002 | Mike | 37 | | 1003 | Sam | 29 | +----------+------------+-----------+ 4 rows in set (0.00 sec)Đây là truy vấn để tạo bảng thứ hai -
mysql> create table DemoTable1901 ( EmployeeId int, EmployeeName varchar(20), EmployeeAge int ); Query OK, 0 rows affected (0.00 sec)Đây là truy vấn để sao chép các bản ghi từ bảng này sang bảng khác với các cột khác nhau -
mysql> insert into DemoTable1901(EmployeeId,EmployeeName,EmployeeAge) select ClientId,ClientName, ClientAge from DemoTable1900; Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -
________số 8Điều này sẽ tạo ra đầu ra sau -
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 1000 | Chris | 45 | | 1001 | David | 29 | | 1002 | Mike | 37 | | 1003 | Sam | 29 | +------------+--------------+-------------+ 4 rows in set (0.00 sec)Cập nhật ngày 27-Dec-2019 07. 09. 41
Chiến lược sao chép dữ liệu này rất hữu ích trong CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 4. Do sao chép dữ liệu, dữ liệu có thể được cung cấp cho các máy chủ khác nhau và được cung cấp cho tất cả người dùng mà không có bất kỳ sự mâu thuẫn nào
Lợi ích của việc sao chép dữ liệu bao gồm tăng tính khả dụng và độ tin cậy của dữ liệu và ít chi phí liên lạc hơn. Chúng tôi có thể sao chép toàn bộ hoặc một phần cơ sở dữ liệu từ máy chủ cơ sở dữ liệu này sang máy chủ cơ sở dữ liệu khác
Trong hướng dẫn này, chúng ta sẽ xem cách sao chép dữ liệu trong MySQL (với cùng một người dùng), MS SQL Server (với cùng một người dùng) và từ MySQL sang MS SQL Server (có những người dùng khác nhau)
Sử dụng máy chủ MySQL
Chúng tôi có hai cơ sở dữ liệu có tên là CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 5 và CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 6 trong Máy chủ MySQL của chúng tôi. Cơ sở dữ liệu CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 6 có một bảng tên là CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 8 và cơ sở dữ liệu CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 5 có một bảng tên là mysql> create table DemoTable1900 ( ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ClientName varchar(20), ClientAge int default 29 ) auto_increment=1000; Query OK, 0 rows affected (0.00 sec)0 mà chúng tôi muốn sao chép vào cơ sở dữ liệu CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 6
Điều quan trọng cần lưu ý là chúng tôi sao chép dữ liệu trong một máy chủ (MySQL 8. 0. 27) với một người dùng (root). Chúng tôi có các cơ sở dữ liệu sau (xem hộp màu đỏ) và bảng (xem hộp màu xanh lá cây)
Trong ảnh chụp màn hình sau, đảm bảo rằng nguồn dữ liệu là CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 51, viết tên cơ sở dữ liệu MySQL, số cổng và máy chủ lần lượt là CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 5, CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 53 và CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 54. Sau đó, nhấp vào Tiếp theo
Điều quan trọng cần lưu ý là bạn có thể có các tên cơ sở dữ liệu và Địa chỉ IP Máy chủ khác nhau. Chúng tôi đang sử dụng hai máy chủ trên cùng một máy;
Nhập CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 56 và CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 57 của MySQL Server (xem ảnh chụp màn hình bên dưới) và nhấp vào Tiếp theo
Đảm bảo rằng đích được chọn là CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 58, xác nhận tên máy chủ và tên cơ sở dữ liệu của bạn và chọn xác thực. Chúng tôi đang sử dụng Xác thực Windows cho hướng dẫn này. Sau đó nhấp vào Tiếp theo
Nhấn Next trên màn hình sau
Viết truy vấn SQL theo yêu cầu của bạn; . Nhấn tiếp
Viết tên bảng Đích của bạn (tên sẽ xuất hiện trong MS SQL Server) và nhấp vào Tiếp theo
Nhấp vào Tiếp theo trên màn hình được cung cấp bên dưới
Trong ảnh chụp màn hình sau, chọn CREATE SERVER federatedTablelink FOREIGN DATA WRAPPER mysql OPTIONS (USER 'remoteUser', HOST 'remoteDbIP', DATABASE 'yourRemoteDbNAme', Password 'remoteDbPassword'); CREATE TABLE federated_table ( username VARCHAR(32) NOT NULL DEFAULT '', email VARCHAR(20) NOT NULL DEFAULT '', INDEX username (username) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='federatedTablelink/users'; 60 (xem hộp màu xanh lá cây) hoặc bạn có thể lưu gói và chạy sau (xem hộp màu đỏ). Nhấn tiếp
Nhấp vào Kết thúc trên màn hình sau
Tại đây, màn hình sau cho biết dữ liệu đã được sao chép. Nhấp vào Đóng
Kiểm tra Máy chủ MS SQL của bạn để biết bảng đã sao chép và bạn có thể thấy hộp màu xanh lá cây trong ảnh chụp màn hình sau
Sự kết luận
Xem xét các cuộc thảo luận ở trên, chúng tôi đã kết luận rằng việc sao chép dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác là điều quan trọng cần tìm hiểu vì nhiều lý do, bao gồm các lo ngại về bảo mật, tính khả dụng của dữ liệu và độ tin cậy, v.v. Chúng tôi cũng có thể cung cấp quyền truy cập dữ liệu cho những người dùng khác nhau trên toàn thế giới