Làm cách nào để đồng bộ lại DB Mysql nếu Master và Slave có cơ sở dữ liệu khác nhau trong quá trình sao chép Mysql?


139

Mysql Server1đang chạy như MASTER .
Mysql Server2đang chạy như SLAVE .

Bây giờ sao chép DB đang diễn ra từ MASTER sang SLAVE .

Server2được xóa khỏi mạng và kết nối lại sau 1 ngày. Sau này, có sự không phù hợp trong cơ sở dữ liệu trong chủ và nô lệ.

Làm cách nào để đồng bộ lại DB một lần nữa vì sau khi khôi phục DB được lấy từ Master thành Slave cũng không giải quyết được vấn đề?

Câu trả lời:


287

Đây là quy trình từng bước đầy đủ để đồng bộ lại bản sao chính-phụ từ đầu:

Tại chủ:

RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

sao chép các giá trị của kết quả của lệnh cuối cùng ở đâu đó.

Không đóng kết nối với máy khách (vì nó sẽ giải phóng khóa đọc) ra lệnh để lấy kết xuất của bản gốc:

mysqldump -u root -p --all-databases > /a/path/mysqldump.sql

Bây giờ bạn có thể giải phóng khóa, ngay cả khi bãi rác chưa kết thúc. Để làm điều đó, thực hiện lệnh sau trong máy khách MySQL:

UNLOCK TABLES;

Bây giờ sao chép tệp kết xuất vào nô lệ bằng scp hoặc công cụ ưa thích của bạn.

Tại nô lệ:

Mở một kết nối đến mysql và gõ:

STOP SLAVE;

Tải kết xuất dữ liệu của master với lệnh console này:

mysql -uroot -p < mysqldump.sql

Đồng bộ hóa nhật ký nô lệ và chủ:

RESET SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;

Trong đó các giá trị của các trường trên là những giá trị bạn đã sao chép trước đó.

Cuối cùng, gõ:

START SLAVE;

Để kiểm tra xem mọi thứ có hoạt động trở lại không, sau khi gõ:

SHOW SLAVE STATUS;

bạn nên thấy:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Đó là nó!


8
Với INNODB đã nhập dabatase và các loại cột phức tạp khác như BLOB và DATE được xác định, tôi khuyên bạn nên sử dụng các công tắc sau:--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases
Ken Pega

4
RESET_SLAVEcần thiết không? Lưu ý rằng các hướng dẫn này đặt lại người dùng và mật khẩu sao chép, vì vậy bạn sẽ phải nhập lại những người cóCHANGE MASTER TO...
Mike S.

25
Nếu bạn sử dụng cờ --master-data khi gọi mysqldump trên bản gốc, lệnh CHANGE MASTER TO được ghi vào tệp kết xuất và do đó lưu bước thực hiện sau khi nhập tệp kết xuất vào nô lệ.
udog

3
Không khóa chủ (không yêu cầu Percona) plusbryan.com/mysql-replication-without-dftimeime Một lợi ích khác của việc này là kết xuất SQL cũng đi kèm với dòng "CHANGE MASTER" cần thiết (đã nhận xét)
mahemoff

2
Có cách nào để tự động hóa điều này?
Metafaniel

26

Tài liệu cho việc này tại trang web MySQL đã hết thời và bị bắn bằng súng (chẳng hạn như Interactive_timeout). Việc phát hành BẢNG XÓA B READNG ĐỌC KHÓA như là một phần trong quá trình xuất bản gốc của bạn nói chung chỉ có ý nghĩa khi được phối hợp với ảnh chụp nhanh lưu trữ / hệ thống tệp như LVM hoặc zfs.

Nếu bạn định sử dụng mysqldump, thay vào đó bạn nên dựa vào tùy chọn --master-data để bảo vệ chống lại lỗi của con người và giải phóng các khóa trên bản gốc càng nhanh càng tốt.

Giả sử tổng thể là 192.168.100.50 và nô lệ là 192.168.100.51, mỗi máy chủ có một id máy chủ riêng được định cấu hình, chủ có đăng nhập nhị phân và nô lệ có chỉ đọc = 1 trong my.cnf

