Le mysql8 installé par yum implémente le déploiement de la configuration maître-esclave sur la même machine (même hôte) (image détaillée et explication textuelle)

Tout d’abord, vous avez installé mysql8 en utilisant yum, mais vous ne savez toujours pas comment l’installer ? (Voir mes autres articles) Très simple

CentOS7 utilise yum pour installer MySQL8 et diverses versions_blog-CSDN de Xiaomaomixj

Déployons d’abord l’environnement de configuration maître-esclave :

Nous pouvons d'abord jeter un œil au fichier /etc/my.cnf, qui contient des fichiers de données, des fichiers journaux, etc. après avoir utilisé yum pour installer MySQL.

vim /etc/my.cnf

datadir : répertoire dans lequel les données de la base de données sont stockées ( par exemple : table utilisateur dans la base de données MySQL ) ( sera utilisé ultérieurement )

socker : ce fichier est généré par le service mysqld lors de son exécution et est utilisé pour la connexion mysql.

log-error : utilisé pour stocker les messages du journal de mysqld

pid-file : donnez l'identifiant du processus du service mysqld

Bon, commençons le déploiement après une brève compréhension :

Parce que j'espère que cette configuration maître-esclave n'affectera pas mon mysql d'origine, nous devons préparer deux ensembles de fichiers de configuration, un mysql_1 et un mysql_2 (mysql_1 est le maître et mysql_2 est l'esclave) :

Vient ensuite le fichier de configuration ( vous décidez vous-même du chemin ) :

cd /test
mkdir mysql_master_slave
cd mysql_master_slave
mkdir mysql_1
mkdir mysql_2

Voilà à quoi cela ressemble au final :

 Ensuite, nous entrons respectivement mysql_1 et mysql_2 et commençons à créer des fichiers de configuration ( remarque : /var/lib/mysql voici le chemin vers le répertoire de données ci-dessus )

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

Contenu à remplir dans vim :

mysql_1(my.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(my.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

De là, nous pouvons voir que le chemin dans le fichier de configuration correspond au chemin que nous avons créé ( donc si votre chemin est différent du mien, vous devez le changer vous-même ) :

 Ensuite, nous devons accorder les autorisations sur ces fichiers à MySQL :

cd /test
chown -R mysql:mysql mysql_master_slave/

On peut alors commencer :

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

Bien sûr, si vous ne souhaitez pas ouvrir plusieurs terminaux, nous pouvons le laisser s'exécuter en arrière-plan (je préfère utiliser plusieurs terminaux ensemble, ce qui est pratique)

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

Si votre invite mysqld n'est pas une commande, vous devez consulter votre variable $PATH :

echo $PATH
find / -name mysqld

Vous pouvez voir que la commande mysqld est dans la variable $PATH 

Après un démarrage réussi, nous pouvons voir les fichiers /test/mysql_master_slave/mysql_1/mysql/mysql.sock et /test/mysql_master_slave/mysql_2/mysql/mysql.sock. Ils n'existaient pas avant le démarrage. Comme mentionné précédemment, il s'agit d'un fichier généré lors de l'exécution du service mysqld.

sock$:$ signifie la fin de l'expression régulière

lsof -c mysqld|grep sock$

 Avec le fichier mysql.sock, nous pouvons l'utiliser pour nous connecter :

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

Comme je l'ai déjà dit, (datadir : le répertoire dans lequel les données de la base de données sont stockées ( par exemple : la table user dans la base de données mysql ), il contient donc le mot de passe) , le mot de passe est votre mot de passe mysql d'origine

Après vous être connecté, nous testons que mysql_1 et mysql_2 sont isolés :

mysql_1 :

show databases;
create database xiaomaomi;
show databases;

 mysql_2 :

show databases;
show databases;

 Nous avons constaté que la base de données xiaomi créée dans mysql_1 n'existe pas dans mysql_2.

Bon, maintenant, l'environnement de configuration maître-esclave a été déployé.

Vient ensuite le déploiement de la configuration maître-esclave :

Fermez d’abord le mysql auquel nous nous sommes connectés auparavant :

exit

mysql_1 : 

 mysql_2 :

 Ensuite, nous devons désactiver les services mysql_1 et mysql_2 (utilisez kill pour tuer le service de processus) :

ps -ef | grep mysqld
kill 36986
kill 37033

 Ensuite on modifie les fichiers de configuration (my.cnf) de mysql_1 et mysql_2 (à noter que les server-id du maître et de l'esclave ne peuvent pas être les mêmes ) :

binlog-do-db : définissez la base de données qui doit être synchronisée ( si plusieurs bases de données sont utilisées, divisez-les )

replicate-do-db : a la même signification que ci-dessus

mysql_1(主)(my.cnf):

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

mysql_2 (à partir de) (my.cnf) :

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

J'ai marché sur un piège (une erreur sera signalée plus tard, alors résolvons-la ici d'abord), donc je ne vous le démontrerai pas, résolvez-la simplement ici.

 错误:([ERROR] [MY-013117] [Repl] E/S esclave pour le canal '' : Erreur fatale : le thread d'E/S esclave s'arrête car le maître et l'esclave ont des UUID de serveur MySQL égaux ; ces UUID doivent être différents pour que la réplication fonctionne. Code_erreur : MY-013117

Raison : Comme nous avons directement copié le répertoire datadir auparavant, l'uuid du serveur dans /test/mysql_master_slave/mysql_1/mysql/auto.cnf dans le répertoire est le même que /test/mysql_master_slave/mysql_2/mysql/auto.cnf.

Solution : modifiez /test/mysql_master_slave/mysql_2/mysql/auto.cnf :

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

 Remplissez le contenu comme vous le souhaitez, assurez-vous simplement que les uuid du serveur de /test/mysql_master_slave/mysql_1/mysql/auto.cnf et /test/mysql_master_slave/mysql_2/mysql/auto.cnf sont différents.

Démarrez ensuite le service mysql_1 :

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

Services mysql_2 :

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

Puis on se reconnecte :

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

Tout d'abord, nous devons garder les données cohérentes, créer la base de données xjgg respectivement dans mysql_1 et mysql_2 et créer la table de test.

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 :

Exécuter dans 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;

 Déconnectez-vous ensuite et connectons-nous avec ce compte pour tester :

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

Puis exécutez-le dans mysql_2 :

Utilisez le service de mysql_2 pour vous connecter au compte zyh de mysql_1 afin de tester si cela peut réussir :

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

 Connectez-vous ensuite au compte root 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 ;
Ces données sont toutes ci-dessus, veuillez correspondre une par une . 

#停止同步
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;

 Le déploiement est alors terminé ! ! !

Testons-le :

Connectez-vous à mysql_1 :

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

Insérez quelques informations :

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

 Voyons ensuite si mysql_2 a changé automatiquement :

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

Nous recherchons des informations directement :

use xjgg;
select * from test;

 Nous avons constaté que les données ont été synchronisées avec succès.

Suggestion : Le mécanisme maître-esclave MySQL est relativement fragile et doit être utilisé avec prudence. Si vous redémarrez mysql_1, vous devez d'abord arrêter l'esclave de mysql_2, ce qui signifie que vous devez exécuter la commande stop slave sur mysql_2, puis redémarrer le service MySQL de mysql_1, sinon il risque d'être interrompu. Une fois le redémarrage terminé, vous devez toujours activer mysql_2 start slave

Résumé personnel (c'est pour l'auteur lui-même) :

Le mysql.sock utilisé pour exécuter directement la commande de connexion mysql est /var/lib/mysql/mysql.sock

Le my.cnf utilisé pour exécuter directement la commande du service mysqld est /etc/my.cnf

Ce n'est qu'en les comprenant que nous pouvons réaliser une configuration maître-esclave en utilisant un seul hôte.

fin...

Je suppose que tu aimes

Origine blog.csdn.net/xiaomaomixj/article/details/126110211
conseillé
Classement