Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Mengonfigurasi Replikasi Sumber-Replika di MySQL

MySQL adalah sistem manajemen basis data relasional yang merupakan salah satu proyek sumber terbuka paling populer. Meskipun dikenal dengan stabilitasnya, MySQL bahkan lebih dapat diandalkan jika replikasi sumber-replika dikonfigurasi. Dalam replikasi, satu server MySQL biasanya ditunjuk sebagai sumber . Sebuah sumber mengirimkan perubahan basis data dan pembaruan data ke satu atau beberapa replika server basis data. Prosedur replikasi data MySQL fleksibel, dan server replika tidak perlu terhubung secara permanen ke sumbernya. Panduan ini menjelaskan cara mengonfigurasi replikasi data sumber-replika di MySQL.

Cara Kerja Replikasi Data MySQL

Proses replikasi menyimpan data dalam database sumber terlebih dahulu dan kemudian menyalinnya ke replika apa pun. Setelah memproses instruksi, server database sumber melacak perubahan dalam log biner. Log berfungsi sebagai catatan berurutan dari semua perubahan pada struktur dan konten database. SELECT pernyataan tidak direkam karena tidak mengubah isi database.

Pembaruan terjadi secara tidak sinkron, sehingga replika tidak harus terus terhubung. Ini kontras dengan arsitektur sinkron dari sistem dengan keandalan tinggi. Jika sinkronisasi waktu nyata diperlukan, MySQL merekomendasikan penggunaanNDB Cluster .

Setiap replika menarik data dari sumber dengan meminta konten log biner sumber. Replika kemudian menerapkan pernyataan secara berurutan, secara efektif memutar ulang peristiwa yang terjadi pada sumbernya. Setiap replika independen dan melacak posisinya saat ini dengan log biner sumber. Selain itu, setiap replika dapat disinkronkan dengan sumber sesuai dengan jadwalnya sendiri. Data dapat dibaca dari server mana pun, termasuk replikanya.

MySQL memungkinkan tingkat granularity yang tinggi. Dimungkinkan untuk mereplikasi database tertentu atau bahkan tabel tertentu dalam database. Format replikasi default adalah Replikasi Berbasis Pernyataan (SBR), di mana seluruh pernyataan SQL direplikasi. Namun, Replikasi Berbasis Baris (RBR) juga tersedia. Format ini mereplikasi baris yang telah diubah. Dimungkinkan juga untuk mengonfigurasi konfigurasi banyak-ke-banyak yang lebih rumit. Lihat Dokumentasi MySQL untuk informasi lebih lanjut tentang opsi replikasi yang berbeda.

Catatan MySQL sebelumnya menyebut Replikasi Sumber-Replika sebagai "Replikasi Master-Slave". Organisasi MySQL baru-baru ini mengubah terminologi, menjelaskan alasan mereka dalam pembaruan terminologi. Istilah lama "master" telah diubah menjadi "sumber", sementara "budak" sekarang disebut sebagai "replika". Istilah lama mungkin masih muncul di perintah dan tampilan keluaran tertentu saat MySQL memperbarui basis kodenya. Panduan ini menggunakan istilah pilihan MySQL di seluruh instruksi.

Kelebihan Replikasi Data MySQL

Mengaktifkan replikasi sumber-replika menawarkan banyak keuntungan signifikan dibandingkan sistem non-redundan. Daftar di bawah ini memberikan ikhtisar tentang beberapa manfaat:

  • Sangat mudah untuk membuat salinan cadangan langsung kapan saja. Karena proses replikasi tidak sinkron, replikasi dapat terjadi sesuai dengan jadwal apa pun. Replika tidak harus disinkronkan dengan sumbernya agar berfungsi dengan andal.

  • Menambahkan replika dapat meningkatkan waktu kerja dan keandalan untuk keseluruhan sistem. Kontrol utama dapat beralih ke replika jika pemeliharaan diperlukan atau database sumber tidak tersedia.

  • Setiap replika menyediakan contoh database lain yang dapat dibaca. Hal ini memungkinkan program data mining atau analisis untuk menanyakan replika tanpa menempatkan beban tambahan pada database sumber asli.

  • Arsitektur ini meningkatkan skalabilitas dan kinerja. Basis data dibaca dan SELECT pernyataan dapat diseimbangkan antara server, mengurangi latensi.

  • Pihak ketiga dapat memperoleh akses baca-saja ke database melalui replika, dan tidak lagi memerlukan akses ke sumbernya. Basis data replika dapat dibuat sesuai permintaan saat diperlukan dan dihancurkan saat tidak lagi diperlukan. Teknik ini meningkatkan keamanan dan memastikan tidak mungkin untuk mengubah data asli.

Sebelum Anda Mulai

  1. Jika Anda belum melakukannya, buat akun Linode dan Compute Instance. Lihat panduan Memulai Linode dan Membuat Instans Komputasi.

  2. Ikuti panduan Menyiapkan dan Mengamankan Instans Komputasi untuk memperbarui sistem Anda. Anda mungkin juga ingin mengatur zona waktu, mengkonfigurasi nama host Anda, membuat akun pengguna terbatas, dan memperkuat akses SSH.

  3. Anda harus memiliki setidaknya dua Linode terpisah untuk mengonfigurasi replikasi sumber-replika MySQL. Satu Linode meng-host database sumber, sementara node lain diperlukan untuk server replika.

Catatan Langkah-langkah dalam panduan ini ditulis untuk pengguna non-root. Perintah yang memerlukan hak istimewa yang lebih tinggi diawali dengan sudo . Jika Anda tidak terbiasa dengan sudo perintah, lihat panduan Pengguna dan Grup Linux.

Konfigurasi Replikasi Sumber-Replika di MySQL

Untuk mengkonfigurasi replikasi sumber-replika, MySQL harus diinstal pada dua server terpisah yang dapat berkomunikasi satu sama lain. Instruksi ini ditujukan untuk distribusi Ubuntu tetapi umumnya berlaku untuk semua distribusi Linux. Prosesnya terdiri dari langkah-langkah berikut:

  1. Instal MySQL.
  2. Konfigurasi Database Sumber MySQL.
  3. Konfigurasikan Pengguna MySQL Baru untuk Replika.
  4. Siapkan Data MySQL untuk Replikasi.
  5. Konfigurasi Database Replika MySQL.
  6. Impor Data MySQL yang Direplikasi dan Aktifkan Replikasi.

Instal MySQL

Jika MySQL belum tersedia di kedua Linode, instal menggunakan langkah-langkah berikut:

  1. Tingkatkan Linode.

     sudo apt-get update && sudo apt-get upgrade
    
  2. Instal server MySQL dan aplikasi klien pada server sumber dan replika.

     sudo apt-get install mysql-server mysql-client -y
    
  3. Konfigurasikan opsi keamanan, termasuk kata sandi root, menggunakan mysql_secure_installation perintah.

     sudo mysql_secure_installation
    
  4. Jika Anda menggunakan firewall seperti ufw , pastikan itu memungkinkan lalu lintas MySQL melalui. Tambahkan aturan berikut untuk membuka port 3306 di firewall.

     ufw allow mysql
    

Konfigurasi Database Sumber MySQL

Untuk mengaktifkan replikasi MySQL, edit beberapa variabel di file konfigurasi MySQL utama. Buat perubahan berikut pada konfigurasi database sumber.

  1. Temukan file konfigurasi MySQL utama di server database sumber. File ini biasanya ditemukan di /etc/mysql/mysql.conf.d/mysqld.cnf . Namun dalam instalasi sebelumnya, mungkin terletak di /etc/my.cnf atau /etc/mysql/my.cnf . Itu juga dapat dirujuk dari salah satu file melalui includedir arahan.

  2. Buka file konfigurasi MySQL dan ubah bind-address ke alamat IP server sumber.

    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = <source_ip_address>
        
  3. Batalkan komentar atau tambahkan baris untuk server-id dan log-bin . Setel server-id ke 1 , dan log-bin ke /var/log/mysql/mysql-bin.log .

    Catatan Pastikan skip_networking variabel tidak dideklarasikan dimanapun. Beri komentar jika muncul di dalam file ini. Untuk mereplikasi database tunggal, tambahkan baris binlog_do_db = <database_name> ke file.
    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    
    server-id  = 1
    log_bin  = /var/log/mysql/mysql-bin.log
        
  4. Mulai ulang layanan MySQL.

     sudo systemctl restart mysql
    
  5. Verifikasi status MySQL dan pastikan statusnya active .

     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2021-05-30 13:06:47 UTC; 1 day 1h ago

Konfigurasikan Pengguna MySQL Baru untuk Replika

Anda harus membuat pengguna baru di server sumber untuk mewakili replika. Pengguna baru dibuat di dalam shell MySQL.

  1. Masukkan shell MySQL.

     sudo mysql -u root -p
    
  2. Tambahkan pengguna untuk akun replika menggunakan CREATE USER MySQL sintaksis. Nama pengguna harus terdiri dari nama akun replika, @ simbol, dan alamat IP server replika. Pilih kata sandi yang lebih aman untuk akun sebagai ganti REPLICA_PASSWORD .

     CREATE USER 'replica_account_name'@'replica_ip_address‘ IDENTIFIED WITH sha256_password BY 'REPLICA_PASSWORD';
    
    Catatan Agar replika dapat terhubung dari alamat mana pun, tentukan pengguna sebagai 'replica_account_name'@'%' . % simbol mewakili alamat atau domain apa pun. Ini memberikan fleksibilitas ekstra dengan mengorbankan beberapa keamanan.
  3. Berikan hak replikasi kepada pengguna replika jarak jauh.

     GRANT REPLICATION SLAVE ON *.* TO 'replica_account_name'@'replica_ip_address';
    

Siapkan Data MySQL untuk Replikasi

Pada titik ini, perlu untuk mem-flush dan mengunci database sumber untuk menyusun data untuk replikasi.

  1. Tetap berada di dalam shell MySQL dan hapus hak istimewa untuk memuat ulang tabel hibah tanpa memulai ulang database.

     FLUSH PRIVILEGES;
    
  2. Kunci database untuk membekukan database pada titik stabil untuk mengekspor data. Tetap jalankan klien MySQL hingga Anda mengekspor database. Memasukkan perintah tulis apa pun atau keluar dari shell MySQL akan melepaskan kunci.

     FLUSH TABLES WITH READ LOCK;
    
    Hati-hati Perintah ini memblokir semua komit ke database sumber. Ekspor data sebelum mengizinkan sumber memproses komit lagi. Jika tidak, database replika bisa rusak atau tidak konsisten dengan database sumber. Selesaikan dua langkah tersisa di bagian ini sesegera mungkin.
  3. Verifikasi status database menggunakan perintah berikut. Perintah ini menampilkan file log saat ini bersama dengan posisi catatan terakhir dalam file ini. Catat informasi ini karena diperlukan untuk memulai replikasi pada replika nanti.

     SHOW MASTER STATUS;
    
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |     1301 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
  4. Menggunakan shell Linux dari konsol yang berbeda, ekspor database menggunakan mysqldump alat. Pilih nama yang mudah diingat untuk file tujuan. Sertakan –master-data opsi untuk menambahkan informasi tentang file log dan posisi catatan saat ini ke log.

     sudo mysqldump -u root -p -–all-databases -–master-data > databasecopy.sql
    
    Catatan Untuk mengekspor satu database, sertakan --opt <database_name> pilihan daripada -–all-databases .
  5. Kembali ke shell MySQL asli, buka kunci database sumber.

     UNLOCK TABLES;
    
  6. Keluar dari shell MySQL.

     QUIT;
    
  7. Salin file database yang diekspor ke server database replika, menggunakan ftp , scp , atau metode lain untuk mentransfer file.

     scp databasecopy.sql [email protected]<replica_ip_address>
    

Konfigurasi Database Replika MySQL

Konfigurasi berikut harus diterapkan ke konfigurasi database replika. Untuk menginstal MySQL di server replika, lihat bagian Instal MySQL.

  1. Buka file MySQL utama, biasanya terletak di /etc/mysql/mysql.conf.d/mysqld.cnf , dan ubah bind-address untuk mencocokkan alamat IP server replika.

    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = xx.xx.xx.xx
        
  2. Batalkan komentar atau tambahkan baris untuk server-id dan log-bin . server-id harus disetel ke 2 pada replika, sedangkan log-bin variabel harus disetel ke /var/log/mysql/mysql-bin.log . Tambahkan variabel untuk relay-log dan atur ke /var/log/mysql/mysql-relay-bin.log .

    Catatan Pastikan skip_networking variabel tidak disetel di mana pun di dalam file ini. Untuk mereplikasi database tunggal, tambahkan direktif berikut ke file binlog_do_db = database_name . Untuk mengonfigurasi lebih dari satu replika, beri nomor server-id nilai secara berurutan meningkat. Misalnya, replika kedua akan memiliki server-id dari 3 .
    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    4
    
    server-id        = 2
    log_bin    = /var/log/mysql/mysql-bin.log
    relay-log        = /var/log/mysql/mysql-relay-bin.log
        
  3. Mulai ulang layanan MySQL untuk memasukkan perubahan.

     sudo systemctl restart mysql
    
  4. Verifikasi status MySQL dan pastikan statusnya active .

     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
         Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>
         Active: active (running) since Mon 2021-05-31 16:29:48 UTC; 6s ago
  5. (Opsional ) MySQL merekomendasikan penggunaan SSL untuk terhubung ke sumber untuk keamanan yang lebih baik. Informasi lebih lanjut tentang mengkonfigurasi SSL dapat ditemukan di Dokumentasi SSL MySQL. Alat Penyiapan RSA dapat digunakan untuk mempercepat proses ini.

Impor Data MySQL yang Direplikasi dan Aktifkan Replikasi

Langkah selanjutnya adalah mengimpor salinan data database, mengatur sumber replikasi, dan memulai ulang server database replika. Replika kemudian harus sinkron dan siap digunakan.

  1. Masukkan perintah berikut dari shell Linux untuk mengimpor database sumber. Tentukan nama database yang digunakan untuk mengekspor data tadi.

     sudo mysql -u root -p < databasecopy.sql
    
  2. Masuk ke shell MySQL.

     sudo mysql -u root -p
    
  3. Hentikan replikanya.

     STOP REPLICA;
    
  4. Masukkan CHANGE REPLICATION SOURCE perintah, bersama dengan rincian berikut. Gantikan alamat IP server database sumber dengan source_ip_address . Untuk SOURCE_USER dan SOURCE_PASSWORD , masukkan detail nama pengguna dan kata sandi replika dari dalam Konfigurasi Pengguna MySQL baru untuk bagian Replika. Untuk SOURCE_LOG_FILE dan SOURCE_LOG_POS nilai, masukkan informasi yang Anda rekam dari SHOW MASTER STATUS; perintah.

     CHANGE REPLICATION SOURCE TO SOURCE_HOST='source_ip_address',SOURCE_USER='replica_account_name', SOURCE_PASSWORD='REPLICA_PASSWORD', SOURCE_LOG_FILE='log_file_name', SOURCE_LOG_POS=log_position;
    
    Catatan Untuk menggunakan SSL untuk koneksi, yang direkomendasikan MySQL, tambahkan atribut SOURCE_SSL=1 ke perintah. Informasi lebih lanjut tentang menggunakan SSL dalam konteks replikasi sumber-replika dapat ditemukan di dokumentasi MySQL.
  5. Mulai ulang replika.

     START REPLICA;
    
  6. Verifikasi status replika. Replika harus menunggu acara, dan tidak boleh ada Last_IO_Error atau Last_Error acara. Slave_SQL_Running_State entri harus menyatakan replika telah membaca log relai.

     SHOW REPLICA STATUS\G
    
    Slave_IO_State: Waiting for master to send event
                      Master_Host: 178.79.153.39
                      Master_User: replica
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000006
              Read_Master_Log_Pos: 156
                   Relay_Log_File: mysql-relay-bin.000006
                    Relay_Log_Pos: 371
            Relay_Master_Log_File: mysql-bin.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    ..
                       Last_Errno: 0
                       Last_Error:
    ..
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 1
                      Master_UUID: 5bed9d10-c140-11eb-bc63-f23c92a2a6ac
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Uji Replikasi Sumber-Replika MySQL

Jika database sumber sudah diisi sebelum replika dibuat, pengujian tambahan diperlukan. Dalam hal ini, verifikasi database dan tabel yang ada di sumber ada di replika setelah data diimpor. Dalam SHOW REPLICA STATUS menampilkan Slave_SQL_Running_State entri harus membaca Slave has read all relay log .

Untuk memverifikasi replikasi terjadi dengan benar, buat database atau tabel baru di sumbernya. Setelah beberapa detik, entri baru akan muncul di replika. Validasi keberadaan database menggunakan SHOW DATABASES; memerintah. Untuk mengonfirmasi keberadaan tabel, alihkan ke database menggunakan USE databasename; , dan masukkan SHOW TABLES; . Sebaiknya jalankan SHOW REPLICA STATUS perintah dan meneliti output untuk setiap kesalahan. Last_Error dan Last_IO_Error kolom harus kosong dan replika harus tetap terhubung.

Pelajari Lebih Lanjut Tentang Replikasi Sumber-Replika MySQL

Sumber terbaik untuk informasi tentang replikasi sumber-replika adalah dokumentasi resmi MySQL. Bagian replikasi berisi informasi yang lebih luas tentang arsitektur dan proses instalasi. Forum MySQL mungkin juga membantu.

Informasi Lebih Lanjut

Anda mungkin ingin berkonsultasi dengan sumber daya berikut untuk informasi tambahan tentang topik ini. Meskipun ini disediakan dengan harapan dapat bermanfaat, harap perhatikan bahwa kami tidak dapat menjamin keakuratan atau ketepatan waktu materi yang dihosting secara eksternal.

  • Dokumentasi MySQL

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat Pengguna MySQL di Linux melalui Command Line

  2. Format tanggal MySQL

  3. Cara mereset/mengubah baris perintah kata sandi root MySql di ubuntu linux

  4. Perbedaan antara INDEX, PRIMARY, UNIQUE, FULLTEXT di MySQL?

  5. mysql, ulangi melalui nama kolom