10/10/2018, 00:01

Đồng bộ hóa dữ liệu với mysql

Hiện tại mình đang có vấn đề sau: website mình chạy trên host, ở dưới local mình cũng có 1 db giống hệt db trên host. Vấn đề đặt ra là mình muốn khi trên host db bị thay đổi (thêm, xóa, sửa) thì db ở local được update theo. Lệnh update này được thực thi bởi người quản trị, không cần phải chạy theo định kỳ. Mình thấy có mấy phần mềm đồng bộ hóa nhưng ko hiểu cách thức nó thực hiện việc đồng bộ ra sao. Dùng replication của mysql thì phải control đc server ở trên host mới làm được.
3do viết 02:15 ngày 10/10/2018
Được gửi bởi lovestormknx
Hiện tại mình đang có vấn đề sau: website mình chạy trên host, ở dưới local mình cũng có 1 db giống hệt db trên host. Vấn đề đặt ra là mình muốn khi trên host db bị thay đổi (thêm, xóa, sửa) thì db ở local được update theo. Lệnh update này được thực thi bởi người quản trị, không cần phải chạy theo định kỳ. Mình thấy có mấy phần mềm đồng bộ hóa nhưng ko hiểu cách thức nó thực hiện việc đồng bộ ra sao. Dùng replication của mysql thì phải control đc server ở trên host mới làm được.
2 câu in đậm mâu thuẫn.
nếu không có quyền cấu hình mysql trên host của bạn thì hơi mệt. Ngoài replicate thì có thể dùng rsync để đồng bộ
jiSh@n viết 02:13 ngày 10/10/2018
Được gửi bởi lovestormknx
Vấn đề đặt ra là mình muốn khi trên host db bị thay đổi (thêm, xóa, sửa) thì db ở local được update theo. Lệnh update này được thực thi bởi người quản trị, không cần phải chạy theo định kỳ.
Cái này chỉ cần backup trên host đem về local rồi overwrite là xong, cần quái gì soft
temp_304 viết 02:11 ngày 10/10/2018
mỗi lần update cái local thì tạo thêm cái code để update trên host
lovestormknx viết 02:13 ngày 10/10/2018
Cám ơn mọi người đã quan tâm nhưng vấn đề ở đây cần một giải pháp tối ưu. Ở đây mình không muốn dùng cách backup dữ liệu trên host rồi restore về local, đối với dữ liệu nhỏ thì không thành vấn đề gì nhưng khi thao tác trên dữ liệu lớn sẽ có rắc rối.

Đồng bộ hóa đáng lẽ phải theo 2 chiều, nghĩa là khi db ở local thay đổi thì db ở host thay đổi theo và ngược lại. Nhưng ở đây mình chỉ cần 1 chiều từ host -> local.

Việc đồng bộ hóa không cần phải thực thi định kì hoặc tự động. Ở local có 1 soft (giả sử vậy) có nút Đồng bộ dữ liệu, khi ta nhấn nút này thì mới tiến hành thao tác đồng bộ.

Dùng replication của MySQL có vấn đề ở chỗ là phải thao tác được trên file my.ini của MySQL của server (host), nếu mình đi thuê host thì có lẽ ko thể làm được chuyện này, do đó mình muốn hỏi các bạn ai có giải pháp nào khác tối ưu 1 chút thì đưa ra chúng ta cùng thảo luận. Hoặc các ban sử dụng phần mềm đồng bộ hóa nào đó, hiểu được cách thức nó thực hiện thì đưa ra luôn.