Để tạo giai đoạn nô lệ để có thể bắt đầu sao chép ngay sau khi nhập kết xuất, hãy ban hành lệnh CHANGE MASTER nhưng bỏ qua tên và vị trí tệp nhật ký:

slaveserver> CHANGE MASTER TO MASTER_HOST='192.168.100.50', MASTER_USER='replica', MASTER_PASSWORD='asdmk3qwdq1';

Cấp GRANT cho chủ để sử dụng nô lệ:

masterserver> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.100.51' IDENTIFIED BY 'asdmk3qwdq1';

Xuất bản gốc (trong màn hình) bằng cách nén và tự động chụp tọa độ nhật ký nhị phân chính xác:

mysqldump --master-data --all-databases --flush-privileges | gzip -1 > replication.sql.gz

Sao chép tệp copyation.sql.gz vào Slave và sau đó nhập nó với zcat vào phiên bản của MySQL đang chạy trên Slave:

zcat replication.sql.gz | mysql

Bắt đầu sao chép bằng cách ban hành lệnh cho nô lệ:

slaveserver> START SLAVE;

Tùy chọn cập nhật /root/.my.cnf trên nô lệ để lưu trữ mật khẩu gốc giống như chủ.

Nếu bạn ở trên 5.1+, tốt nhất trước tiên hãy đặt binlog_format của chủ thành MIXED hoặc ROW. Coi chừng các sự kiện được ghi hàng là chậm đối với các bảng thiếu khóa chính. Điều này thường tốt hơn so với cấu hình thay thế (và mặc định) của binlog_format = statement (trên bản gốc), vì nó ít có khả năng tạo ra dữ liệu sai trên Slave.

Nếu bạn phải (nhưng có lẽ không nên) sao chép bộ lọc, hãy làm như vậy với các tùy chọn nô lệ sao chép-wild-do-table = dbname.% Hoặc Replicate-wild-ign-table = badDB.% Và chỉ sử dụng binlog_format = row

Quá trình này sẽ giữ một khóa toàn cầu trên bản gốc trong suốt thời gian của lệnh mysqldump nhưng sẽ không ảnh hưởng đến bản gốc.

Nếu bạn muốn sử dụng mysqldump --master-data --all-cơ sở dữ liệu - giao dịch đơn lẻ (vì bạn chỉ sử dụng bảng InnoDB), có lẽ bạn được phục vụ tốt hơn khi sử dụng MySQL Enterprise Backup hoặc triển khai nguồn mở có tên là xtrabackup (lịch sự của Percona)


3
Nếu bạn chỉ muốn xây dựng lại một nô lệ hiện có, bạn có thể làm theo quy trình trên, bỏ qua một vài bước: Lệnh CHANGE MASTER thủ công và thủ công
lỗi thời

Câu hỏi 1: Trên các cửa sổ, những gì sẽ tương đương với zcat. Câu hỏi 2: mysqldumpGiá vé này với cơ sở dữ liệu lớn về mặt hiệu suất như thế nào? Bất kỳ cách nào để sử dụng SELECT INTO OUTFILELOAD DATAtrơn tru trong quá trình đề xuất của bạn? (Vì chúng thường hoạt động nhanh hơn)
Ifedi Okonkwo

Không cần phải STOP SLAVEở đâu đó trong quá trình?
David V.

16

Trừ khi bạn viết trực tiếp cho nô lệ (Server2), vấn đề duy nhất là Server2 thiếu bất kỳ bản cập nhật nào đã xảy ra kể từ khi nó bị ngắt kết nối. Đơn giản chỉ cần khởi động lại nô lệ với "START SLAVE;" nên lấy lại mọi thứ để tăng tốc.


2
Bạn có thể kiểm tra nhật ký bin và xem chúng có bao gồm thời gian hệ thống của bạn không đồng bộ không. Nếu bạn bị mất ngày, đây có thể là một vấn đề lớn hơn và yêu cầu bạn thực hiện một kết xuất đầy đủ để khôi phục dữ liệu bị thiếu.
nelaaro

7

Tôi nghĩ rằng, Maatkit sử dụng giúp bạn! Bạn có thể sử dụng đồng bộ hóa mk-bảng. Vui lòng xem liên kết này: http://www.maatkit.org/doc/mk-table-sync.html


