El mysql8 instalado por yum implementa la implementación de la configuración maestro-esclavo en la misma máquina (mismo host) (imagen detallada y explicación de texto)

Primero, ¿instalaste mysql8 usando yum, pero aún no sabes cómo instalarlo? (Ver mis otras publicaciones) Muy simple

CentOS7 usa yum para instalar MySQL8 y varias versiones_blog-CSDN de blog de xiaomaomixj

Primero implementemos el entorno de configuración maestro-esclavo:

Primero podemos echar un vistazo al archivo /etc/my.cnf, que contiene archivos de datos, archivos de registro, etc. después de usar yum para instalar mysql.

vim /etc/my.cnf

datadir: directorio donde se almacenan los datos de la base de datos ( por ejemplo: tabla de usuarios en la base de datos mysql ) ( se usará más adelante )

socker: este archivo lo genera el servicio mysqld cuando se está ejecutando y se usa para la conexión mysql.

log-error: usado para almacenar mensajes de registro de mysqld

archivo pid: proporcione la identificación del proceso del servicio mysqld

Bien, comencemos la implementación después de una breve comprensión:

Como espero que esta configuración maestro-esclavo no afecte mi mysql original, necesitamos preparar dos conjuntos de archivos de configuración, uno mysql_1 y otro mysql_2 (mysql_1 es el maestro y mysql_2 es ​​el esclavo):

El siguiente es el archivo de configuración ( usted mismo decide la ruta ):

cd /test
mkdir mysql_master_slave
cd mysql_master_slave
mkdir mysql_1
mkdir mysql_2

Así es como se ve al final:

 Luego ingresamos mysql_1 y mysql_2 respectivamente y comenzamos a crear archivos de configuración ( nota: /var/lib/mysql aquí está la ruta al directorio de datos arriba )

cd mysql_1
mkdir logs
cp /var/lib/mysql mysql
vim my.cnf
cd mysql_2
mkdir logs
cp /var/lib/mysql mysql
vim my.cnf

Contenido a completar en vim:

mysql_1(mi.cnf):

[client]

port = 3307

[mysqld]

datadir=/test/mysql_master_slave/mysql_1/mysql
log-error=/test/mysql_master_slave/mysql_1/logs/mysqld.log
user=mysql
port = 3307
socket=/test/mysql_master_slave/mysql_1/mysql/mysql.sock

mysql_2(mi.cnf):

[client]

port = 3308

[mysqld]

datadir=/test/mysql_master_slave/mysql_2/mysql
log-error=/test/mysql_master_slave/mysql_2/logs/mysqld.log
user=mysql
port = 3308
socket=/test/mysql_master_slave/mysql_2/mysql/mysql.sock

A partir de esto, podemos ver que la ruta en el archivo de configuración corresponde a la ruta que creamos ( por lo que si su ruta es diferente a la mía, debe cambiarla usted mismo ):

 A continuación, debemos otorgar permisos a estos archivos en mysql:

cd /test
chown -R mysql:mysql mysql_master_slave/

Entonces podemos empezar:

mysql_1:

mysqld --defaults-file=/test/mysql_master_slave/mysql_1/my.cnf

mysql_2:

mysqld --defaults-file=/test/mysql_master_slave/mysql_2/my.cnf

Por supuesto, si no desea abrir muchas terminales, podemos dejar que se ejecute en segundo plano (prefiero usar varias terminales juntas, lo cual es conveniente)

mysqld --defaults-file=/test/mysql_master_slave/mysql_1/my.cnf &
mysqld --defaults-file=/test/mysql_master_slave/mysql_2/my.cnf &

Si su indicador de mysqld no es un comando, debe mirar su variable $PATH:

echo $PATH
find / -name mysqld

Puedes ver que el comando mysqld está en la variable $PATH 

Después de un inicio exitoso, podemos ver los archivos /test/mysql_master_slave/mysql_1/mysql/mysql.sock y /test/mysql_master_slave/mysql_2/mysql/mysql.sock. No existían antes del inicio. Como se mencionó anteriormente, es un archivo generado cuando se ejecuta el servicio mysqld.

calcetín$:$ significa el final de la expresión regular

lsof -c mysqld|grep sock$

 Con el archivo mysql.sock, podemos usarlo para iniciar sesión:

mysql_1:

mysql -uroot -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

mysql_2:

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

Como dije antes, (datadir: el directorio donde se almacenan los datos de la base de datos ( por ejemplo: la tabla de usuarios en la base de datos mysql ), por lo que contiene la contraseña) la contraseña es su contraseña original de mysql

Después de iniciar sesión, probamos que mysql_1 y mysql_2 estén aislados:

mysql_1:

show databases;
create database xiaomaomi;
show databases;

 mysql_2:

show databases;
show databases;

 Descubrimos que la base de datos xiaomaomi creada en mysql_1 no existe en mysql_2.

Bien, ahora se ha implementado el entorno de configuración maestro-esclavo.

Lo siguiente es la implementación de la configuración maestro-esclavo:

Primero cierre el mysql en el que iniciamos sesión antes:

exit

mysql_1: 

 mysql_2:

 Luego necesitamos desactivar los servicios mysql_1 y mysql_2 (use kill para finalizar el servicio de proceso):

ps -ef | grep mysqld
kill 36986
kill 37033

 Luego modificamos los archivos de configuración (my.cnf) de mysql_1 y mysql_2 (cabe señalar que el server-id del maestro y del esclavo no puede ser el mismo ):

