El principio del servidor maestro-esclavo de Mysql y la construcción del servicio, se pueden seguir súper detallados, los principiantes también pueden aprender

principio

¿Por qué debería haber un servidor maestro-esclavo?

En el sitio web corporativo, cuando solo hay una base de datos MySQL de back-end, ocurrirán los siguientes problemas:

Punto único de falla, servicio no disponible
No se puede manejar una gran cantidad de solicitudes de datos simultáneas.
Pérdida de datos: catástrofe

Inserte la descripción de la imagen aquí
Método de modificación:

Aumente el servidor de la base de datos MySQL para hacer una copia de seguridad de los datos para formar un maestro / copia de seguridad
Asegúrese de que los datos del servidor de base de datos MySQL primario y secundario sean los mismos
El servidor principal está inactivo, el servidor de respaldo sigue funcionando y los datos están garantizados

La replicación maestro-esclavo de MySQL está íntimamente relacionada con la separación de lectura-escritura.
Inserte la descripción de la imagen aquí
Por supuesto, existen soluciones más avanzadas, separación de lectura-escritura. Hoy solo hablamos de replicación maestro-esclavo

Expansión del conocimiento maestro-esclavo

Tipos de replicación maestro-esclavo de MySQL:

Replicación basada en declaraciones (predeterminado) La declaración ejecutada en el servidor maestro, el servidor esclavo ejecuta la misma declaración,
Replicación basada en filas Copie el contenido modificado al servidor esclavo
Tipos mixtos de replicación -Una vez que se descubre que la copia basada en declaraciones no se puede replicar con precisión, se utilizará la replicación basada en líneas

### El proceso de trabajo de la replicación maestro-esclavo El proceso de
Inserte la descripción de la imagen aquí
replicación:
· Antes de completar los datos de actualización de cada transacción, el maestro registra estos cambios en el registro binario. Después de escribir el registro binario, el maestro informa al motor de almacenamiento que envíe la transacción.

El esclavo copia el registro binario del maestro en el registro de retransmisión. Primero, el esclavo inicia un subproceso de trabajo - subproceso de l / o, que abre una conexión normal en el maestro, y luego inicia el proceso de volcado de Binlog, y el proceso de volcado de Binlog comienza desde el maestro. Leer eventos en el registro binario Si el Master se ha actualizado, dormirá y esperará nuevos eventos del Master. El subproceso de l / o escribe estos registros en el registro de retransmisión

El subproceso SQL Slave (subproceso SQL esclavo) maneja el último paso del proceso. El subproceso SQL lee los eventos del registro del relé y reproduce los eventos para actualizar los datos del esclavo para que sean coherentes con los datos del maestro. Siempre que el subproceso sea coherente con el subproceso 1/0, el registro de retransmisión generalmente se encuentra en la caché del sistema operativo, por lo que la sobrecarga del registro de retransmisión es pequeña.

Construcción del servicio maestro-esclavo mysql

Introducción al entorno:
servidor maestro
20.0.0.21 servidor
esclavo 20.0.0.25 servidor esclavo 20.0.0.26

### maestro, esclavo1, esclavo2 ####
Apaga el cortafuegos, apaga la protección del núcleo

(1) Establecer un entorno de sincronización horaria

1、在主机 Master 搭建时间同步服务器NTP (20.0.0.21)
[root@localhost ~]# yum-y install ntp
[root@localhost ~]# vi /etc/ntp.conf               ####最后面添加这二行
server 127.127.1.0
fudge 127.127.1.0 stratum 8

