centos stream 9 下 mysql 一主多从配置以及主从相关问题

centos stream 9 mysql 一主多从配置

文章目录

  • centos stream 9 mysql 一主多从配置
  • 前言
  • 一.服务器准备
  • 二.主从复制配置
    • 1.主服务器mysql 配置(配置文件为my.cnf)
    • 2.从服务器mysql 配置
    • 3.主从复制命令
  • 三.主从数据一致性效验(precona-toolkit)
    • 1.下载precona-toolkit(官网下载地址 [https://www.percona.com/downloads](https://www.percona.com/downloads))
    • 2.安装precona-toolkit
    • 3.验证
  • 四.数据一致性恢复(pt-table-sync)
  • 五.主从一致性shell脚本


前言

一.服务器准备

个人准备了三台服务器(虚拟机)

虚拟机名称 IP地址 MYSQL 版本
虚拟机1 192.168.243.134 mysql8.0.36(主)
虚拟机2 192.168.243.133 mysql8.0.36(从)
虚拟机3 192.168.243.130 mysql8.0.36(从)

主从配置的流程设计为 虚拟机2复制虚拟机1,虚拟机3复制虚拟机2

二.主从复制配置

1.主服务器mysql 配置(配置文件为my.cnf)

vim /etc/my.cnf
server-id=1   #服务id
log-bin=mysql-bin  #binlog 日志文件
binlog-ignore-db= mysql # 不同步的数据库
replicat-do-db= gname  # 仅同步数据库
gtid-mode =on  (#开启gtid 模式,用于gtid 主从复制)
enforce-gtid-consistency=on (#强制gtid一致性,用于gtid 主从复制)
binlog_format =ROW  #binlog 的格式 (可以通过 show VARIABLES like 'binlog_format%' 查看)

2.从服务器mysql 配置

vim /etc/my.cnf
server-id=2  #服务id
log-bin=mysql-bin  #binlog 日志文件
log-save-updates=1  #从库从从库收到的更新记录到从服务器自己的二进制文件中
gtid-mode =on  (#开启gtid 模式,用于gtid 主从复制)
enforce-gtid-consistency=on (#强制gtid一致性,用于gtid 主从复制)
relay_log =/var/lib/mysql/mysql-replay-bin #中继日志的位置和名称
relay-log-index=/var/lib/mysql/mysql-relay-bin.index #中继日志索引的位置和名称
slave_net_timeout = 2 (#当salve 从主库库中读取log 数据失败后,等待多久重新建立连接并获取数据)
read_only=1 (#只读)

3.主从复制命令

1.创建账号,并授予replication slave 权限

# 主库执行
CREATE USER 'slave'@'192.168.243.%' IDENTIFIED WITH mysql_native_password BY 'slave';
GRANT REPLICATION SLAVE ON *.*  TO 'slave'@'192.168.243.%';
FLUSH PRIVILEGES;
show master status\G;#查看主库状态)

2.从库执行命令:

mysql>change master to (change replication  source to )master_host='192.168.243.134(133)',master_port=3306,master_user='slave',master_password='slave',source_connect_retry=20, master_auto_position=1;#gtid 模式进行主从复制)
change master to master_host='192.168.243.134',master_port=3306,master_user='slave',master_password='slave',master_log_file='binlog.000001',master_log_pos=155  (#传统主从复制)
mysql> start slave;
mysql> show slave status\G;(#查看从库状态)

centos stream 9 下 mysql 一主多从配置以及主从相关问题_第1张图片

centos stream 9 下 mysql 一主多从配置以及主从相关问题_第2张图片

报错问题:
centos stream 9 下 mysql 一主多从配置以及主从相关问题_第3张图片

主库执行  :show variables like 'gtid%';(#查看gtid_purged)
mysql> show variables like 'gtid%';
+----------------------------------+-------------------------------------------+
| Variable_name                    | Value                                     |
+----------------------------------+-------------------------------------------+
| gtid_executed                    | 5df92845-bb4d-11ee-9565-000c29745dca:1-13 |
| gtid_executed_compression_period | 0                                         |
| gtid_mode                        | ON                                        |
| gtid_next                        | AUTOMATIC                                 |
| gtid_owned                       |                                           |
| gtid_purged                      | 5df92845-bb4d-11ee-9565-000c29745dca:1-13 |
+----------------------------------+-------------------------------------------+
6 rows in set (0.00 sec)

从库执行 : reset master;
mysql> reset master;  
Query OK, 0 rows affected, 28 warnings (0.01 sec)

mysql> set global gtid_purged='5df92845-bb4d-11ee-9565-000c29745dca:1-13';
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 至此问题解决

三.主从数据一致性效验(precona-toolkit)

1.下载precona-toolkit(官网下载地址 https://www.percona.com/downloads)

centos stream 9 下 mysql 一主多从配置以及主从相关问题_第4张图片

2.安装precona-toolkit

 yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl perl-DBI -y  #安装相关的依赖包
 yum install percona-toolkit-3.5.5-1.el9.x86_64.rpm  #安装percona-toolkit
 yum list | grep percona-toolkit  #查看安装percona-toolkit
 pt-table-checksum --help # 帮助命令

3.验证

#虚拟机1(ip 192.168.243.134)
mysql>user wine;
mysql>insert into wine_sign  values(1,1,1,1),(2,2,2,2);
mysql> select * from wine_sign;
+-----------+----------+-----------+-------------+
| member_id | add_time | applet_id | merchant_id |
+-----------+----------+-----------+-------------+
|         1 |        1 |         1 |           1 |
|         2 |        2 |         2 |           2 |
+-----------+----------+-----------+-------------+
2 rows in set (0.00 sec)

#虚拟机2(ip 192.168.243.133)
mysql>user wine;
mysql>insert into wine_sign  values(1,1,1,1),(2,2,2,2),(3,3,3,3);
mysql> select * from wine_sign;
+-----------+----------+-----------+-------------+
| member_id | add_time | applet_id | merchant_id |
+-----------+----------+-----------+-------------+
|         1 |        1 |         1 |           1 |
|         2 |        2 |         2 |           2 |
|         3 |        3 |         3 |           3 |
+-----------+----------+-----------+-------------+
3 rows in set (0.00 sec)

虚拟机1和虚拟机2 数据是不同的,使用工具检测 常用参数解释:
-nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用–databases来指定需要检查的数据库。
–no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
–replicate-check-only :只显示不同步的信息。
–replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
–databases= :指定需要被检查的数据库,多个则用逗号隔开。
–tables= :指定需要被检查的表,多个用逗号隔开
–check-slave-lag=: 需要检查从库的延迟,指定参数,当主从延迟时,从库暂停从主库写入数据;未指定参数,默认会检查从库的延迟,但是不会停止从库从主库写入数据
–skip-check-slave-lag= :不检查从库延迟
–ignore–databases=:忽略指定的数据库
–host | h= :Master的地址
–user | u= :用户名
–passwork | p=:密码
–Post | P= :端口

#主库执行(特别注意如果指定了只复制的数据库,--replicate 填写就写要效验的数据库)
pt-table-checksum --nocheck-replication-filters --replicate=wine.checksums --no-check-binlog-format --databases=wine --host=192.168.243.134 --tables=wine_sign --user=slave --password=slave
[root@localhost precona-toolkit]# pt-table-checksum --nocheck-replication-filters --replicate=wine.checksums --no-check-binlog-format --databases=wine --host=192.168.243.134 --tables=wine_sign --user=slave --password=slave
Checking if all tables can be checksummed ...
Starting checksum ...

# A software update is available:
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
01-30T12:01:40      0      1        2          1       1       0   0.361 wine.wine_sign

四.数据一致性恢复(pt-table-sync)

[root@localhost precona-toolkit]# pt-table-sync  --replicate=wine.checksums h=192.168.243.134(主),u=slave(主),p=slave(主) h=192.168.243.133(从),u=slave(从),p=slave(从) --print #打印
Can't make changes on the master because no unique index exists at /usr/bin/pt-table-sync line 11025.  while doing wine.wine_sign on 192.168.243.133 #表中没有唯一索引(需要加上唯一索引)

[root@localhost precona-toolkit]# pt-table-sync  --replicate=wine.checksums h=192.168.243.134,u=slave,p=slave h=192.168.243.133,u=slave,p=slave --print

DELETE FROM `wine`.`wine_sign` WHERE `member_id`='3' LIMIT 1 /*percona-toolkit src_db:wine src_tbl:wine_sign src_dsn:h=192.168.243.134,p=...,u=slave dst_db:wine dst_tbl:wine_sign dst_dsn:h=192.168.243.133,p=...,u=slave lock:1 transaction:1 changing_src:wine.checksums replicate:wine.checksums bidirectional:0 pid:32231 user:root host:localhost.localdomain*/;

[root@localhost precona-toolkit]# pt-table-sync  --replicate=wine.checksums h=192.168.243.134,u=slave,p=slave h=192.168.243.133,u=slave,p=slave --execute # 执行
[root@localhost precona-toolkit]# pt-table-checksum --nocheck-replication-filters --replicate=wine.checksums --no-check-binlog-format --databases=wine --host=192.168.243.134 --tables=wine_sign --user=slave --password=slave
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
01-30T14:07:27      0      0        2          0       1       0   0.335 wine.wine_sign
# 至此主从数据一致性恢复

pt-table-sync 参数解释

–replicate= :指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。
–databases= : 指定执行同步的数据库,多个用逗号隔开。
–tables= :指定执行同步的表,多个用逗号隔开。
–sync-to-master :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。
h=127.0.0.1 :服务器地址,命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址。
u=root :帐号。 p=123456 :密码。
–print :打印,但不执行命令。
–execute :执行命令。

五.主从一致性shell脚本

[root@localhost ~]# touch pt-check-sync.sh 
[root@localhost ~]# vi pt-check-sync.sh 
#!/usr/bin/env bash 
NUM=`pt-table-checksum  --nocheck-replication-filters --replicate=wine.checksums --no-check-binlog-format --databases=wine --host=192.168.243.134 --tables=wine_sign --user=slave --password=slave | awk 'NR>1{sum+=$3}END{print sum}'` 
if [ $NUM -eq 0 ] ;then 
echo "Data is ok!" 
else
echo "Data is error!" 
pt-table-sync  --replicate=wine.checksums h=192.168.243.134,u=slave,p=slave h=192.168.243.133,u=slave,p=slave --print
pt-table-sync  --replicate=wine.checksums h=192.168.243.134,u=slave,p=slave h=192.168.243.133,u=slave,p=slave --execute
fi
[root@localhost ~]# sh pt-check-sync.sh 

你可能感兴趣的:(centos,mysql)