binlog-do-db: establece la base de datos que debe sincronizarse ( si se utilizan varias bases de datos, divídalas )

replicate-do-db: tiene el mismo significado que arriba

mysql_1(主)(my.cnf):

server-id=1
log-bin=mysql-bin
binlog-do-db=xjgg

mysql_2 (de) (my.cnf):

server-id=2
log-bin=mysql-bin
replicate-do-db=xjgg

Pisé una trampa (se informará un error más adelante, así que resolvámoslo aquí primero), así que no se lo demostraré, solo resuélvalo aquí.

 Nota:([ERROR] [MY-013117] [Repl] E/S esclava para el canal '': Error grave: el subproceso de E/S esclava se detiene porque el maestro y el esclavo tienen UUID de servidor MySQL iguales; Estos UUID deben ser diferentes para que la replicación funcione. Código_error: MY-013117

Motivo: debido a que copiamos directamente el directorio datadir antes, el uuid del servidor en /test/mysql_master_slave/mysql_1/mysql/auto.cnf en el directorio es el mismo que /test/mysql_master_slave/mysql_2/mysql/auto.cnf.

Solución: Cambie /test/mysql_master_slave/mysql_2/mysql/auto.cnf:

vim /test/mysql_master_slave/mysql_2/mysql/auto.cnf

 Complete el contenido como desee, solo asegúrese de que el uuid del servidor de /test/mysql_master_slave/mysql_1/mysql/auto.cnf y /test/mysql_master_slave/mysql_2/mysql/auto.cnf sean diferentes.

Luego inicie el servicio mysql_1:

mysqld --defaults-file=/test/mysql_master_slave/mysql_1/my.cnf

servicios mysql_2:

mysqld --defaults-file=/test/mysql_master_slave/mysql_2/my.cnf

Luego iniciamos sesión nuevamente:

mysql_1:

mysql -uroot -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

mysql_2:

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

Primero, debemos mantener la coherencia de los datos, crear la base de datos xjgg en mysql_1 y mysql_2 respectivamente y crear la tabla de prueba.

CREATE DATABASE xjgg charset utf8;
use xjgg;
CREATE TABLE test (id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10),jieshao VARCHAR(30)) charset utf8;
show tables;

mysql_1:

mysql_2:

Ejecutar en mysql_1:

#创建账户
create user 'zyh'@'127.0.0.1' identified by 'Xmm123456!';

#赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
grant replication slave on *.* to 'zyh'@'127.0.0.1' with grant option;

#改密码&授权超用户,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;

#加锁(解锁:unlock tables)
flush tables with read lock;

#这个生成的信息一会要用
show master status;

#解锁
UNLOCK TABLES;

 Luego cierre sesión e iniciemos sesión con esta cuenta para probar:

exit
mysql -uzyh -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

Luego ejecútelo en mysql_2:

Utilice el servicio de mysql_2 para iniciar sesión en la cuenta zyh de mysql_1 y probar si puede tener éxito:

mysql -uzyh -h 127.0.0.1 -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3307 -p

 Luego inicie sesión en la cuenta raíz de mysql_2:

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

master_host = '127.0.0.1',
master_port = 3307,
master_user = 'zyh',
master_password = 'Xmm123456!',
master_log_file='mysql-bin.000001',
master_log_pos=1369;
Estos datos están todos arriba, corresponda uno por uno . 

#停止同步
stop slave;

#修改从库指向主库,使用上一步记录的文件名以及位点(注意没到分号就是一条语句)
CHANGE MASTER TO
master_host = '127.0.0.1',
master_port = 3307,
master_user = 'zyh',
master_password = 'Xmm123456!',
master_log_file='mysql-bin.000001',
master_log_pos=1369;

#启动同步
start slave;

#查看从库状态,Slave_IO_Running和Slave_SQL_Running都为yes说明同步成功,如果不为yes,请检查error_log,然后排查相关异常
show slave status\G;

 ¡Entonces el despliegue estará completo! ! !

Probémoslo:

Inicie sesión en mysql_1:

mysql -uroot -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

Inserte alguna información:

use xjgg;
INSERT INTO test (name,jieshao) values ('小猫咪','睡觉使我快乐!'),('张三','法外狂徒'),('李四','没有介绍!');
select * from test;

 Luego veamos si mysql_2 ha cambiado automáticamente:

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

Consultamos información directamente:

use xjgg;
select * from test;

 Descubrimos que los datos se sincronizaron correctamente.

Sugerencia: el mecanismo maestro-esclavo de MySQL es relativamente frágil y debe operarse con precaución. Si reinicia mysql_1, primero debe detener el esclavo de mysql_2, lo que significa que debe ejecutar el comando detener esclavo en mysql_2 y luego reiniciar el servicio MySQL de mysql_1; de lo contrario, es probable que se interrumpa. Una vez completado el reinicio, aún necesita activar mysql_2 start esclavo

Resumen personal (esto es para el propio autor):

El mysql.sock utilizado para ejecutar directamente el comando de inicio de sesión de mysql es /var/lib/mysql/mysql.sock

El my.cnf utilizado para ejecutar directamente el comando del servicio mysqld es /etc/my.cnf

Sólo comprendiendo esto podremos realizar una configuración maestro-esclavo utilizando un solo host.

fin...

Supongo que te gusta

Origin blog.csdn.net/xiaomaomixj/article/details/126110211
Recomendado
Clasificación