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
--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases