Skrip pemeriksaan status replikasi mysql

Hari ini di artikel ini kita akan mendapatkan ide tentang cara memonitor replikasi MySQL. Ini adalah persyaratan hari ini untuk mengatur replikasi di lingkungan Anda, tetapi apakah itu cukup? . Kita perlu memantau replikasi kita dari waktu ke waktu. Saya menulis skrip kecil untuk memantau lingkungan kita, yang akan saya bagikan kepada kalian untuk membuat hidup Anda semudah saya

Hal-hal yang perlu dipantau di sisi budak Anda

LAST_ERRNO
SECONDS_BEHIND_MASTER
IO_IS_RUNNING
SQL_IS_RUNNING
MASTER_LOG_FILE
RELAY_MASTER_LOG_FILE

Semua variabel ini adalah bagian dari 'tunjukkan status budak'

Simpan skrip di bawah ini di. sh dan jalankan seperti di bawah ini

/mysqlhealthcheck. SH

MYSQL_CHECK=$(./mysql-uUsername -ppassword -e "SHOW VARIABLES LIKE '%version%';" || echo 1)
#echo $MYSQL_CHECK
STATUS_LINE=$(./mysql-uUsername -ppassword -e "SHOW SLAVE STATUS\G")"1"
LAST_ERRNO=$(grep "Last_Errno" <<< "$STATUS_LINE" | awk '{ print $2 }')
SECONDS_BEHIND_MASTER=$( grep "Seconds_Behind_Master" <<< "$STATUS_LINE" | awk '{ print $2 }')
IO_IS_RUNNING=$( grep "Slave_IO_Running" <<< "$STATUS_LINE" | awk '{ print $2 }')
SQL_IS_RUNNING=$(grep "Slave_SQL_Running" <<< "$STATUS_LINE" | awk '{ print $2 }')
MASTER_LOG_FILE=$(grep " Master_Log_File" <<< "$STATUS_LINE" | awk '{ print $2 }')
RELAY_MASTER_LOG_FILE=$(grep "Relay_Master_Log_File" <<< "$STATUS_LINE" | awk '{ print $2 }')
ERRORS=()
MESSAGE="NO ERROR"
bold=$(tput bold)
normal=$(tput sgr0)
echo "${bold}MYSQL_CHECK : ${normal} $MYSQL_CHECK "
echo "${bold}LAST_ERRNO : ${normal} $LAST_ERRNO "
printf "\n"
echo "${bold}SECONDS_BEHIND_MASTER : ${normal} $SECONDS_BEHIND_MASTER"
printf "\n"
echo "${bold}IO_IS_RUNNING : ${normal} $IO_IS_RUNNING"
printf "\n"
echo "${bold}SQL_IS_RUNNING : ${normal} $SQL_IS_RUNNING"
printf "\n"
echo "${bold}MASTER_LOG_FILE : ${normal} $MASTER_LOG_FILE"
printf "\n"
echo "${bold}RELAY_MASTER_LOG_FILE : ${normal} $RELAY_MASTER_LOG_FILE"
printf "\n"
### if there is an error ###
if [ "${#ERRORS[@]}" -gt 0 ]
then
MESSAGE="An error has been detected involving the mysql replciation. Below is a list of the reported errors:\n\n
$(for i in $(seq 1 ${#ERRORS[@]}) ; do echo "\t${ERRORS[$i]}\n" ; done)
Please correct this ASAP
"
echo -e $MESSAGE 
else 
echo -e $MESSAGE
fi
KELUARAN
MYSQL_CHECK : Variable_name Value
innodb_version 1.1.8
protocol_version 10
slave_type_conversions
version 5.5.19-enterprise-commercial-advanced-log
version_comment MySQL Enterprise Server - Advanced Edition (Commercial)
version_compile_machine i686
version_compile_os linux2.6 
LAST_ERRNO : 0
SECONDS_BEHIND_MASTER : 0
IO_IS_RUNNING : Yes
SQL_IS_RUNNING : Yes
MASTER_LOG_FILE : mysql-bin.000007
RELAY_MASTER_LOG_FILE : mysql-bin.000007
NO ERROR
_

Anda juga dapat menambahkan skrip ini ke dalam tugas cron Anda dan mengirimkan bagian "echo -e $MESSAGE" ke diri Anda sendiri melalui email

Jika Anda memiliki replikasi MySQL yang berjalan baik dalam pengaturan tipe master-slave atau master-master, maka jangan menganggap semuanya berjalan dengan sempurna sepanjang waktu. Pemadaman listrik dan bencana lainnya bisa terjadi sehingga Anda perlu memeriksa secara berkala untuk memastikan semuanya berfungsi. Posting ini memiliki skrip PHP untuk memeriksa kesalahan replikasi MySQL dan kemudian mengirim email jika ada masalah

Status Budak MySQL

Dapatkan status MySQL Slave saat ini dengan menjalankan perintah "SHOW SLAVE STATUS" pada slave. Ini akan mengeluarkan semua jenis informasi termasuk apakah yang berikut ini berjalan ("Ya" atau "Tidak")

  • Budak_IO_Berjalan
  • Slave_SQL_Menjalankan

dan kemudian nomor dan pesan kesalahan untuk masing-masing di atas seperti itu

  • Last_IO_Errno
  • Last_IO_Error
  • Last_SQL_Errno
  • Last_SQL_Error

Skrip PHP untuk memeriksa status budak MySQL

Skrip berikut harus dijalankan secara berkala. Modifikasi agar sesuai dengan tujuan Anda sendiri sesuai keinginan Anda

Masukkan nilai untuk nama pengguna dan kata sandi untuk login sebagai (skrip saya menganggap login dan kata sandi yang sama digunakan untuk semua server, dan bahwa semua server dapat masuk dari server saat ini) dan daftar server MySQL untuk diperiksa

$username = '[username]';
$password = '[password]';
$servers = array(
	'[server1]',
	'[server2]',
	'[serverN]',
);

$errors = '';

foreach($servers as $server) {
	$link = mysql_connect($server, $username, $password);
	if($link) {
		$res = mysql_query("SHOW SLAVE STATUS", $link);
		$row = mysql_fetch_assoc($res);
		if($row['Slave_IO_Running'] == 'No') {
			$errors .= "Slave IO not running on $servern";
			$errors .= "Error number: {$row['Last_IO_Errno']}n";
			$errors .= "Error message: {$row['Last_IO_Error']}nn";
		}
		if($row['Slave_SQL_Running'] == 'No') {
			$errors .= "Slave SQL not running on $servern";
			$errors .= "Error number: {$row['Last_SQL_Errno']}n";
			$errors .= "Error message: {$row['Last_SQL_Error']}nn";
		}
		mysql_close($link);
	}
	else {
		$errors .= "Could not connect to $servernn";
	}
}

if($errors) {
	mail('[email address]', 'MySQL slave errors', $errors);
}

Tautan yang berguna untuk menangani kesalahan

Saya tidak akan membantu Anda memperbaiki kesalahan sendiri karena saya hanya akan menyalin kurang lebih informasi yang saya temukan di situs web lain (dan saya tidak tahu seberapa akurat atau sukses semua solusinya) jadi akan ditautkan

HowtoForge memiliki postingan berjudul "cara memperbaiki replikasi MySQL" yang menunjukkan contoh perintah SHOW SLAVE STATUS dan mencakup perbaikan masalah saat Slave_SQL_Running adalah "Tidak". Saya telah menggunakan solusi yang disajikan beberapa kali untuk memperbaiki masalah, tetapi berhati-hatilah jika Anda memiliki sesuatu seperti masalah pelanggaran kunci utama dan Anda melewatkan kesalahan maka database Anda mungkin tidak benar-benar sinkron.

Saya pribadi mendapat kesalahan Slave_IO_Running = "No" yang menghasilkan pesan "Got fatal error 1236. 'Klien meminta master untuk memulai replikasi dari posisi yang tidak mungkin' dari master saat membaca data dari log biner"

Artikel di wiki Brian Klug ini membantu saya; . Catatan Anda juga tidak perlu mengatur host master, pengguna dan kata sandi juga, hanya file dan posisinya

Artikel lain di dev. kafol. net memberi saya referensi silang untuk solusi yang sama dan juga berbicara tentang pengaturan sync_binlog ke 1 dalam konfigurasi MySQL yang mungkin berguna;

Bagaimana cara memeriksa status replikasi di MySQL?

Periksa Status Replikasi MySQL di Server Kueri .
Mulai utilitas baris perintah MySQL di server budak. # cd /opt/mysql/mysql/bin. .
Periksa status replikasi menggunakan perintah show slave status (status server slave disampaikan oleh nilai kolom Slave_IO_Running dan Slave_SQL_Running)

Bagaimana cara memeriksa status replikasi saya?

Gunakan salah satu metode berikut untuk melihat kesalahan replikasi. .
Unduh dan jalankan alat Asisten Dukungan dan Pemulihan Microsoft ATAU Jalankan Alat Replikasi Status AD di DC
Baca status replikasi di keluaran repadmin /showrepl. Repadmin adalah bagian dari Alat Administrator Server Jarak Jauh (RSAT)

Bagaimana cara memeriksa status replikasi grup di MySQL?

Anda dapat menggunakan Skema Kinerja MySQL untuk memantau Replikasi Grup. Tabel Skema Kinerja ini menampilkan informasi khusus untuk Replikasi Grup. replication_group_member_stats. Lihat Bagian 17. 4. 2, “Tabel replication_group_members”.

Bagaimana cara memeriksa kelambatan replikasi di MySQL?

TAMPILKAN STATUS BUDAK” . Mantra MySQL DBA . Cukup jalankan pernyataan SQL ini di node budak Anda yang diduga mengalami kelambatan replikasi.