Tôi nghĩ anh ấy sẽ cần tạm thời ngừng viết trong khi chạy kịch bản.
Ztyx

Điều này vẫn hoạt động tuyệt vời. Các công cụ đã được đổi tên mặc dù và bây giờ được gọi là đồng bộ hóa bảng pt. Trên thực tế, mặc dù, tôi đã thấy rằng công cụ khởi động lại nô lệ pt của họ hoạt động như ma thuật.
mlerley

7

Tôi rất muộn với câu hỏi này, tuy nhiên tôi đã gặp phải vấn đề này và sau khi tìm kiếm nhiều, tôi đã tìm thấy thông tin này từ Bryan Kennedy: http://plusbryan.com/mysql-replication-without-dftimeime

Trên Master hãy sao lưu như thế này:
mysqldump --skip-lock-bảng --single-giao dịch --flush-log --hex-blob --master-data = 2 -A> ~ / dump.sql

Bây giờ, kiểm tra phần đầu của tệp và ghi lại các giá trị cho MASTER_LOG_FILE và MASTER_LOG_POS. Bạn sẽ cần chúng sau: head dump.sql -n80 | grep "MASTER_LOG"

Sao chép tệp "dump.sql" sang Slave và khôi phục nó: mysql -u mysql-user -p <~ / dump.sql

Kết nối với Slave mysql và chạy một lệnh như thế này: THAY ĐỔI MASTER TO MASTER_HOST = 'master-server-ip', MASTER_USER = 'sao chép-người dùng', MASTER_PASSWORD = 'nô lệ-máy chủ-mật khẩu', MASTER_LOG_FILE = 'giá trị từ trên', MASTER_LOG_POS = giá trị từ trên; BẮT ĐẦU;

Để kiểm tra tiến trình của Slave: SHOW SLAVE STATUS;

Nếu tất cả đều ổn, Last_Error sẽ trống và Slave_IO_State sẽ báo cáo về Chờ đợi chủ để gửi sự kiện. Tìm kiếm Seconds_Behind_Master cho biết khoảng cách phía sau nó là bao xa. YMMV. :)


3
Điều này hoạt động và nếu nô lệ đã được thiết lập và chỉ mất đồng bộ, bạn không cần chạy CHANGE MASTER; chỉ cần xác định --master-data=1(hoặc chỉ --master-data).
LSerni

5

Đây là những gì tôi thường làm khi một nô lệ mysql không đồng bộ. Tôi đã xem xét mk-table-sync nhưng nghĩ rằng phần Risks trông thật đáng sợ.

Về thầy:

SHOW MASTER STATUS

Các cột xuất ra (Tệp, Vị trí) sẽ được sử dụng cho chúng tôi sau một lát nữa.

Trên nô lệ:

STOP SLAVE

Sau đó kết xuất db chính và nhập nó vào db nô lệ.

Sau đó chạy như sau:

CHANGE MASTER TO
  MASTER_LOG_FILE='[File]',
  MASTER_LOG_POS=[Position];
START SLAVE;

Trong đó [Tệp] và [Vị trí] là các giá trị được xuất ra từ "SHOW MASTER STATUS" được chạy ở trên.

Hi vọng điêu nay co ich!


5
Điều này dường như bị hỏng, vì rõ ràng bạn không FLUSH TABLES WITH READ LOCK;trước bạn SHOW MASTER STATUSvà kết xuất cơ sở dữ liệu chủ. Tôi nghĩ rằng điều này có thể dẫn đến các lỗi chính trùng lặp trên nô lệ vì bạn đã đặt trạng thái chính thành một thời điểm trước khi kết xuất, vì vậy bạn sẽ phát lại lịch sử đã được đưa vào kết xuất. (Nếu bạn làm mọi thứ theo thứ tự bạn mô tả.)
KajMagnus

5

Theo dõi câu trả lời của David ...

Sử dụng SHOW SLAVE STATUS\Gsẽ cho đầu ra con người có thể đọc được.


Bất kỳ cách để trang đầu ra?
Giô

'pager more' Tôi nghĩ sẽ làm được
Ian

3

đôi khi bạn chỉ cần cho nô lệ một cú đá quá

thử

stop slave;    
reset slave;    
start slave;    
show slave status;

