Replikasi database menciptakan redundansi yang dapat melindungi dari kehilangan data, dan memungkinkan performa yang dioptimalkan untuk aplikasi. Tutorial ini akan membahas dasar-dasar mereplikasi database master MariaDB 10.0 yang ada ke satu atau lebih slave. Dalam contoh berikut, sistem operasi host adalah Debian 8.
Instruksi ini dapat diterapkan ke sistem operasi lain, tetapi perlu diketahui bahwa beberapa perintah dan lokasi file default akan berbeda. Secara khusus, Anda harus mengganti nama path dari /etc/mysql/my.cnf , /var/lib/mysql , nama default dan jalur file log biner Anda, dan perintah untuk memulai, menghentikan, dan memulai ulang mysqld sesuai dengan spesifikasi sistem Anda.
1. Verifikasi konektivitas
Sebelum melanjutkan, pastikan master dan slave dapat menjangkau satu sama lain di jaringan, dan masing-masing memiliki entri untuk yang lain di /etc/hosts masing-masing. file. Setiap host harus dapat ping yang lain, dan Anda harus dapat ssh dari satu sama lain sebagai pengguna biasa.
2. Aktifkan log biner mysqld di master
Di host master, periksa apakah pencatatan log biner diaktifkan. Menjalankan mysqld dengan sakelar --verbose --help akan menampilkan nilai operasi untuk daemon MariaDB. Sebagai root:
mysqld --verbose --help | grep log-bin
...
log-bin (Tidak ada nilai default)
...
Nilai entri log-bin mendefinisikan konvensi penamaan file log biner. Di Debian, file-file ini berada di /var/lib . Jika nilai log-bin adalah (Tidak ada nilai default) , Anda harus mengaktifkan logging dengan memodifikasi file konfigurasi my.cnf . Di Debian, my.cnf berada di direktori /etc/mysql .
Buka /etc/mysql/my.cnf di editor teks dan temukan [mysqld] kelompok. Jika tidak ada, buat, dan masukkan baris yang bertuliskan log-bin .
[mysqld]
log-bin
Menyertakan entri ini akan mengaktifkan pencatatan log biner saat mysqld dimulai ulang.
Anda dapat memilih untuk menetapkan nilai untuk log-bin , misalnya log-bin=nama file , untuk menentukan nama khusus untuk file log biner. Dalam tutorial ini, kita tidak akan menetapkan nilai, dan nama file log default akan digunakan.
Mulai ulang mysqld:
layanan mysql restart
Verifikasi bahwa perubahan telah diterapkan:
mysqld --verbose --help | grep log-bin
...
log-bin mysqld-bin
...
Seperti yang ditunjukkan di sini, nama file log biner default di Debian dimulai mysqld-bin , misalnya mysqld-bin.nnnnnn .
3. Berikan hak kepada pengguna replikasi
Ini adalah praktik terbaik agar semua tugas replikasi dilakukan oleh pengguna replikasi khusus. Dalam contoh ini, kami akan memberi nama pengguna repluser dan setel sandi pengguna ini ke string replpass .
Beri pengguna ini hak istimewa global SUPER , MUAT ULANG , dan REPLIKASI BUDAK . Ini akan memungkinkan pengguna replikasi untuk menjalankan perintah superuser, membersihkan cache database, dan mengambil pembaruan dari server master.
Masukkan klien MariaDB sebagai root database:
mysql -u root -p
Pada prompt MariaDB, masukkan perintah:
GRANT SUPER, RELOAD, REPLICATION SLAVE PADA *.* UNTUK 'repluser'@'%' DIIDENTIFIKASI DENGAN 'replpass';
Di sini, karakter pengganti nama host '% ' memungkinkan pengguna replikasi untuk terhubung dari host mana pun.
Verifikasi bahwa hak telah diberikan:
TAMPILKAN HIBAH UNTUK 'repluser'\G;
4. Bersihkan cache database dan setel tabel ke hanya-baca
Sebagai persiapan untuk membuat snapshot database, bersihkan semua tabel dan setel ke READ LOCK . Ini harus dilakukan dengan cepat, selama jam tidak sibuk atau periode pemeliharaan sistem.
Pada master:
FLUSH TABLES DENGAN READ LOCK;
Sekarang tabel dikunci, periksa status master:
TUNJUKKAN STATUS MASTER;
+-------------------+----------+--------------+ ------------------+
| Berkas | Posisi | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+------------ --+------------------+
| mysqld-bin.000005 | 995 | | |
+-------------------+----------+------------- -+------------------+
Informasi Anda akan berbeda, tetapi catat nilai File dan Posisi . Anda akan menggunakan informasi ini di langkah 7.
Keluar dari klien MariaDB:
\q
5. Basis data snapshot untuk host budak
Buat arsip database atau database yang ada pada master yang akan Anda tiru. Setiap database ini memiliki direktorinya sendiri di /var/lib/mysql . Dalam contoh ini, kita akan tar membuat satu database, berada di jalur /var/lib/mysql/dbname .
Perintah ini mengarsipkan satu database. Jika Anda mengarsipkan database tambahan, tambahkan nama path lengkapnya ke perintah, mis. /var/lib/mysql/dbname1 /var/lib/mysql/dbname2 ...
tar cjvf /home/[nama pengguna]/mysql-master.tar.bz2 /var/lib/mysql/dbname
Sekarang, sebagai pengguna biasa nama pengguna , transfer file ini ke akun pengguna biasa di host slave:
rsync -avP mysql-master.tar.bz2 [nama pengguna]@slavehost:~/.
atau, menggunakan scp:
scp mysql-master.tar.bz2 [nama pengguna]@slavehost:~/.
Kemudian, SSH ke host budak:
ssh [nama pengguna]@slavehost
Sebagai root, hentikan mysqld pada slave:
layanan mysql berhenti
...dan ekstrak arsipnya:
tar xjvf /home/[nama pengguna]/mysql-master.tar.bz2 -C /.
6. Konfigurasi ID server untuk master dan slave
Ubah /etc/mysql/my.cnf pada master, tambahkan entri server-id=n di [mysqld] grup, di mana n adalah bilangan bulat unik yang mengidentifikasi server. Biasanya, n =1 untuk server master, tetapi n dapat berupa bilangan bulat unik apa pun dalam rentang [1 , 2^32-1 ]. Kami akan mengatur master kami ke server-id=1 , dan budak kami ke server-id=100 .
(Jika my.cnf tidak ada pada budak, buatlah. Jika ada, cari server-id yang ada entri, dan batalkan komentar/edit baris itu).
Di /etc/mysql/my.cnf pada tuan rumah utama:
[mysqld]
server-id=1
Di /etc/mysql/my.cnf pada host budak:
[mysqld]
server-id=100
7. Buka kunci tabel dan mulai/mulai ulang mysqld pada master dan slave
Di server master, di klien MariaDB sebagai root database, buka kunci tabel:
mysql -u root -p
BUKA TABEL;
\q
Mulai ulang mysqld pada master:
layanan mysql restart
Dan mulai pada budak:
layanan mysql mulai
Anda dapat memverifikasi bahwa server-id . yang baru nilai telah berlaku pada setiap host. Sebagai root:
mysqld --verbose --help | grep server-id
8. Konfigurasi identitas master pada slave
Pada slave, konfigurasikan identitas server master. Masukkan klien MariaDB:
mysql -u root -p
Jalankan perintah berikut, ganti nilai MASTER_LOG_FILE dan MASTER_LOG_POS dengan log biner File dan Posisi yang Anda rekam di langkah 4, dan nilai MASTER_HOST , MASTER_USER , dan MASTER_PASSWORD dengan nilai Anda sendiri.
CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=995;
9. Aktifkan budak
Di slave, di klien MariaDB sebagai root database:
MULAI BUDAK;
Anda sekarang dapat memeriksa status budak:
TAMPILKAN STATUS BUDAK \G;
*************************** 1. baris ***************** **********
Slave_IO_State:Menunggu master mengirim acara
Master_Host:masterhost
Master_User: _> _> _> Master
master_log_file:mysqld-bin.000009
read_master_log_pos:1330
relay_log_file:mysqld-relay-bin.000008
relay_log_pos:1618
relay_master_file_file:1618
relay_master_file_file. br /> slave_io_running:ya
slave_sql_running:ya
replicate_do_db:
Replicate_ignore_db:
Replicate_do_table:
Replicate_ignore_table:
Replicate_Wild_do_table:
br /> Last_Errno:0
Last_Error:
Skip_Counter:0
_Log_Pos:1330
Relay_Log_Space:2204
Until_Condition:Tidak ada
Until_Log_File:
Until_Log_Pos:0
Master_SSL_Allowed:Tidak ada
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:0
Master_SSL_Verify_Server_Cert:Tidak ada
Last_IO_Errno:0
Last_IO_Error:
Last_SQL_Errno:0
last_sql_error:
Replicate_ignore_server_ids:
master_server_id:1
master_ssl_crl:
master_ssl_crlpath:
using_gtid:no
gtid_io_pos:
using_gtid:no
gtid_io_pos:
Using_gtid:no
gtid_io_pos:
Using_gtid:no
gtid_io_posJika ada kesalahan dalam proses replikasi, Anda akan melihatnya tercantum di sini.
10. Buat perubahan pada master, dan verifikasi replikasi pada slave
Anda dapat memverifikasi bahwa replikasi sedang terjadi dengan membuat database baru pada master, dan melihat perubahan pada slave.
mysql -u root -pBuat basis data baru:
BUAT DATABASE repltest;GUNAKAN tes ulangBuat tabel dan masukkan nilai:
tes CREATE TABLE (halo VARCHAR(10));MASUKKAN KE DALAM NILAI uji ('dunia');\qSekarang masukkan klien MariaDB pada slave:
mysql -u root -pGUNAKAN tes ulangPILIH * DARI tes;+-------+
| halo |
+-------+
| dunia |
+-------+
1 baris dalam set (0,00 detik)
11. Ulangi proses untuk budak tambahan
Anda dapat mengulangi proses ini untuk setiap budak tambahan. Secara khusus, lakukan langkah-langkah berikut:
11 (a ). Di master, di klien MariaDB sebagai root database, flush dan kunci tabel:
FLUSH TABLES DENGAN READ LOCK;Setelah mengunci, tampilkan status master:
TUNJUKKAN STATUS MASTER;Catat File dan Posisi nilai.
11 (b ). Di master, sebagai root:
tar cjvf /home/[nama pengguna]/mysql-master.tar.bz2 /var/lib/mysql/dbname11 (c ). Di master, sebagai pengguna biasa:
rsync -avP mysql-master.tar.bz2 [nama pengguna]@slavehost2:~/.11 (d ). Pada budak, sebagai root:
layanan mysql berhentitar xjvf /home/[nama pengguna]/mysql-master.tar.bz2 -C /.11 (e ). Di /etc/mysql/my.cnf pada host budak, tambahkan atau edit server-id= baris di [mysqld] grup, di mana nilai server-id baru dan unik:
[mysqld]
server-id=20011 (f ). Di master, di klien MariaDB sebagai root database, buka kunci tabel:
BUKA TABEL;11 (g ). Pada master, sebagai root, restart mysqld:
layanan mysql restart11 (h ). Pada slave, sebagai root, jalankan mysqld:
layanan mysql mulai11 (saya ). Pada slave, di klien MariaDB sebagai root database, konfigurasikan identitas master, dan nama file log biner serta posisi dari langkah 10(a):
GANTI MASTER KE MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.nnnnnn', MASTER_LOG_POS=n;11 (j ). Pada slave, di klien MariaDB sebagai root database, aktifkan replikasi:
MULAI BUDAK;
12. Pemecahan masalah:Budak tidak dapat terhubung ke master
Periksa /var/mysql/my.cnf pada master untuk mengikat-alamat masuk. Jika mengikat-alamat disetel ke 127.0.0.1 , server hanya akan menerima koneksi dari localhost. Beri komentar pada baris ini, atau setel nilainya ke * untuk mengizinkan koneksi dari semua alamat IPv4 dan IPv6. Jika Anda memodifikasi my.cnf , jangan lupa restart mysqld.
Jika koneksi masih tidak berfungsi, pastikan server Anda mengizinkan koneksi pada port 3306 . Pada master, buat daftar tabel firewall kernel:
iptables -LAnda dapat membuat kelonggaran untuk koneksi pada port 3306 dengan perintah berikut, mengganti nama perangkat antarmuka jaringan Anda dengan eth0 seperlunya:
iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
Cara menginstal Rundeck di server Debian 8 (Jessie) Instal Horde 5 Webmail untuk ISPConfig di Debian Jessie melalui PEARDebian