[root@localhost ~]# service ntpd restart
[root@localhost ~]# systemctl restart ntpd
[root@localhost ~# systemctl enable ntpd

2、在从服务器上配置NTP同步
登录到从1服务器 20.0.0.25
[root@localhost ~]# yum-y install ntpdate
[root@localhost ~]# ntpdate 20.0.0.21
[root@localhost ~]# crontab -e
*/2 * * * * /usr/sbin/ntpdate 20.0.0.21 >>/var/log/ntpdate.log

[root@localhost ~]# systemctl restart crond
[root@localhost ~]# systemctl enable crond
[root@localhost ~]# tail -f /var/log/ntpdate.log             ###动态查看更新日志文件

登录到从2服务器 20.0.0.26
[root@localhost ~]# yum-y install ntpdate
[root@localhost ~]# ntpdate 20.0.0.21
[root@localhost ~]# crontab -e
*/2 * * * * /usr/sbin/ntpdate 20.0.0.21 >>/var/log/ntpdate.log
[root@localhost ~]# systemctl restart crond
[root@localhost ~]# systemctl enable crond
[root@localhost ~]# tail -f /var/log/ntpdate.log             ###动态查看更新日志文件

(2) Compile e instale la base de datos MySQL

     ##三台都是此操作,可同步进行
#使用CRT登录3台主机, 登录以后检查, 登录是否正常, 确认下主机的IP地址是否正确, 各个主机通信是否正常。
登录 20.0.0.21 此终端, 在终端页面最下面, 右击打开 ---send conmands to all sessions
    ###此功能是敲一条命令, 其他终端全部同步执行


1、安装Mysq环境依赖包
[root@localhost ~]#
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
gcc \
gcc-c++

2、创建运行用户
[root@localhost ~]# useradd -s /sbin/nologin mysql

3、编译安装
###上传mysql-boost-5.7.20.tar.gz到opt目录下###
[root@localhost ~]cd /opt
[root@localhost opt]# tar xzvf mysql-boost-5.7.20.tar.gz
[root@localhost opt]#cd /opt/mysql-5.7.20/

[root@localhost mysql-5.7.20]#
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

######编译安装####

make && make install


#####数据库目录进行权限调整###为了让你安装时不报错,踩坑集!!###########

chown -R mysql:mysql /usr/local/mysql/


#####建立调整配置文件########

vi /etc/my.cnf

[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

chown mysql:mysql /etc/my.cnf

#######设置环境变量####
###为了让系统能够直接识别 mysql/bin下的命令   和mysql/lib 下的各种库

echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/bin:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile

cd /usr/local/mysql/

###########初始化##########
bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

###为什么cp usr/而不是cp /usr/ ?因为现在是在这个目录底下
###为什么要cp?为了让systemctl进行管理,systemctl管理/usr/lib/systemd/system/下的程序
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
netstat -anpt | grep 3306

###刚开始没密码是空的直接回车,然后输入密码
mysqladmin -u root -p password 

mysql -u root -p     输入刚刚的密码

(3) Inicie sesión en el servidor maestro maestro para configurar 20.0.0.21

 ###在原来server-id = 1的地方修改成11后面新增下面两行

[root@localhost mysq]# vi /etc/my.cnf 
server-id = 11
log_bin = master-bin
log-slave-updates = true

[root@localhost mysq]# systemct restart mysqld                 ###重启数据库

#登录Master数据库给从服务器授权
[root@localhost mysql# mysql -uroot -p

#下面的账号和密码是给从服务器使用的
mysql>grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by 'abc123';
mysąl> flush privileges;

#下面这条命令下的东西尤其重要,FILE和POS都是一会从服务器要使用的
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      599 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+

(4) Inicie sesión para guardar y configurar desde el servidor

[root@localhost mysql]# vi /etc/my.cnf     ##在原来server-id = 1的地方修改成22后面新增
server-id = 22
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

[root@localhost mysq]# systemctl restart mysqld     ##重启数据库

#登录Slave数据库配置同步   ###注意下这边的master_log_file='master-bin.000001', 
master_log _pos=599; 要和Master数据库信息一致, 不一致的话要更改先stop slave;
#然后更改同步信息

[root@localhost mysql]#mysql -uroot -p

##账号和密码是主服务器设置的,同步的日志文件和pos也是刚刚主服务器的
mysql>change master to master_host='20.0.0.21',master_user='myslave',master_password='abc123',master_log_file='master-bin.000001',master_log_pos=599;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
********************* 1. row*********************************
Slave_lO_State: Waiting for master to send event
Master_Host: 192.168.32.11
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 604
Relay_Log_File: relay-log-bin.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000001
Slave_lO_Running: Yes      ####开启
Slave SQL Running: Yes     ####开启

##看到上面两条的时候说明成功了,如果出现其他,请检查配置文件
#####登录salve2从服务器配置20.0.0.26 ####配置和上面从1服务器一样

[root@localhost mysq]# vi /etc/my.cnf       ##在原来server-id =1的地方修改成22 后面新增           
server-id = 33
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

[root@localhost mysq]# systemctl restart mysqld           ###重启数据库

#登录Slave 数据库配置同步   ###注意下这边的master_log_file= 'master-bin.000001',                  
master_log_pos= 599; 要和Master 数据库信息一致, 不一致的话要更改先stop slave;
#然后更改同步信息

[root@localhost mysqj]j# mysql -uroot -p

mysql> change master tomaster_host='20.0.0.21',master_user='myslave',master_password='abc123',master_log_file='master-bin.000001',master_log_pos=599;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G
***************1. row**************************
Slave_lO_State: Waiting for master to send event
Master_Host: 192.168.32.11
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 604
Relay_Log_File: relay-log-bin.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000001
Slave_lO_Running: Yes      ####开启
Slave SQL Running: Yes     ####开启

(5) Verificación

主服务器操作:
mysql> create database qhdx;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qhdx               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

###从服务器1查看 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qhdx               |
| qq                 |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

###从服务器2查看
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qhdx               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

Leer y escribir el siguiente artículo

Supongo que te gusta

Origin blog.csdn.net/weixin_48190891/article/details/108590434
Recomendado
Clasificación