P/S: Đồng bộ hóa bằng Replication của MySQL theo nguyên tắc sau: server sẽ ghi lại các câu query update và delete thành công vào 1 file log dạng binary, client kết nối tới để đọc file log này, ghi nhớ thành 1 bản copy sau đó thực thi các câu lệnh mà server đã thực thi-->dữ liệu local sẽ giống server.
jiSh@n viết 02:17 ngày 10/10/2018
Có 1 chiều thì ko thể gọi là đồng bộ đúng nghĩa được. Thao tác mà bạn mong muốn thực chất chỉ là backup mà thôi. Dữ liệu lớn cỡ nào thì backup vẫn tốt, tôi ko nghĩ ra rắc rối nào liên quan đến vấn đề này. Tính năng backup của host sinh ra 1 file nén duy nhất thôi, và file nén này ko phải là dạng SQL query.
AnhTuanKB viết 02:09 ngày 10/10/2018
Được gửi bởi jiSh@n
Có 1 chiều thì ko thể gọi là đồng bộ đúng nghĩa được. Thao tác mà bạn mong muốn thực chất chỉ là backup mà thôi. Dữ liệu lớn cỡ nào thì backup vẫn tốt, tôi ko nghĩ ra rắc rối nào liên quan đến vấn đề này. Tính năng backup của host sinh ra 1 file nén duy nhất thôi, và file nén này ko phải là dạng SQL query.
Đúng rồi, cái này không phải là đồng bộ, mà là backup thôi. Nhưng bạn muốn backup theo kiểu từng thao tác chứ không phải theo lịch trình hoặc bằng tay. MySQL thì mình không biết, nhưng SQL sever thì bạn chỉ có thể lập lịch trình hoặc làm bằng tay cho nó, còn để làm được như bạn muốn thì phải viết trigger cho từng bảng. Nói chung thì bạn chịu khó lâu lâu cập nhật mộ lần thôi, chứ làm như bạn mong muốn thì không được đâu. Cả 2 MySQL và SQL sever đề không có cơ chế cho phép làm điều đó.
zoejoe viết 02:16 ngày 10/10/2018
Được gửi bởi jiSh@n
Cái này chỉ cần backup trên host đem về local rồi overwrite là xong, cần quái gì soft
Mình cũng thấy vậy ! Vừa làm chật băng thông, vừa phức tạp hóa vấn đề. Chán ghê !
lovestormknx viết 02:17 ngày 10/10/2018
Như mình đã nói ban đầu là đồng bộ hóa đúng nghĩa phải theo 2 chiều. Có nhiều cách để đạt được điều mà mình muốn (như các bạn đã trình bày). Vấn đề ở đây là khách hàng của mình là người khó tính và am hiểu rộng, họ chỉ muốn thực thi ở local những gì mà host đã thực thi để tiết kiệm thời gian và tránh một số rủi ro đáng tiếc. Như mình đã nói, binary log của mysql có thể ghi lại chính xác từng câu query (chỉ update và delete thành công), nếu mình có thể controller được mysql trên host (can thiệp vào file cấu hình) thì có thể dùng replication của mysql để làm chuyện đồng bộ hóa 1 chiều (server - slave). Vấn đề ở đây hosting mình đi thuê, không thể can thiệp file cấu hình!

Mình chuyển hướng 1 chút, mình có chạy thử 1 phần mềm đồng bộ hóa dữ liệu, nó cho mình cấu hình thông số kết nối và mysql trên host rồi nó tạo ra 1 file php. Mình upload file php này lên host, đưa link tới file này vào chương trình, nó sẽ can thiệp được vào db trên host và tiến hành đồng bộ hóa. Vậy cơ chế mà cái soft này làm là như thế nào? Không thể nói nó xóa hết db ở local rồi lấy ở host về import vô vì thao tác này xảy ra rủi ro mất dữ liệu khi kết nối mạng bị đứt.

Các bạn thảo luận tiếp nhé!
3do viết 02:02 ngày 10/10/2018
Được gửi bởi lovestormknx
Như mình đã nói ban đầu là đồng bộ hóa đúng nghĩa phải theo 2 chiều. Có nhiều cách để đạt được điều mà mình muốn (như các bạn đã trình bày). Vấn đề ở đây là khách hàng của mình là người khó tính và am hiểu rộng, họ chỉ muốn thực thi ở local những gì mà host đã thực thi để tiết kiệm thời gian và tránh một số rủi ro đáng tiếc. Như mình đã nói, binary log của mysql có thể ghi lại chính xác từng câu query (chỉ update và delete thành công), nếu mình có thể controller được mysql trên host (can thiệp vào file cấu hình) thì có thể dùng replication của mysql để làm chuyện đồng bộ hóa 1 chiều (server - slave). Vấn đề ở đây hosting mình đi thuê, không thể can thiệp file cấu hình!

Mình chuyển hướng 1 chút, mình có chạy thử 1 phần mềm đồng bộ hóa dữ liệu, nó cho mình cấu hình thông số kết nối và mysql trên host rồi nó tạo ra 1 file php. Mình upload file php này lên host, đưa link tới file này vào chương trình, nó sẽ can thiệp được vào db trên host và tiến hành đồng bộ hóa. Vậy cơ chế mà cái soft này làm là như thế nào? Không thể nói nó xóa hết db ở local rồi lấy ở host về import vô vì thao tác này xảy ra rủi ro mất dữ liệu khi kết nối mạng bị đứt.

Các bạn thảo luận tiếp nhé!
khách hàng của bác xài share host mà đòi hỏi cao quá
Bài liên quan
0