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.
Bài liên quan
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ộ
Đồ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.
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é!