khá thường xuyên, nô lệ, họ chỉ bị mắc kẹt :)


... và giám sát Positionchủ nhân bằng cách sử dụng show master status;chống lại Exec_Master_Log_Pos:Slave bằng cách sử dụng show slave status \G. Các nô lệ nên bắt kịp chủ. Làm việc cho tôi bằng cách sử dụng mysql 5.6 ngay sau khi mất mạng ngắn.
Mike S

10
Điều này là sai lệch, một khi bạn thiết lập lại nô lệ, người cứu rỗi hoàn toàn mất kiến ​​thức về vị trí của chủ nhân.
Qian Chen

2

Đây là một câu trả lời đầy đủ hy vọng sẽ giúp người khác ...


Tôi muốn thiết lập sao chép mysql bằng master và Slave, và vì điều duy nhất tôi biết là nó sử dụng (các) tệp nhật ký để đồng bộ hóa, nếu nô lệ ngoại tuyến và không đồng bộ, theo lý thuyết, nó chỉ cần kết nối lại đến chủ nhân của nó và tiếp tục đọc tệp nhật ký từ nơi nó rời đi, như người dùng malonso đã đề cập.

Vì vậy, đây là kết quả thử nghiệm sau khi định cấu hình chính và phụ như được đề cập bởi: http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html ...

Miễn là bạn sử dụng cấu hình chủ / nô lệ được đề xuất và không ghi vào nô lệ, anh ta và tôi ở bên phải (theo như liên quan đến mysql-server 5.x). Tôi thậm chí không cần sử dụng "START SLAVE;", nó vừa bắt kịp chủ nhân của nó. Nhưng có một mặc định 88000 thứ gì đó thử lại sau mỗi 60 giây vì vậy tôi đoán nếu bạn kiệt sức rằng bạn có thể phải bắt đầu hoặc khởi động lại nô lệ. Dù sao, đối với những người như tôi, những người muốn biết nếu có nô lệ ngoại tuyến và sao lưu lại cần có sự can thiệp thủ công .. không, không.

Có lẽ người đăng ban đầu đã tham nhũng trong (các) tệp nhật ký? Nhưng hầu hết có lẽ không chỉ là một máy chủ ngoại tuyến trong một ngày.


được kéo từ /usr/share/doc/mysql-server-5.1/README.Debian.gz, điều này có thể có ý nghĩa đối với các máy chủ không phải là debian:

* THÊM THÔNG BÁO VỀ THAY THẾ
===============================
Nếu máy chủ MySQL hoạt động như một nô lệ sao chép, bạn không nên
đặt --tmpdir để trỏ đến một thư mục trên hệ thống tệp dựa trên bộ nhớ hoặc
một thư mục bị xóa khi máy chủ lưu trữ khởi động lại. Một bản sao
nô lệ cần một số tệp tạm thời của nó để tồn tại khi khởi động lại máy
rằng nó có thể sao chép các bảng tạm thời hoặc các hoạt động LOAD DATA INFILE. Nếu
các tệp trong thư mục tệp tạm thời bị mất khi máy chủ khởi động lại,
nhân rộng thất bại.

bạn có thể sử dụng một cái gì đó sql như: hiển thị các biến như 'tmpdir'; tim ra.


Cả hai cơ sở dữ liệu sẽ tự động đồng bộ hóa lẫn nhau? Ví dụ: tôi viết thư cho Master, Slave có được cập nhật tự động không?
TransformBinary

2

Thêm vào câu trả lời phổ biến để bao gồm lỗi này:

"ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO",

Sao chép từ nô lệ trong một lần bắn:

Trong một cửa sổ đầu cuối:

mysql -h <Master_IP_Address> -uroot -p

Sau khi kết nối,

RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Trạng thái xuất hiện như dưới đây: Lưu ý rằng số vị trí khác nhau!

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      98  | your_DB      |                  |
+------------------+----------+--------------+------------------+

Xuất kết xuất tương tự như cách anh mô tả " sử dụng thiết bị đầu cuối khác "!

Thoát và kết nối với DB của riêng bạn (vốn là nô lệ):

mysql -u root -p

Gõ các lệnh dưới đây:

STOP SLAVE;

