Instale Mysql8.0.20 en Linux y configure la replicación maestro-esclavo (un maestro y un esclavo, doble maestro y doble esclavo)

Reimpreso de: https://www.cnblogs.com/cao-lei/p/13603043.html

 

1. Explicación de la replicación maestro-esclavo

  Las operaciones como adiciones, eliminaciones, modificaciones y consultas de la base de datos maestra se registran en el archivo de registro binario. La base de datos esclava recibe el archivo de registro de la base de datos maestra y lo copia sincrónicamente en la base de datos esclava según la posición inicial de la última actualización. para que las bases de datos maestra y esclava permanezcan consistentes.

2. El papel de la replicación maestro- esclavo

  • Alta disponibilidad: si la base de datos maestra es anormal, se puede cambiar a la base de datos esclava.
  • Equilibrio de carga: lograr la separación de lectura y escritura
  • Copia de seguridad: realice copias de seguridad diarias

3. Proceso de replicación maestro-esclavo de Mysql


  Registro binario: el registro binario de la base de datos maestra; Registro de retransmisión: el registro de retransmisión del servidor esclavo.

Proceso de replicación:
  (1) Antes de que se complete cada transacción, la base de datos maestra registra la operación en el archivo de registro binlog;
  (2) Hay un subproceso de E/S en la base de datos esclava, que es responsable de conectarse al servicio de la base de datos maestra y leyendo los cambios del registro binlog. Si se encuentran nuevos cambios, los cambios se escribirán en el registro de retransmisión; de lo contrario, entrará en el estado inactivo; (3) Lea
  el registro de retransmisión del subproceso SQL en la base de datos y ejecute el Eventos SQL en serie, para que la base de datos esclava pueda comunicarse con la base de datos maestra. La base de datos siempre es coherente.

Notas:
  (1) Cuando están involucradas funciones de tiempo, se producirán inconsistencias en los datos. La razón es que las dos operaciones de IO durante el proceso de replicación y problemas como la eficiencia de la red y del disco conducirán inevitablemente a marcas de tiempo inconsistentes;
  (2) Se producirán inconsistencias cuando estén involucradas funciones del sistema. Por ejemplo: @@hostname, obtenga el nombre del host, el nombre del servidor de la base de datos maestro-esclavo es inconsistente, lo que resulta en inconsistencia de datos;
  (3)...

4. Configuración de un maestro y un esclavo

  • División de servidores
Servidor IP Role
192.168.133.129 Maestro1
192.168.133.130 esclavo1
  • Instalación de base de datos maestra
 

Copiar

# 进入目录 cd /opt # 下载安装包 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz # 解压 tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz # 拷贝到/usr/local mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local # 进入/usr/local cd /usr/local # 修改名称为mysql-8.0.20 mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20 # 创建存放数据文件夹 mkdir /usr/local/mysql-8.0.20/data # 创建用户及用户组 groupadd mysql useradd -g mysql mysql # 授权 chown -R mysql.mysql /usr/local/mysql-8.0.20 # 初始化数据库(记录临时密码) cd /usr/local/mysql-8.0.20/ ./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ; # 配置my.cnf vi /etc/my.cnf # 清空,使用下面内容 // 文件内容开始 [mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主从复制-主机配置 # 主服务器唯一ID server-id=1 # 启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=sys binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema # 设置需要复制的数据库(可设置多个) binlog-do-db=test # 设置logbin格式 binlog_format=STATEMENT // 文件内容结束 # 建立Mysql服务 cp -a ./support-files/mysql.server /etc/init.d/mysql chmod +x /etc/init.d/mysql chkconfig --add mysql # 检查服务是否生效 chkconfig --list mysql # 启动、停止、重启 service mysql start service mysql stop service mysql restart # 创建软连接 ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin # 登录(使用临时密码) mysql -uroot -p # 修改密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password'; # 退出,使用新密码登录 quit mysql -uroot -p # 修改root权限,增加远程连接 use mysql update user set host ='%' where user='root'; alter user 'root'@'%' identified with mysql_native_password by 'new password'; flush privileges; # 退出 quit

  • La instalación de la base de datos esclava
      es la misma que la instalación de la base de datos maestra, pero el contenido del archivo de configuración es diferente.
 

Copiar

# 配置my.cnf vi /etc/my.cnf # 清空,使用下面内容 // 文件内容开始 [mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主从复制-从机配置 # 从服务器唯一ID server-id=2 # 启用中继日志 relay-log=mysql-relay // 文件内容结束

  • Cierre el firewall del servidor de base de datos maestro-esclavo o abra el puerto 3306
 

Copiar

# 查看防火墙状态 systemctl status firewalld # 关闭防火墙 systemctl stop firewalld

  • Pruebe si se puede acceder de forma remota a la base de datos maestro-esclavo
 

Copiar

# 主数据库服务器测试从数据库 mysql -uroot -p -h192.168.133.130 -P3306 # 从数据库服务器测试主数据库 mysql -uroot -p -h192.168.133.129 -P3306

  • La base de datos maestra crea un usuario esclavo y lo autoriza.
 

Copiar

# 登录 mysql -uroot -p # 创建用户 create user 'slave'@'%' identified with mysql_native_password by 'password'; # 授权 grant replication slave on *.* to 'slave'@'%'; # 刷新权限 flush privileges;

  • Verificar desde la base de datos si el usuario esclavo está disponible
 

Copiar

mysql -uslave -p -h192.168.133.129 -P3306

  • ID del servicio de consulta de la base de datos maestra y estado del maestro
 

Copiar

# 登录 mysql -uroot -p # 查询server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可设置临时ID(重启失效) set global server_id = 1; # 查询Master状态,并记录 File 和 Position 的值 show master status; # 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化

  • Configurar la base de datos maestra desde la base de datos
 

Copiar

# 登录 mysql -uroot -p # 查询server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可设置临时ID(重启失效) set global server_id = 2; # 设置主数据库参数 change master to master_host='192.168.133.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156; # 开始同步 start slave; # 若出现错误,则停止同步,重置后再次启动 stop slave; reset slave; start slave; # 查询Slave状态 show slave status\G # 查看是否配置成功 # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。

  • Pruebe
      la conexión entre las bases de datos maestra y esclava a través de herramientas o en el servidor.
      Nota: Las bases de datos que necesitan sincronizarse están configuradas en el archivo de configuración de la base de datos principal, por lo que solo se sincronizarán las bases de datos configuradas, si no se configuran, se sincronizarán todas las bases de datos.
 

Copiar

# 在主数据库创建数据库test create database test; # 从数据库查看 show databases; # 在主数据库创建表 use test; create table t_user(id int, name varchar(20)); # 插入数据 insert into t_user values(1, 'C3Stones'); # 在从数据库查看 use test; select * from t_user; # 其他删改查操作请自行测试

5. Configuración doble maestro y doble esclavo #

  Doble maestro y doble esclavo significa que dos hosts tienen dos máquinas esclavas cada uno. Cada máquina esclava solo replica la máquina host correspondiente, y los dos hosts son las máquinas maestra y de respaldo del otro.

  • División de servidores
Servidor IP Role
192.168.133.129 Maestro1
192.168.133.130 esclavo1
192.168.133.131 Maestro2
192.168.133.132 esclavo2
  • Para instalar la base de datos, consulte la instalación anterior de la base de datos principal.
    Los cuatro archivos de configuración se reemplazan de la siguiente manera:
    (1) Mater1
 

Copiar

