Maison  >  Article  >  base de données  >  Qu'est-ce qu'un cluster MySQL ? Présentation du cluster MySQL

Qu'est-ce qu'un cluster MySQL ? Présentation du cluster MySQL

零下一度
零下一度original
2017-04-27 09:29:473451parcourir

Dans le passé, je pensais que le regroupement, la séparation en lecture et en écriture, et xxxx étaient toutes des choses géniales et étonnantes. Après l'avoir terminé, j'ai trouvé que c'était en fait très simple, du moment que vous êtes intéressé.

Deux machines :

mysql01 : 192.168.1.222

mysql02 : 192.168.1.223

Notez que si vous copiez et simulez une machine virtuelle, vous avez Changer auto.cnf sous mysql/data L'uuid des deux machines ne peut pas être le même. Le selinux du serveur doit être désactivé (modifiez /etc/selinux/config et changez SELINUX en désactivé).

MySQL5.6 propose deux manières de démarrer la réplication maître-esclave : basée sur le journal (binlog) et basée sur le GTID (identifiant de transaction global).
Le principe de la réplication maître-esclave (également appelée réplication A/B)
(1) Le maître enregistre les modifications des données dans le journal binaire (binary log), qui est le fichier spécifié par le fichier de configuration log-bin. Ces enregistrements sont appelés événements de journal binaire (événements de journal binaire) ;
(2) L'esclave lit les événements de journal binaire dans le maître via le thread d'E/S et écrit dans son journal de relais (journal de relais
(3) ; Esclave Refaites les événements dans le journal de relais et exécutez les informations d'événement dans le journal de relais localement une par une pour terminer le stockage local des données, reflétant ainsi les modifications apportées à ses propres données (relecture des données).

mysql01 :

vi /etc/my.cnf

## Ajoutez les éléments de configuration suivants dans [mysqld]
## Définissez server_id, généralement défini sur IP
server_id=222
## Filtrage de copie : bases de données qui doivent être sauvegardées, sortie binlog
#binlog-do-db=roncoo
## Filtrage de copie : bases de données qui n'ont pas besoin d'être sauvegardées, ne pas afficher (la bibliothèque mysql ne fait généralement pas de synchronisation)
binlog-ignore-db=mysql
## Activez la fonction de journal binaire, vous pouvez la prendre à volonté, il est préférable d'avoir un sens
log- bin=master-mysql
## Allouer pour chaque session La mémoire utilisée pour stocker le cache des journaux binaires lors de la transaction
binlog_cache_size=1M
## Format de réplication maître-esclave (mixte, instruction, ligne, le le format par défaut est instruction)

binlog_format=mixed

## Nombre de jours après lesquels les journaux binaires seront automatiquement supprimés/expirés. La valeur par défaut est 0, ce qui signifie qu'il n'y a pas de suppression automatique.
expire_logs_days=7
## Ignorez toutes les erreurs ou erreurs des types spécifiés rencontrées dans la réplication maître-esclave pour éviter les interruptions de réplication du côté esclave.
## Par exemple : l'erreur 1062 fait référence à des clés primaires en double, l'erreur 1032 est due au fait que les données de la base de données maître-esclave sont incohérentes
slave_skip_errors=1062

## relay_log configurer le journal du relais

relay_log =relay01
## log_slave_updates signifie que l'esclave écrit les événements de réplication dans son propre journal binaire
log_slave_updates=1

Démarrez/redémarrez le service de base de données maître, connectez-vous à la base de données, créez un utilisateur de synchronisation de données et accorder les autorisations correspondantes


service mysql restart
mysql -uroot -p
##Créer des utilisateurs de synchronisation de données et accorder les autorisations correspondantes


mysql> grant replication slave, replication client on *.* to 'repl01'@'192.168.1.223' identified by
'123456';
Query OK, 0 rows affected (0.00 sec)
## Actualiser les informations de la table d'autorisation


mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
## Vérifiez le numéro de position et notez le numéro de position (vous avez besoin de ce numéro de position et du fichier journal actuel sur la machine esclave)


mysql> show master status;
mysql02:
vi /etc/my.cnf

## Ajoutez les éléments de configuration suivants dans [mysqld]
## Définissez le server_id, généralement défini sur IP
server_id=223
## Copiez le filtrage : la base de données qui doit être sauvegardé, sortie binlog
# binlog-do-db=roncoo
## Filtrage de copie : les bases de données qui n'ont pas besoin d'être sauvegardées ne sont pas sorties (les bibliothèques mysql ne sont généralement pas synchronisées)
binlog-ignore-db=mysql
## Activer les journaux binaires Lorsque l'esclave de secours sert de maître aux autres esclaves, utilisez
log-bin=slave-mysql
## La mémoire allouée pour chaque session est utilisé pour stocker le cache du journal binaire pendant la transaction
binlog_cache_size = 1M
## Le format de réplication maître-esclave (mixte, instruction, ligne, le format par défaut est instruction)
binlog_format=mixed
## Le nombre de jours pendant lesquels les journaux binaires doivent être automatiquement supprimés/expirés. La valeur par défaut est 0, ce qui signifie qu'il n'y a pas de suppression automatique.
expire_logs_days=7
## Ignorez toutes les erreurs ou erreurs des types spécifiés rencontrées dans la réplication maître-esclave pour éviter les interruptions de réplication du côté esclave.
## Par exemple : l'erreur 1062 fait référence à des clés primaires en double, l'erreur 1032 est due au fait que les données de la base de données maître-esclave sont incohérentes
slave_skip_errors=1062
## relay_log configurer le journal du relais
relay_log=relay02
# # log_slave_updates signifie que l'esclave écrit les événements de réplication dans son propre journal binaire
log_slave_updates=1

Redémarrez le service de base de données mysql restart

Ajoutez les paramètres pertinents


mysql> 
change master to master_host='192.168.1.222', master_user='repl01',master_password='123456', master_port=3306, master_log_file='mysql01.000001',master_log_pos=429, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

上面执行的命令的解释:
master_host='192.168.1.222' ## Master 的 IP 地址
master_user='repl' ## 用于同步数据的用户(在 Master 中授权的用户)
master_password='123456' ## 同步数据用户的密码
master_port=3306 ## Master 数据库服务的端口
master_log_file='master-mysql.000001' ##指定 Slave 从哪个日志文件开始读复制数据(可
在 Master 上使用 show master status 查看到日志文件名)
master_log_pos=429 ## 从哪个 POSITION 号开始读
master_connect_retry=30 ##当重新建立主从连接时,如果连接建立失败,间隔多久后重试。
单位为秒,默认设置为 60 秒,同步延迟调优参数。
## 查看主从同步状态
mysql> show slave status\G;
可看到 Slave_IO_State 为空, Slave_IO_Running 和 Slave_SQL_Running 是 No,表明 Slave 还
没有开始复制过程。
## 开启主从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
## 再查看主从同步状态
mysql> show slave status\G;

主要看以下两个参数,这两个参数如果是 Yes 就表示主从同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

可查看 master 和 slave 上线程的状态。在 master 上,可以看到 slave 的 I/O 线程创建的连接:

mysql01: mysql> show processlist\G;
mysql02: mysql> show processlist\G;

完成,测试在mysql01上新建数据库db1,查看mysql02。

从mysql02到mysql01是一样的步骤:

切换到mysql02上

##创建数据同步用户,并授予相应的权限

mysql> grant replication slave, replication client on *.* to 'repl02'@'192.168.1.222' identified by
'123456';
Query OK, 0 rows affected (0.00 sec)

## 刷新授权表信息

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

## 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现在的日志文件)

mysql> show master status;
change master to master_host='192.168.1.223', master_user='repl02',master_password='123456', master_port=3306,master_log_file='mysql02.000002',master_log_pos=567,
master_connect_retry=30;
mysql> start slave;Query OK, 0 rows affected (0.00 sec)

## 再查看主从同步状态

mysql> show slave status\G;

在mysql02上创建数据库db2,查看mysql01即可

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn