GNU/Linux >> Belajar Linux >  >> Linux

Konfigurasikan replikasi sumber-replika MySQL

Replikasi MySQL® memungkinkan satu server database (disebut sebagai server sumber dalam artikel ini) untuk direplikasi ke satu atau lebih server database (disebut sebagai server replika dalam artikel ini). Dengan MySQL, replikasi tidak sinkron. Ini berarti server replika tidak perlu terhubung secara permanen untuk menerima pembaruan dari server sumber. Misalnya, Anda dapat menghentikan utas replika di server replika dan memulai kembali di lain waktu, dan secara otomatis menyinkronkan dengan sumbernya.

Tutorial ini menyediakan pengaturan sederhana (server sumber tunggal mereplikasi ke server replika tunggal) yang mereplikasi semua database dari sumber ke sana.

Prasyarat

Sebelum memulai tutorial ini, selesaikan langkah-langkah berikut.

  • Instal sistem operasi Anda. (Langkah-langkah dalam artikel ini diselesaikan menggunakan sistem operasi CentOS®)
  • Instal mysql
  • Instal mysql-devel
  • Instal server mysql

Catatan: Prosedur dalam artikel ini menjelaskan konfigurasi replikasi pada kumpulan server baru tanpa data atau database. Ini penting karena data yang ada di server membuang replikasi. Anda dapat menggunakan prosedur ini untuk rasa lain dari Linux®

Kumpulkan Informasi IP

Konfigurasi MySQL dalam artikel ini direplikasi melalui IP pribadi server cloud Anda. Catat IP pribadi setiap server.

Sumber:

[user@mysql-source ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:51:B7:A4:2E
           inet addr:67.23.9.185  Bcast:67.23.9.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:51ff:feb7:a42e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:28878 errors:0 dropped:0 overruns:0 frame:0
           TX packets:15147 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37708534 (35.9 MiB)  TX bytes:1129533 (1.0 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:1A:AF:35:F2
           inet addr:10.176.41.72  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:1aff:feaf:35f2/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Anda ingin mencatat IP yang ditampilkan untuk eth1 . Alamat IP tercantum tepat setelah inet addr: . Dalam contoh ini, IP pribadi server sumber adalah 10.176.41.72. Ulangi ini pada server replika dan catat IP pribadi.

Replika:

 [user@mysql-replica ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:BE:90:EB:1E
           inet addr:67.23.10.69  Bcast:67.23.10.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:beff:fe90:eb1e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:29047 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13527 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37743828 (35.9 MiB)  TX bytes:1473375 (1.4 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:AE:5B:35:3A
           inet addr:10.176.41.207  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:aeff:fe5b:353a/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Alamat IP untuk server replika kami dalam contoh ini adalah 10.176.41.207. Saat Anda memiliki kedua IP pribadi yang dicatat di suatu tempat, Anda dapat mulai mengonfigurasi.

Konfigurasikan server

Sumber

  • Edit /etc/my.cnf file di server sumber untuk mengaktifkan pencatatan log biner dan mengatur nama server.

      [user@mysql-source ~]$ sudo vi /etc/my.cnf
    
  • Tambahkan baris ini di bawah mysqld bagian.

      log-bin=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-binary-log
      expire_logs_days=7
      server-name=<server_number>
    
  • Setel pengguna replikasi.

      mysql> GRANT REPLICATION SLAVE ON *.* to 'replicant'@'slaveIP' IDENTIFIED BY 'somepassword';
    

Sumber my.cnf konfigurasi selesai.

Persiapan replika

  • Verifikasi bahwa zona waktu cocok antara sumber dan replika.

  • Setel item berikut:

      relay-log=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-relay-log
      relay-log-space-limit = 16G
      read-only=1
      server-name=<server_number>
    

Salinan awal data ke replika

Pilih salah satu opsi berikut untuk menyalin data ke replika.

  • mysqldump
  • Salin file datar

mysqldump

Pertimbangkan opsi ini jika direktori data berukuran wajar, dan jika tabel Anda dapat dikunci selama prosedur berlangsung.

 mysqldump -A --flush-privileges --master-data=1 | gzip -1 > ~rack/master.sql.gz

Transfer file dump ke replika dan impor.

Salin file datar

Untuk metode ini, hentikan MySQL di kedua server dan pindahkan direktori data keluar dari replika. Jika MySQL tidak berhenti di kedua server, perlu membuat cadangan:

 # mv /var/lib/mysql{,.prereplication}

Gunakan salah satu metode yang tercantum di atas untuk membuat direktori data pada replika menjadi salinan dari sumbernya. Misalnya:

 # rsync -azv --progress --delete /var/lib/mysql/ slave:/var/lib/mysql/

Ketika penyalinan data selesai, restart MySQL di kedua server. Verifikasi bahwa innodb-log-file-size di /etc/my.cnf diatur sama untuk replika dan sumber, atau MySQL tidak akan memulai replika.

Jika replika adalah versi MySQL yang lebih baru, jalankan mysql_upgrade pada replika sebelum mengeluarkan start slave perintah.

Lampirkan replika ke sumber

Anda memerlukan nama file dan posisi log biner dari sumber yang sesuai dengan cadangan. Jika Anda menggunakan mysqldump , ini akan disertakan dalammaster.sql.gz file itu sendiri.

 # zgrep -m 1 -P 'CHANGE MASTER' master.sql.gz
 CHANGE MASTER TO MASTER_LOG_FILE = '<binary log filename>', MASTER_LOG_POS = <binary log position>;

Untuk salinan tingkat file seperti salinan dingin yang diperoleh dengan mematikan MySQL dan menggunakan rsync , nama file dan posisi log biner akan menjadi file log pertama yang dibuat setelah memulai ulang MySQL.

Anda dapat memperolehnya dengan mengikuti langkah-langkah berikut:

 # service mysqld stop
 # tail -n 1 /var/lib/mysqllogs/db1-1234-bin-log.index
 /var/lib/mysqllogs/db1-1234-bin-log.000001
 # rsync ...
 # service mysqld start

Dalam hal ini, mulai dari nama file db1-bin-log.000001 + 1 = db1-1234-bin-log.000002 di awal file ini. Anda akan mendapatkan hasil ini:

 MASTER_LOG_FILE = 'db1-1234-bin-log.000002', MASTER_LOG_POS = 4

Sekarang jalankan CHANGE MASTER pada replika untuk menyetel kredensial untuk menghubungkan ke sumber, serta file log biner dan posisi untuk memulai replikasi.

 mysql> change master to master_host='master-ip',master_user='userSetAbove', master_password='passwordSetAbove',master_log_file='logfile-from-above-command', master_log_pos=4;
 mysql> start slave;

Kredensial root MySQL

Pastikan replika baru memiliki kredensial yang sama di /root/.my.cnf file sebagai server sumber. Database MySQL dan tabel hibah pengguna juga disinkronkan ke replika.

Belanda

Karena Anda mengimpor database MySQL dari sumbernya, semua kata sandi sekarang sama. Sama seperti Anda memperbarui /root/.my.cnf pada dbReplica agar sesuai dengan dbSource, Anda mungkin perlu memperbarui /etc/holland/backupsets/default.conf file untuk menggunakan kredensial yang sama sebagai sumber untuk rackspace_backup .

Pengujian

Uji pengaturan Anda dengan membuat database tiruan pada sumber dan memverifikasi bahwa itu muncul di replika. Setelah diverifikasi, Anda dapat menghapus basis data dummy dan mengonfirmasi bahwa replika secara otomatis menjatuhkannya.

Jika Anda melihat kesalahan seperti Last_IO_Error: error connecting to master , uji pengguna replikasi secara manual. Dari replika, coba dua hal:

nc masterIP 3306

Jika Anda melihat kesalahan di sini, hibah Anda salah, mungkin karena Anda berada di segmen jaringan yang berbeda dari yang Anda kira. Kesalahan akan terlihat sepertiHost dbSlave is not allowed to connect to this MySQL server .

mysql -ureplicant -hmasterDb -p

Jika Anda mendapatkan kesalahan, hibah Anda salah.

Jika salah satu dari mereka gagal terhubung, Anda mungkin perlu menyesuaikan firewall atau memverifikasi bahwa Anda membuat asumsi yang benar tentang bagaimana jaringan dikonfigurasi untuk pelanggan ini.

Pemfilteran

Disarankan agar Anda tidak menggunakan pemfilteran replikasi. Jika Anda ingin mengecualikan beberapa tabel dari replika, satu-satunya metode yang disarankan adalah dengan salah satu dari my.cnf berikut opsi yang dikonfigurasi pada replika:

 replicate-wild-do-table=dbase1.%
 replicate-wild-do-table=dbase3.%

 replicate-wild-ignore-table=dbase2.%
 replicate-wild-ignore-table=dbase4.someTable

Pola dapat berisi karakter wildcard % dan \_ , yang memiliki arti yang sama dengan LIKE operator pencocokan pola. Jika Anda perlu menggunakan karakter literal_, hindari sebagai berikut:

 replicate-wild-ignore-table=%.%\_tmp

Di MySQL 5.5, opsi pemfilteran tingkat basis data peka huruf besar/kecil pada platform yang mendukung sensitivitas huruf besar/kecil dalam nama file. Opsi pemfilteran tingkat tabel tidak peka huruf besar-kecil pada platform apa pun, terlepas dari nilailower_case_table_names variabel sistem.

Acara

Jika my.cnf telah diaktifkan pada sumber, Anda dapat menonaktifkannya di replika. Jika penjadwal acara memang perlu diaktifkan pada replika, verifikasi bahwa acara yang ada dibuat dengan CREATE EVENT ... DISABLE ON SLAVE dengan sesuatu seperti:select db, name from mysql.event where status not in (‘disabled’,‘slavename_disabled’);

Pemantauan

Selalu pantau replikasi. Di Emerging, kami biasanya menggunakanSiteScope Content Match dengan check_replication.php , yang biasanya hidup di snamee httpd yang berjalan di replika.

Anda perlu mengeluarkan HIBAH untuk ini pada sumbernya, yang mereplikasi ke replika:

 GRANT REPLICATION CLIENT ON *.* TO 'rep_monitor'@'slavePrimaryIP' IDENTIFIED BY 'somePassword';

Dengan asumsi Anda berada di belakang firewall, 'slavePrimaryIP' harus menjadi alamat IP internal server replika [192.168.100.x]. Di check_replication.php skrip, atur host=‘192.168.100.x , IP internal server tempat skrip berjalan. Ini biasanya sama dengan slavePrimaryIP .

Hubungi manajer akun Anda dan minta pengaturan monitor SiteScope. URL harus berupa IP publik dari server pemantauan, misalnyahttps://68.23.45.32/check_replication.php

Catatan: Script dapat memiliki elemen tambahan di dsn list array dan periksa beberapa replika dengan probe SiteScope tunggal. Dokumentasi PHP menyatakan bahwa koma setelah elemen array terakhir adalah opsional dan dapat dihilangkan. Namun, dengan pemeriksaan SiteScope yang memeriksa beberapa replika, mungkin kurang jelas replika mana yang bermasalah saat peringatan dihapus dengan cepat. Dalam hal ini, masuk akal untuk memiliki check_replication.php dan pemeriksaan SiteScope terkait yang berjalan pada setiap replika.

Sekarang duduk dan biarkan server replika Anda mereplikasi dari sumbernya. Pastikan untuk tidak melakukan penulisan apa pun ke server replika karena itu merusak replikasi! Semua penulisan yang dilakukan pada sumber dikirim secara otomatis ke replika melalui log biner dan replikasi. Untuk informasi lebih lanjut tentang replikasi MySQL, lihathttps://dev.mysql.com/doc/refman/5.0/en/replication.html.


Linux
  1. Cara mengkonfigurasi Replikasi Multi-Master MySQL di Oracle Linux

  2. Konfigurasikan WSO2 API Manager dengan Database MySQL

  3. Apa tujuan dari "pengguna sistem" di Replikasi MySQL?

  1. Cara mengatur replikasi MySQL di CentOS

  2. Konfigurasikan server MySQL pada sistem operasi Ubuntu

  3. Konfigurasikan replikasi sumber-replika MySQL

  1. Konfigurasikan replikasi sumber-sumber MySQL

  2. Siapkan replikasi sumber-replika MySQL

  3. Cara mengonfigurasi Database Budak MySQL