[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主从复制-主机1配置 # 主服务器唯一ID server-id=1 # 启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=sys binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema # 设置需要复制的数据库(可设置多个) binlog-do-db=test # 设置logbin格式 binlog_format=STATEMENT # 写入操作更新二进制日志文件 log-slave-updates # 自增长字段起始值,默认值为1,取值范围:1 ~ 65535 auto-increment-increment=2 # 自增长字段递增量,取值范围:1 ~ 65535 auto-increment-offset=1

(2)Materia2

 

Copiar

[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主从复制-主机2配置 # 主服务器唯一ID server-id=3 # 启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=sys binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema # 设置需要复制的数据库(可设置多个) binlog-do-db=test # 设置logbin格式 binlog_format=STATEMENT # 写入操作更新二进制日志文件 log-slave-updates # 自增长字段起始值,默认值为1,取值范围:1 ~ 65535 auto-increment-increment=2 # 自增长字段递增量,取值范围:1 ~ 65535 auto-increment-offset=2

(3)Esclavo1

 

Copiar

[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主从复制-从机1配置 # 从服务器唯一ID server-id=2 # 启用中继日志 relay-log=mysql-relay

(4)Esclavo2

 

Copiar

[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主从复制-从机2配置 # 从服务器唯一ID server-id=4 # 启用中继日志 relay-log=mysql-relay

  • Reinicie las bases de datos maestra y esclava
 

Copiar

service restart mysql

  • Apague el firewall en los cuatro servidores
 

Copiar

systemctl stop firewalld

  • Cree usuarios esclavos y autorícelos en las dos bases de datos principales respectivamente.
 

Copiar

# 登录 mysql -uroot -p # 创建用户 create user 'slave'@'%' identified with mysql_native_password by 'password'; # 授权 grant replication slave on *.* to 'slave'@'%'; # 刷新权限 flush privileges;

  • La base de datos maestro-esclavo verifica si el usuario esclavo está disponible
 

Copiar

# 主数据库1服务器测试 mysql -uslave -p -h192.168.133.130 -P3306 mysql -uslave -p -h192.168.133.131 -P3306 # 从数据库1服务器测试主数据库1 mysql -uroot -p -h192.168.133.129 -P3306 # 主数据库2服务器测试 mysql -uslave -p -h192.168.133.129 -P3306 mysql -uslave -p -h192.168.133.132 -P3306 # 从数据库1服务器测试主数据库1 mysql -uroot -p -h192.168.133.131 -P3306

  • Consultar el ID del servicio y el estado maestro de las dos bases de datos maestras.
 

Copiar

# 登录 mysql -uroot -p # 查询server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可设置临时ID(重启失效) # 主数据库1 set global server_id = 1; # 主数据库2 set global server_id = 3; # 查询Master状态,并记录 File 和 Position 的值 show master status; # 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化

  • Establecer la base de datos maestra 1 desde la base de datos 1
 

Copiar

# 登录 mysql -uroot -p # 查询server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可设置临时ID(重启失效) set global server_id = 2; # 设置主数据库参数 change master to master_host='192.168.133.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000003',master_log_pos=156; # 开始同步 start slave; # 若出现错误,则停止同步,重置后再次启动 stop slave; reset slave; start slave; # 查询Slave状态 show slave status\G # 查看是否配置成功 # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。

  • Establecer la base de datos maestra 2 desde la base de datos 2
 

Copiar

# 登录 mysql -uroot -p # 查询server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可设置临时ID(重启失效) set global server_id = 4; # 设置主数据参数 change master to master_host='192.168.133.131',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=156; # 开始同步 start slave; # 若出现错误,则停止同步,重置后再次启动 stop slave; reset slave; start slave; # 查询Slave状态 show slave status\G # 查看是否配置成功 # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。

  • Establecer la base de datos maestra 2 en la base de datos maestra 1
 

Copiar

# 登录 mysql -uroot -p # 设置主数据库参数 change master to master_host='192.168.133.131',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=156; # 开始同步 start slave; # 若出现错误,则停止同步,重置后再次启动 stop slave; reset slave; start slave; # 查询Slave状态 show slave status\G # 查看是否配置成功 # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。

  • Establecer la base de datos principal 1 en la base de datos principal 2
 

Copiar

# 登录 mysql -uroot -p # 设置主数据库参数 change master to master_host='192.168.133.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000003',master_log_pos=156; # 开始同步 start slave; # 若出现错误,则停止同步,重置后再次启动 stop slave; reset slave; start slave; # 查询Slave状态 show slave status\G # 查看是否配置成功 # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。

  • Pruebe
      para conectar las bases de datos dual master y dual esclavo a través de herramientas o conéctese al servidor.
      Nota: Las bases de datos que necesitan sincronizarse están configuradas en el archivo de configuración de la base de datos principal, por lo que solo se sincronizarán las bases de datos configuradas, si no se configuran, se sincronizarán todas las bases de datos.
 

Copiar

# 在主数据库1创建数据库test create database test; # 其他三个数据库查看 show databases; # 在主数据库1创建表 use test; create table t_user(id int, name varchar(20)); # 插入数据 insert into t_user values(1, 'C3Stones'); # 其他三个数据库查看 use test; select * from t_user; # 其他删改查操作请自行测试

Supongo que te gusta

Origin blog.csdn.net/liuwkk/article/details/109781031
Recomendado
Clasificación