GNU/Linux >> Belajar Linux >  >> Debian

Mereplikasi database master menggunakan MariaDB 10 di Debian 8

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_pos

Jika 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 -p

Buat basis data baru:

BUAT DATABASE repltest;
GUNAKAN tes ulang

Buat tabel dan masukkan nilai:

tes CREATE TABLE (halo VARCHAR(10));
MASUKKAN KE DALAM NILAI uji ('dunia');
\q

Sekarang masukkan klien MariaDB pada slave:

mysql -u root -p
GUNAKAN tes ulang
PILIH * 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/dbname

11 (c ). Di master, sebagai pengguna biasa:

rsync -avP mysql-master.tar.bz2 [nama pengguna]@slavehost2:~/.

11 (d ). Pada budak, sebagai root:

layanan mysql berhenti
tar 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=200

11 (f ). Di master, di klien MariaDB sebagai root database, buka kunci tabel:

BUKA TABEL;

11 (g ). Pada master, sebagai root, restart mysqld:

layanan mysql restart

11 (h ). Pada slave, sebagai root, jalankan mysqld:

 layanan mysql mulai

11 (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 -L

Anda 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


Debian
  1. Cara Mengatur Replikasi Sinkron MariaDB Galera Multi-Master menggunakan Debian 10

  2. Cara Menginstal MariaDB 10.x di Debian 11

  3. Debian – Menggunakan Dua Tampilan Di Debian?

  1. Cara Menginstal MariaDB di Debian 9

  2. Cara Menginstal MariaDB di Debian 10

  3. Cara Menginstal PostgreSQL di Debian 10

  1. Cara Menginstal MariaDB di Debian 11

  2. Instal Alat Manajemen Database Adminer di Debian 10

  3. Cara Menginstal NextCloud di Debian 10