Saya sangat baru dalam Administrasi Database.
Saya menghadapi banyak masalah saat mengatur replikasi master-slave mysql.
Saya juga menghadapi masalah pemecahan masalah replikasi mysql biasa.
Adakah yang bisa membantu untuk memahami bagaimana saya harus menangani semua ini?
mysql
replication
mysql-5
Abdul Manaf
sumber
sumber
Jawaban:
Saya memberikan tautan ke tutorial. Ingatlah bahwa pada Ubuntu, file my.cnf ada di /etc/mysql/my.cnf dan tidak di /etc/my.cnf seperti di tutorial howtoforge. Dalam pengaturan saya, saya tidak menggunakan FLUSH TABLES WITH READ LOCK; pada tuan. Jika server master Anda memiliki banyak aktivitas menulis, Anda mungkin perlu mengunci tabel Anda dengan menjalankan perintah itu sebelum membuat cadangan. Jika Anda menggunakan FLUSH TABLES WITH READ LOCK ;, lalu setelah pencadangan Anda, Anda ingin menjalankan UNLOCK TABLES. Jika Anda mengalami masalah, beri tahu saya.
Berikut adalah tutorial yang saya temukan di howto forge, dibuat untuk Redhat / CentOS: http://www.howtoforge.com/mysql_database_replication
Tutorial lain yang terlihat bagus untuk Ubuntu http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Berikut ini konfigurasi yang saya gunakan:
Di Server MASTER
Konfigurasikan server master:
Mulai ulang MySQL:
/etc/init.d/mysql restart
Terhubung ke konsol mysql: mysql -u root -ppassword
Buat dan berikan izin kepada pengguna replikasi.
Pastikan untuk menyalin informasi ini di suatu tempat atau membiarkannya tetap terlihat
Buang database ke file:
Salin dump database ke server slave menggunakan scp atau gunakan ftp jika Anda suka:
Di Server BUDAK
Edit konfigurasi mysql:
Mulai ulang MySQL:
/etc/init.d/mysql restart
Pulihkan cadangan:
Terhubung ke MySQL:
Jalankan
SHOW SLAVE STATUS\G
:Setelah itu, perlu diingat bahwa replikasi dapat gagal karena berbagai alasan. Pada slave, Anda dapat memonitor status dengan menjalankan perintah SHOW SLAVE STATUS \ G; Atau mengatur tugas cron untuk memonitor status dan mengirim email jika gagal. Dapatkan familar dengan output dari perintah ini. Jika replikasi berjalan dengan benar, Anda akan melihat "Slave_IO_State: Menunggu master mengirim acara".
Setelah Anda mendapatkan pengaturan ini dengan benar, saya dapat memberi Anda skrip untuk memantau replikasi itu.
Berikut ini skrip untuk memonitor kesalahan log di MySQL. Jika Anda menambahkan baris
restart mysql: /etc/init.d/mysql restart
Kemudian Anda dapat menggunakan skrip berikut untuk memantau file log. Jika log berubah dengan cara apa pun, Anda akan menerima email yang memberi tahu Anda bahwa ada kesalahan pada server slave. Jika Anda ingin log kesalahan diperiksa secara teratur, Anda harus menambahkan skrip ini ke crontab Anda.
Berikut ini contoh skrip: /somepath/monitor_mysql_log.sh
Untuk menambah crontab.
Jadikan skrip dapat dieksekusi:
Perbarui crontab:
Dan skrip akan dijalankan setiap menit.
Skrip yang saya sediakan adalah skrip yang saya buat dengan cepat. Selain itu, agar server Anda dapat mengirim email, Anda harus menginstal sesuatu seperti postfix atau sendmail.
sumber
Mysqldump cepat, tetapi memulihkan dump bisa sangat lambat untuk DB besar, dan mengunci meja tidak dapat diterima di situs langsung. Cara yang jauh lebih baik dan lebih cepat untuk mengatur budak adalah dengan menggunakan XtraBackup Percona . XtraBackup memberikan sedikit beban pada master, tidak memerlukan kunci dan pemulihan pada slave sangat cepat. Mekanisme ini memang menghasilkan klon lengkap seluruh database, termasuk hal-hal seperti tabel pengguna, yang akan memecah beberapa hal yang ditetapkan oleh instalasi stok, seperti pengguna debian-sys-Maint, yang tidak selalu merupakan hal yang buruk !
Sebagai bonus, setelah Anda tahu cara melakukan ini, Anda dapat menggunakan mekanisme yang sama persis untuk cadangan harian Anda. Pencadangan lebih lambat daripada mysqldump, tetapi pemulihan jauh lebih cepat, yang hanya Anda butuhkan jika Anda berada dalam situasi di mana Anda panik dan harus memulihkan cadangan! Jika Anda pernah mendapatkan kesalahan replikasi besar, cukup gunakan prosedur ini untuk membuang budak dan membangunnya kembali; itu benar-benar tidak butuh waktu lama.
Anda perlu menyiapkan repo apt / yum Percona Percona untuk distro Anda, lalu instal
xtrabackup
paket pada master dan slave. Saya juga sangat merekomendasikan penggunaan utilitas kompresi pigz (paralel gzip, tersedia di sebagian besar repo standar) karena membuat perbedaan besar untuk kecepatan cadangan.Prosesnya seperti ini (di Ubuntu, distro lain mungkin sedikit berbeda), dan mengasumsikan Anda sudah menginstal MySQL pada slave Anda:
mkdir -p /var/xtrabackup; /usr/bin/innobackupex --slave-info --stream=tar --throttle=1500 /var/xtrabackup 2> /tmp/xtrabackup.out | /usr/bin/pigz -p 4 -c --best -q > /var/backups/mysql.tgz
(atur nilai throttle untuk membatasi dampak cadangan pada layanan langsung)scp -l 400000
agar tidak membuat kelaparan bandwidth jaringan untuk klien langsung)service mysql stop
mv /var/lib/mysql /var/lib/mysql2
(atau kompres di suatu tempat jika Anda kekurangan ruang disk)mkdir /var/lib/mysql; cd /var/lib/mysql
tar xvzif /path/to/backup/mysql.tgz
. Perhatikani
opsi pada operasi tar - ini tidak akan berfungsi tanpanya . Ini akan memakan waktu cukup lama jika Anda memiliki DB besar./usr/bin/innobackupex --apply-log --use-memory=6G --ibbackup=xtrabackup /var/lib/mysql
. Ini secara efektif menjalankan pemulihan kerusakan pada file dari log biner. Ini hanya membutuhkan beberapa detik; gunakan jumlah memori yang lebih kecil jika di server yang lebih kecil.rm /path/to/backup/mysql.tgz; chown -R mysql:mysql /var/lib/mysql
service mysql start
cat xtrabackup_binlog_info
. Itu akan mengatakan sesuatu sepertimysql-bin.000916 13889427
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000916', MASTER_LOG_POS=13889427;
(Ubah untuk mencocokkan rincian server DB nyata)START SLAVE;
SHOW SLAVE STATUS\G
Budak Anda sudah siap. Jika perlu, Anda sekarang dapat mengatur replikasi melingkar:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
Perhatikan nama dan posisi file log (seperti mysql-bin.000031 dan 17244785).CHANGE MASTER TO MASTER_HOST='192.168.0.2', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000031', MASTER_LOG_POS=17244785;
:, memasukkan nilai dari slave yang baru saja kita lihat.START SLAVE;
UNLOCK TABLES;
Anda sekarang harus siap dengan replikasi melingkar.
Sejauh pemecahan masalah berjalan, toolkit Percona memiliki segala macam hal untuk membantu seperti pemeriksaan untuk menemukan korupsi diam, pengukuran lag dan banyak lagi. Bentuk replikasi korupsi yang paling umum dapat dihindari dengan menetapkan
binlog_format = MIXED
di my.cnf Anda. Yang mengatakan, dalam pengalaman saya replikasi pada umumnya tidak merepotkan.sumber