Nhập kết xuất như đã đề cập (tất nhiên trong một thiết bị đầu cuối khác!) Và nhập các lệnh dưới đây:

RESET SLAVE;
CHANGE MASTER TO 
  MASTER_HOST = 'Master_IP_Address', 
  MASTER_USER = 'your_Master_user', // usually the "root" user
  MASTER_PASSWORD = 'Your_MasterDB_Password', 
  MASTER_PORT = 3306, 
  MASTER_LOG_FILE = 'mysql-bin.000001', 
  MASTER_LOG_POS = 98; // In this case

Sau khi đăng nhập, hãy đặt tham số server_id (thông thường, đối với các DB mới / không sao chép, điều này không được đặt theo mặc định),

set global server_id=4000;

Bây giờ, bắt đầu nô lệ.

START SLAVE;
SHOW SLAVE STATUS\G;

Đầu ra phải giống như ông mô tả.

  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

Lưu ý: Sau khi được sao chép, chủ và nô lệ chia sẻ cùng một mật khẩu!


Cả hai cơ sở dữ liệu sẽ tự động đồng bộ hóa lẫn nhau? Ví dụ: tôi viết thư cho Master, Slave có được cập nhật tự động không?
TransformBinary

1

Xây dựng lại nô lệ bằng LVM

Đây là phương pháp chúng tôi sử dụng để xây dựng lại nô lệ MySQL bằng Linux LVM. Điều này đảm bảo ảnh chụp nhanh nhất quán trong khi yêu cầu thời gian chết rất nhỏ trên chủ của bạn.

Đặt phần trăm trang bẩn tối đa của innodb thành 0 trên máy chủ MySQL chính. Điều này sẽ buộc MySQL ghi tất cả các trang vào đĩa, giúp tăng tốc đáng kể khi khởi động lại.

set global innodb_max_dirty_pages_pct = 0;

Để theo dõi số lượng trang bẩn chạy lệnh

mysqladmin ext -i10 | grep dirty

Khi số lượng ngừng giảm, bạn đã đạt đến điểm để tiếp tục. Tiếp theo đặt lại bản gốc để xóa nhật ký bin / nhật ký chuyển tiếp cũ:

RESET MASTER;

Thực thi lvdisplay để có LV Path

lvdisplay

Đầu ra sẽ như thế này

--- Logical volume ---
LV Path                /dev/vg_mysql/lv_data
LV Name                lv_data
VG Name                vg_mysql

Tắt cơ sở dữ liệu chủ bằng lệnh

service mysql stop

Tiếp theo hãy chụp nhanh, mysql_snapshot sẽ là tên khối lượng logic mới. Nếu binlog được đặt trên ổ đĩa hệ điều hành thì chúng cũng cần phải được chụp nhanh.

lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data

Bắt đầu lại chủ với lệnh

service mysql start

Khôi phục cài đặt trang bẩn về mặc định

set global innodb_max_dirty_pages_pct = 75;

Chạy lại lvdisplay để đảm bảo ảnh chụp nhanh ở đó và hiển thị

lvdisplay

Đầu ra:

--- Logical volume ---
LV Path                /dev/vg_mysql/mysql_snapshot
LV Name                mysql_snapshot
VG Name                vg_mysql

Gắn ảnh chụp

mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot

Nếu bạn có một nô lệ MySQL hiện có đang chạy, bạn cần phải dừng nó

service mysql stop

Tiếp theo bạn cần xóa thư mục dữ liệu MySQL

cd /var/lib/mysql
rm -fr *

Trở lại với chủ. Bây giờ rsync ảnh chụp nhanh đến nô lệ MySQL

rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/

Khi rsync hoàn thành, bạn có thể ngắt kết nối và xóa ảnh chụp nhanh

umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot

Tạo người dùng sao chép trên bản gốc nếu người dùng bản sao cũ không tồn tại hoặc mật khẩu không xác định

GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';

Xác minh rằng các tệp dữ liệu / var / lib / mysql được sở hữu bởi người dùng mysql, nếu vậy bạn có thể bỏ qua lệnh sau:

chown -R mysql:mysql /var/lib/mysql

Tiếp theo ghi lại vị trí binlog

ls -laF | grep mysql-bin

Bạn sẽ thấy một cái gì đó như

