Membangun kembali budak menggunakan LVM
Berikut adalah metode yang kami gunakan untuk membangun kembali budak MySQL menggunakan Linux LVM. Ini menjamin snapshot yang konsisten sambil membutuhkan downtime yang sangat minimal pada master Anda.
Atur innodb max halaman kotor persen ke nol pada server master MySQL. Ini akan memaksa MySQL untuk menulis semua halaman ke disk yang secara signifikan akan mempercepat restart.
set global innodb_max_dirty_pages_pct = 0;
Untuk memantau jumlah halaman kotor, jalankan perintah
mysqladmin ext -i10 | grep dirty
Setelah angka berhenti menurun, Anda telah mencapai titik untuk melanjutkan. Selanjutnya, atur ulang master untuk menghapus log tempat sampah / log relai lama:
RESET MASTER;
Jalankan lvdisplay untuk mendapatkan LV Path
lvdisplay
Output akan terlihat seperti ini
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Matikan database master dengan perintah
service mysql stop
Selanjutnya, ambil snaphot, mysql_snapshot akan menjadi nama volume logis baru. Jika binlog ditempatkan pada drive OS, maka perlu snapshot juga.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Mulai master lagi dengan perintah
service mysql start
Kembalikan pengaturan halaman kotor ke default
set global innodb_max_dirty_pages_pct = 75;
Jalankan lvdisplay lagi untuk memastikan snapshot ada dan terlihat
lvdisplay
Keluaran:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Pasang snapshot
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Jika Anda memiliki slave MySQL yang ada, Anda harus menghentikannya
service mysql stop
Selanjutnya Anda perlu menghapus folder data MySQL
cd /var/lib/mysql
rm -fr *
Kembali ke master. Sekarang rsync snapshot ke slave MySQL
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Setelah rsync selesai, Anda dapat melepas dan menghapus snapshot
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Buat pengguna replikasi pada master jika pengguna replikasi lama tidak ada atau kata sandi tidak diketahui
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Verifikasi bahwa file data / var / lib / mysql dimiliki oleh pengguna mysql, jika demikian Anda dapat menghilangkan perintah berikut:
chown -R mysql:mysql /var/lib/mysql
Selanjutnya, rekam posisi binlog
ls -laF | grep mysql-bin
Anda akan melihat sesuatu seperti
..
-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
Di sini file master log adalah nomor file tertinggi secara berurutan dan posisi log bin adalah ukuran file. Catat nilai-nilai ini:
master_log_file=mysql-bin.000020
master_log_post=65657162
Selanjutnya jalankan slave MySQL
service mysql start
Jalankan perintah perubahan master pada slave dengan menjalankan yang berikut:
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;
Akhirnya mulai budak
SLAVE START;
Periksa status budak:
SHOW SLAVE STATUS;
Pastikan Slave IO berjalan dan tidak ada kesalahan koneksi. Semoga berhasil!
BR, Juha Vehnia
Saya baru-baru ini menulis ini di blog saya yang ditemukan di sini ... Ada beberapa detail lagi di sana tetapi ceritanya sama.
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html
--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases