GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come configurare la replica MariaDB su CentOS Linux

È un processo di creazione di versioni duplicate di un DB. Il processo di replica non solo copia un database, ma sincronizza anche le modifiche dal master a uno degli slave. Ma questo non significa che i database slave siano copie identiche del master, perché la replica può essere configurata in modo che venga replicato solo uno schema di tabelle o colonne o righe, ovvero una replica parziale. La replica assicura che quegli oggetti specifici configurati siano mantenuti sincronizzati tra i diversi database.

Concetti di replica Mariadb

Backup :la replica può essere utilizzata per i backup dei database. Ad esempio, hai la replica master -> slave. Se il master viene perso (l'HDD non funziona, ad esempio) puoi ripristinare il tuo db dal master.

Ridimensionamento :è possibile utilizzare la replica master -> slave per la soluzione di ridimensionamento. Ad esempio, se hai alcune query grandi e hai una query SQL, usando replcation puoi separare queste query per ogni nodo di replcations. La scrittura SQL deve essere eseguita solo sul master, per le query di sola lettura è possibile utilizzare il server slave.

Soluzione di diffusione :È possibile utilizzare la replica per la distribuzione. Ad esempio, puoi distribuire dati di vendita diversi a database diversi.

Soluzione di failover :Ad esempio, hai la replica master -> slave(1) -> slave(2) -> slave(3). Puoi scrivere uno script per il monitoraggio del master, se il master fallisce, lo script può cambiare rapidamente slave(1) nuovo per master master -> slave(1) -> slave(2) e la tua applicazione continuerà a funzionare senza tempi di inattività

Semplice dimostrazione schematica della replica

Prima di iniziare, sappi cos'è il log binario e Ibdata1. Il log binario contiene un record su tutte le modifiche nel db, nei dati e nella struttura, nonché il tempo impiegato per l'esecuzione di ciascuna istruzione. Il registro bin è costituito da file di registro impostati e un indice. Significa che le istruzioni SQL principali come CREATE, ALTER, INSERT, UPDATE e DELETE verranno inserite in questo registro, mentre le istruzioni come SELECT non verranno registrate. Queste informazioni possono essere registrate nel file query.log generale. In semplice Ibdata1 è un file che contiene tutte le tabelle e tutte le informazioni su db.

Configurazione del server principale

È bello avere il server aggiornato

sudo yum install update -y && sudo yum install upgrade -y

Stiamo lavorando su centos 7 server

sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

Installa MariaDB

sudo yum install mariadb-server -y

Avvia MariaDB e abilitalo all'avvio all'avvio del server

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

Uscita:

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

Controlla lo stato di MariaDB

sudo service mariadb status

oppure usa

sudo systemctl is-active mariadb.service

Uscita:

Redirecting to /bin/systemctl status  mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

Imposta la password MariaDB

mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit

SOME_ROOT_PASSWORD - la tua password di root. Nel mio caso userò "q" - password, quindi proverò ad accedere:

sudo mysql -u root -pSOME_ROOT_PASSWORD

Uscita:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Digita 'aiuto;' o '\h' per aiuto. Digita '\c' per cancellare l'istruzione di input corrente.

Creiamo database con tabella con alcuni dati

Crea database/schema

sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;

Dove:

test_repl - Name of shcema which will be replicated

Uscita:

Query OK, 1 row affected (0.00 sec)

Crea tabella Persone

mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

Uscita:

mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)

Inserisci alcuni dati

mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");

Uscita:

Query OK, 5 row affected (0.00 sec)

Controlla i dati

mysql> select * from Persons;

Uscita:

+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        2 | LastName2 | FirstName2 | Address2 | City2 |
|        3 | LastName3 | FirstName3 | Address3 | City3 |
|        4 | LastName4 | FirstName4 | Address4 | City4 |
|        5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+

Configura MariaDB per la replica

Sarà necessario modificare il file my.cnf sul server principale per abilitare la registrazione binaria e impostare l'ID del server. Userò vi editor di testo, ma l'uso può utilizzare qualsiasi adatto per te come nano, joe ecc.

sudo vi /etc/my.cnf 

e metti a config nella sezione [mysqld] tali righe.


log-basename=master
log-bin
binlog-format=row
server_id=1

Uscita:

Quindi riavvia MariaDB:

sudo service mariadb restart

Accedi a MariaDB e controlla i log binari:

sudo mysql -u root -pq test_repl

mysql> MOSTRA STATO MASTER;

Uscita:

+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     3913 |              |                  |
+--------------------+----------+--------------+------------------+

Ricorda: Valori "File" e "Posizione". AVRAI BISOGNO DI QUESTO VALORE SU SLAVE SERVER

Crea utente per la replica

mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;

Uscita:

Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Controlla utente in db

mysql> select * from mysql.user WHERE user="replication_user"\G;

Uscita:

mysql> select * from mysql.user WHERE user="replication_user"\G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....

Crea dump DB (istantanea di tutti i dati che verranno replicati) dal master

mysqldump -uroot -pSOME_ROOT_PASSWORD  test_repl > full-dump.sql

Dove:

SOME_ROOT_PASSWORD - password for root user that you have setup
test_repl - name of the data base which will be replicated;

È necessario recuperare il dump di mysql (full-dump.sql) sul server slave. È necessario per la replica.

Configurazione del server slave

Tutti questi comandi devi eseguire sul server slave

Supponiamo di avere un server CentOS 7.x fresco/aggiornato con l'ultimo server mariaDB e che tu possa accedere come root al server maria DB (questo è stato descritto nella prima parte dell'articolo)

Accedi alla console Maria DB e crea DB

mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;

Recupera i dati dal master al server slave

mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql

Dove:

full-dump.sql - its DB Dump that you have create at test server.

Accedi a Maria DB e configura la replica

mysql>     CHANGE MASTER TO
MASTER_HOST='82.196.5.39',
MASTER_USER='replication_user',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=3913,
MASTER_CONNECT_RETRY=10;

Dove:

MASTER_HOST - IP of the master server.
MASTER_USER - replication user at master server
MASTER_PASSWORD - replication user password
MASTER_PORT - mysql port at master
MASTER_LOG_FILE - bin-log file name form master
MASTER_LOG_POS - bin-log position file at master

Avvia la modalità slave

mysql> slave start;

Uscita:

Query OK, 0 rows affected (0.00 sec)

Controlla lo stato dello slave

mysql> show slave status\G;

Uscita:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 82.196.5.39
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 4175
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 793
Relay_Master_Log_File: mariadb-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4175
Relay_Log_Space: 1089
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
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: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)

A questo punto tutto dovrebbe essere ok e non dovrebbero esserci errori.

Testare la replica

Al server MAIN/MASTER aggiungi alcune entità al DB

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");

Quindi vai al server SLAVE e controlla i dati replicati

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> select * from Persons;
+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
...................
|        6 | LastName6 | FirstName6 | Address6 | City6 |
|        7 | LastName7 | FirstName7 | Address7 | City7 |
|        8 | LastName8 | FirstName8 | Address8 | City8 |
+----------+-----------+------------+----------+-------+

Puoi vedere che i dati vengono replicati sul server slave. Significa che la replica sta funzionando. Spero che l'articolo ti sia piaciuto. Facci sapere se hai domande.


Cent OS
  1. Come installare e configurare la finestra mobile in Rocky Linux/Centos 8

  2. Come installare e configurare Redis 6 su Rocky Linux/Centos 8

  3. Come installare e configurare Ansible su Rocky Linux/CentOS 8

  4. Come installare Erlang su Rocky Linux/Alma Linux/CentOS 8

  5. Come configurare OpenSSH su CentOS 7

Come installare e configurare Nextcloud su CentOS 7 / RHEL 7

Come installare e configurare Denyhost in Centos 7 Linux

Come installare e configurare Cacti su CentOS 7

Come configurare la replica FreeIPA su Rocky Linux/Alma Linux/Centos 8

Come installare LAMP (Linux Apache, MariaDB, PHP) su CentOS 7

Come configurare la replica in streaming di PostgreSQL 12 in CentOS 8