..
-rw-rw----     1 mysql mysql  1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw----     1 mysql mysql  1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw----     1 mysql mysql   963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw----     1 mysql mysql    65657162 Aug 28 16:44 mysql-bin.000020

Ở đây tệp nhật ký chính là số tệp cao nhất trong chuỗi và vị trí nhật ký bin là kích thước tệp. Ghi lại các giá trị này:

master_log_file=mysql-bin.000020
master_log_post=65657162

Tiếp theo bắt đầu nô lệ MySQL

service mysql start

Thực hiện lệnh thay đổi chủ trên nô lệ bằng cách thực hiện như sau:

CHANGE MASTER TO 
master_host="10.0.0.12", 
master_user="replication", 
master_password="YourPass", 
master_log_file="mysql-bin.000020", 
master_log_pos=65657162; 

Cuối cùng bắt đầu nô lệ

SLAVE START;

Kiểm tra trạng thái nô lệ:

SHOW SLAVE STATUS;

Đảm bảo Slave IO đang chạy và không có lỗi kết nối. Chúc may mắn!

BR, Juha Vehnia

Gần đây tôi đã viết điều này trên blog của tôi được tìm thấy ở đây ... Có một vài chi tiết ở đó nhưng câu chuyện là như vậy.

http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-USE-linux-lvm.html


0

Tôi đã tạo một repo GitHub với một kịch bản để giải quyết vấn đề này một cách nhanh chóng. Chỉ cần thay đổi một vài biến và chạy nó (Đầu tiên, tập lệnh tạo bản sao lưu cơ sở dữ liệu của bạn).

Tôi hy vọng điều này sẽ giúp bạn (và những người khác nữa).

Cách đặt lại (Đồng bộ hóa lại) Bản sao MySQL Master-Slave


Tôi thấy tập lệnh luôn đặt vị trí nhật ký chính thành 1 và tên của tệp nhật ký chính. Tôi không biết đủ để chắc chắn liệu tôi có nên quan tâm đến vấn đề này hay không. Bạn có thể giải thích? Tôi có một vị trí hơn 1.000.000 hiện tại. Điều này có nghĩa là nó sẽ cố gắng phát lại các truy vấn 1mil trước khi tăng tốc? Không có cơ hội tham nhũng khi chơi các truy vấn đó đối với dữ liệu hiện có? Tôi tự hỏi tại sao không có trong tập lệnh khi thực hiện kết xuất mysql sử dụng tùy chọn --master-data = 2 và sau đó kéo tệp và đặt ra khỏi kết xuất để đặt chúng?
Giô

0

Chúng tôi đang sử dụng kỹ thuật sao chép chính chủ của MySQL và nếu một máy chủ MySQL nói 1 bị xóa khỏi mạng, nó sẽ tự kết nối lại sau khi kết nối được khôi phục và tất cả các bản ghi đã được cam kết trong máy chủ 2 trong mạng được truyền đến máy chủ 1 đã mất kết nối sau khi khôi phục. Chủ đề nô lệ trong MySQL thử lại để kết nối với chủ của nó sau mỗi 60 giây theo mặc định. Thuộc tính này có thể được thay đổi khi MySQL ha cờ "master_connect_retry = 5" trong đó 5 là trong giây. Điều này có nghĩa là chúng tôi muốn thử lại sau mỗi 5 giây.

Nhưng bạn cần đảm bảo rằng máy chủ bị mất kết nối hiển thị không thực hiện bất kỳ cam kết nào trong cơ sở dữ liệu khi bạn bị trùng lặp Mã lỗi mã lỗi: 1062


0

Thầy :

mysqldump -u root -p --all-databases --master-data | gzip > /tmp/dump.sql.gz  

scp master:/tmp/dump.sql.gz slave:/tmp/ Di chuyển tệp kết xuất đến máy chủ nô lệ

Nô lệ:

STOP SLAVE;

zcat /tmp/dump.sql.gz | mysql -u root -p

START SLAVE;
SHOW SLAVE STATUS;  

LƯU Ý :
Trên bản gốc, bạn có thể chạy SET GLOBAL expire_logs_days = 3để giữ binlog trong 3 ngày trong trường hợp có vấn đề về nô lệ.

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.