From 0d5c40204dcece36ee42c951df449cc9cf825ec7 Mon Sep 17 00:00:00 2001 From: diandian Date: Sat, 15 Apr 2023 20:12:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'mysql-MD'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql-MD/第七章:读写分离.md | 521 ++++++ ...第六章:主从复制及读写分离.md | 1501 +++++++++++++++++ 2 files changed, 2022 insertions(+) create mode 100644 mysql-MD/第七章:读写分离.md create mode 100644 mysql-MD/第六章:主从复制及读写分离.md diff --git a/mysql-MD/第七章:读写分离.md b/mysql-MD/第七章:读写分离.md new file mode 100644 index 0000000..767d910 --- /dev/null +++ b/mysql-MD/第七章:读写分离.md @@ -0,0 +1,521 @@ +

读写分离

+ +**作者:行癫(盗版必究)** + +------ + +## 一:读写分离部署 + +#### 1.环境介绍 + +![image-20221006131313211](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20221006131313211.png) + +#### 2.读写分离集群部署 + +##### A:数据库集群部署(略) + +​ 单主单从;多主多从等均可 + +##### B:Mycat部署 + +​ 新机器,不需要安装mysql + +安装jdk环境: + +```shell +[root@mycat ~]# tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local/ +[root@mycat ~]# mv /usr/local/jdk1.8.0_211/ /usr/local/java +``` + +设置环境变量: + +```shell +[root@mycat ~]# vi /etc/profile +JAVA_HOME=/usr/local/java +PATH=$JAVA_HOME/bin:$PATH +export JAVA_HOME PATH +[root@mycat ~]# source /etc/profile +[root@mycat ~]# java -version +java version "1.8.0_211" +Java(TM) SE Runtime Environment (build 1.8.0_211-b12) +Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode) +``` + +安装mycat: + +```shell +[root@mycat ~]# tar xf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/ +``` + +设置环境变量: + +```shell +[root@mycat ~]# vi ~/.bash_profile +PATH=$PATH:$HOME/bin:/usr/local/mycat/bin +[root@mycat ~]# source ~/.bash_profile +``` + +##### C:数据库部署 + +Mysql中添加数据库和账户: + +```shell +[root@master-1 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 10 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> create database shop; +Query OK, 1 row affected (0.00 sec) + +mysql> create database bbs; +Query OK, 1 row affected (0.00 sec) + +mysql> create database blog; +Query OK, 1 row affected (0.00 sec) + +mysql> grant all on shop.* to shop@'%' identified by 'QianFeng@123'; +Query OK, 0 rows affected, 1 warning (0.00 sec) + +mysql> grant all on bbs.* to bbs@'%' identified by 'QianFeng@123'; +Query OK, 0 rows affected, 1 warning (0.00 sec) + +mysql> grant all on blog.* to blog@'%' identified by 'QianFeng@123'; +Query OK, 0 rows affected, 1 warning (0.00 sec) +``` + +注意: + +​ 创建的库跟mycat关联,原则上一个库对应一个项目,根据实际情况创建 + +​ 创建的库需要单独授权用户进行管理,用户名和库名根据实际情况决定 + +##### D:Mycat配置 + +​ server.xml:Mycat的配置文件,设置账号、参数等 + +```shell +[root@mycat conf]# vim server.xml + + + + + 0 + 1 + 0 + 0 + 2 + (?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+ + false + 0 + 0 + 0 + 64k + 1k + 0 + 384m + false + false + true + + + 123456 + TESTDB + + + 123456 + shop + + + 123456 + bbs + + + 123456 + blog + + +``` + +注意: + +```shell +user 用户配置节点 +–name 登录的用户名,也就是连接Mycat的用户名 +–password 登录的密码,也就是连接Mycat的密码 +–schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,db2 +``` + +​ schema.xml:Mycat对应的物理数据库和数据库表的配置 + +```shell +[root@mycat conf]# cat schema.xml + + + + + + + + + + + + show status like 'wsrep%' + + + + + + + + + + + show status like 'wsrep%' + + + + + + + + + + + show status like 'wsrep%' + + + + + + + + + + +``` + +注意: + +```shell +balance=1 开启读写分离机制,所有读操作都发送到当前备用的 writeHost 上。 +wirteType=0 所有写操作发送到第一个writeHost,第一个挂了切换到第二个 +switchType=3 基于MySQL Galera cluster的切换机制,心跳语句为show status like 'wsrep%' +``` + +##### E:启动服务 + +```shell +[root@mycat conf]# mycat start +Starting Mycat-server... +[root@mycat conf]# jps +1494 WrapperSimpleApp +1528 Jps +``` + +查看端口: + +```shell +[root@mycat conf]# ss -antpl +State Recv-Q Send-Q Local Address:Port Peer Address:Port +LISTEN 0 128 *:22 *:* users:(("sshd",pid=837,fd=3)) +LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=933,fd=13)) +LISTEN 0 1 127.0.0.1:32000 *:* users:(("java",pid=1494,fd=4)) +LISTEN 0 50 :::37680 :::* users:(("java",pid=1494,fd=57)) +LISTEN 0 128 :::22 :::* users:(("sshd",pid=837,fd=4)) +LISTEN 0 100 ::1:25 :::* users:(("master",pid=933,fd=14)) +LISTEN 0 50 :::1984 :::* users:(("java",pid=1494,fd=58)) +LISTEN 0 100 :::8066 :::* users:(("java",pid=1494,fd=79)) +LISTEN 0 50 :::32834 :::* users:(("java",pid=1494,fd=59)) +LISTEN 0 100 :::9066 :::* users:(("java",pid=1494,fd=75)) +``` + +##### F:客户端测试 + +mycat连接测试: + +```shell +[root@master-1 ~]# mysql -u shop -p123456 -P 8066 -h 10.0.0.47 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 1 +Server version: 5.6.29-mycat-1.6.7.1-release-20190627191042 MyCat Server (OpenCloudDB) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++----------+ +| DATABASE | ++----------+ +| shop | ++----------+ +1 row in set (0.00 sec) + +mysql> use shop +Database changed +mysql> create table t1(id int); +Query OK, 0 rows affected (0.01 sec) + +mysql> show tables; ++----------------+ +| Tables_in_shop | ++----------------+ +| t1 | ++----------------+ +1 row in set (0.01 sec) + +mysql> insert into t1 values(1); +Query OK, 1 row affected (0.03 sec) + +mysql> insert into t1 values(2); +Query OK, 1 row affected (0.01 sec) +``` + +从服务数据验证: + +```shell +[root@slave-2 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 7 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| qfcloud | +| sys | ++--------------------+ +5 rows in set (0.00 sec) + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| bbs | +| blog | +| mysql | +| performance_schema | +| qfcloud | +| shop | +| sys | ++--------------------+ +8 rows in set (0.00 sec) + +mysql> use shop +Reading table information for completion of table and column names +You can turn off this feature to get a quicker startup with -A + +Database changed +mysql> show tables; ++----------------+ +| Tables_in_shop | ++----------------+ +| t1 | ++----------------+ +1 row in set (0.00 sec) + +mysql> select * from t1; ++------+ +| id | ++------+ +| 1 | +| 2 | ++------+ +2 rows in set (0.00 sec) +``` + +#### 3.Mycat配置文件 + +##### server.xml + +```shell +一:server.xml 配置文件 +1.privileges标签 +对用户的 schema以及表进行精细化的DML(数据操纵语言)权限控制 + --check 表示是否开启DML权限检查。默认是关闭。 +--dml 顺序说明:insert,update,select,delete + +
+
+db1的权限是update,select。 +tb01的权限是啥都不能干。 +tb02的权限是insert,update,select,delete。 +其他表默认是udpate,select。 + +2.system标签 +这个标签内嵌套的所有 property 标签都与系统配置有关。 +utf8 +字符集 +1 +处理线程数量,默认是cpu数量。 +4096 +每次读取留的数量,默认4096。 +409600 +创建共享buffer需要占用的总空间大小。processorBufferChunk*processors*100。 +0 +默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。 +100 +二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。 +100 +全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。 +1 +是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。 +4 +指定 Mysql 协议中的报文头长度。默认 4。 +16M +指定 Mysql 协议可以携带的数据最大长度。默认 16M。 +1800000 +指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。 +3 +前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。 +READ_UNCOMMITTED = 1; +READ_COMMITTED = 2; +REPEATED_READ = 3; +SERIALIZABLE = 4; +300 +SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。 +1000 +清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单 +位毫秒。 +300000 +对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。 +10000 +对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。 +0.0.0.0 +mycat 服务监听的 IP 地址,默认值为 0.0.0.0。 +8066 +定义 mycat 的使用端口,默认值为 8066。 +9066 +定义 mycat 的管理端口,默认值为 9066。 +5.6 +mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6,5.7 版本,其他版本可能会有问题。 +0 +是否开启实时统计。1为开启;0为关闭 。 +0 +是否开启全局表一致性检测。1为开启;0为关闭 。 +0 +分布式事务开关。0为不过滤分布式事务;1为过滤分布式事务;2 为不过滤分布式事务,但是记录分布式事务日志。 +65535 +默认是65535。 64K 用于sql解析时最大文本长度 +以上举例的属性仅仅是一部分,可以配置的变量很多。 +System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。 + +3. Firewall标签 +防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问 + + + + + + + + +``` + +##### schema.xml + +```shell +一:schema.xml +–schema 数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应 +–dataNode 分片信息,也就是分库相关配置 +–dataHost 物理数据库,真正存储数据的数据库 + +1、schema 标签 + +schema标签用来定义mycat实例中的逻辑库,mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库,如果不配置schema标签,所有表的配置会属于同一个默认的逻辑库。逻辑库的概念和MySql的database的概念一样,我们在查询两个不同逻辑库中的表的时候,需要切换到该逻辑库下进行查询。 +–name 逻辑数据库名,与server.xml中的schema对应 +–checkSQLschema 数据库前缀相关设置,当该值为true时,例如我们执行语句select * from TESTDB.company 。mycat会把语句修改为 select * from company 去掉TESTDB。 +–sqlMaxLimit 当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,Mycat会自动加上对应的值。不写的话,默认返回所有的值。需要自己sql语句加limit。 + +2、dataNode标签 + +datanode标签定义了mycat中的数据节点,也就是数据分片。一个datanode标签就是一个独立的数据分片。 +localhost1数据库实例上的db1物理数据库,这就组成一个数据分片,最后我们用dn1来标示这个分片。 +–name 定义数据节点的名字,这个名字需要唯一。我们在table标签上用这个名字来建立表与分片对应的关系 +–dataHost 用于定义该分片属于哪个数据库实例,属性与datahost标签上定义的name对应 +–database 用于定义该分片属于数据库实例上 的具体库。 + +3、dataHost标签 +这个标签直接定义了具体数据库实例,读写分离配置和心跳语句。 + +select user() + + + + + +–name 唯一标示dataHost标签,供上层使用 +–maxCon 指定每个读写实例连接池的最大连接。 +–minCon 指定每个读写实例连接池的最小连接,初始化连接池的大小 +–balance 负载均称类型 +balance=“0”:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上 +balance=“1”:全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。 +balance=“2”:所有读操作都随机的在writeHost、readHost上分发 +balance=“3”:所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。 +–writeType 负载均衡类型。 +writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties . +writeType=“1”,所有写操作都随机的发送到配置的 writeHost。1.5以后版本废弃不推荐。 +–switchType -1不自动切换 +1 默认值 自动切换 +2 基于MySql主从同步的状态决定是否切换心跳语句为 show slave status +3 基于mysql galary cluster 的切换机制(适合集群) 心跳语句为 show status like ‘wsrep%’ +–dbType 指定后端链接的数据库类型目前支持二进制的mysql协议,还有其他使用jdbc链接的数据库,例如:mongodb,oracle,spark等 +–dbDriver 指定连接后段数据库使用的driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。 +如果使用JDBC的话需要符合JDBC4标准的驱动jar 放到mycat\lib目录下,并检查驱动jar包中包括如下目录结构文件 META-INF\services\java.sql.Driver。 在这个文件写上具体的driver类名,例如com.mysql.jdbc.Driver +writeHost readHost指定后端数据库的相关配置给mycat,用于实例化后端连接池。 +–tempReadHostAvailable +如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。 +1)heartbeat标签 +这个标签内指明用于和后端数据库进行心跳检查的语句。 +例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。 +2) writeHost /readHost 标签 +这两个标签都指定后端数据库的相关配置,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例。 +在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。 +另一方面,由于这个 writeHost 宕机,系统会自动的检测到,并切换到备用的 writeHost 上去。这两个标签的属性相同,这里就一起介绍。 +–host 用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。 +–url 后端实例连接地址。Native:地址:端口 JDBC:jdbc的url +–password 后端存储实例需要的密码 +–user 后端存储实例需要的用户名字 +–weight 权重 配置在 readhost 中作为读节点的权重 +–usingDecrypt 是否对密码加密,默认0。 +``` + + + + + + + diff --git a/mysql-MD/第六章:主从复制及读写分离.md b/mysql-MD/第六章:主从复制及读写分离.md new file mode 100644 index 0000000..0090744 --- /dev/null +++ b/mysql-MD/第六章:主从复制及读写分离.md @@ -0,0 +1,1501 @@ +

主从复制及读写分离

+ +**作者:行癫(盗版必究)** + +------ + +## 一:主从复制 + +#### 1.主从复制概念 + +什么是主从复制: + +​ 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库 + +主从复制的作用: + +​ 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失 + +​ 架构的扩展,业务量越来越大,I/O访问频率过高,单机无法满足,多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能 + +​ 读写分离,使数据库能支撑更大的并发 + +主从复制的原理: + +​ 数据库有个bin-log二进制文件,记录了所有sql语句 + +​ 我们的目标就是把主数据库的bin-log文件的sql语句复制到从库 + +​ 让其在从数据的relay-log(中继日志)重做日志文件中再执行一次这些sql语句即可 + +image-20220926231910240 + +总结: + +​ 从库slave生成两个线程,i/o线程和sql线程,i/o将变更记录写到二进制日志文件中,再写到中继日志中,sql线程读取中继日志,解析操作,最终数据统一 + +注意: + +​ I/O进程:负责通信 + +​ SQL进程:负责写数据,根据log日志写数据 + +#### 2.主从复制部署 + +##### 环境准备 + +| 节点 | IP地址 | +| :----: | :--------: | +| Master | 10.0.0.128 | +| Slave | 10.0.0.42 | + +注意: + +​ 所有节点关闭防火墙和selinux + +​ 保证yum仓库可用 + +​ 保证网络畅通 + +​ 如果是克隆的服务器需要修改每台数据库的server-uuid + +修改主机名:(所有节点)(可选操作) + +```shell +[root@xingdian ~]# hostnamectl set-hostname master +[root@xingdian ~]# hostnamectl set-hostname slave +``` + +添加本地解析:(所有节点)(可选操作) + +```shell +[root@master ~]# cat /etc/hosts +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 +10.0.0.128 master +10.0.0.42 slave + +[root@slave ~]# cat /etc/hosts +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 +10.0.0.128 master +10.0.0.42 slave +``` + +##### Master部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +主服务器部署: + +```shell +[root@master ~]# vi /etc/my.cnf +log-bin = my1log +server-id = 1 +``` + +创建授权账户: + +```shell +[root@master ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 3 +Server version: 5.7.39 MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. +mysql> grant all on *.* to 'slave'@'%' identified by 'QianFeng@123'; +mysql> flush privileges; +mysql> exit +Bye +``` + +重启服务: + +```shell +[root@master ~]# systemctl restart mysqld +``` + +注意: + +replication slave: + +​ 拥有此权限可以查看从服务器,从主服务器读取二进制日志 + +super权限: + +​ 允许用户使用修改全局变量的SET语句以及CHANGE MASTER语句 + +reload权限: + +​ 必须拥有reload权限,才可以执行flush [tables | logs | privileges] + +##### Slave部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +从服务器部署: + +```shell +[root@slave ~]# vi /etc/my.cnf +log-bin = my2log +server-id = 2 +``` + +重启服务: + +```shell +[root@slave ~]# systemctl restart mysqld +``` + +获取主服务器信息:(主服务器操作) + +```shell +[root@master ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 2 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show binlog events; ++---------------+-----+----------------+-----------+-------------+---------------------------------------+ +| Log_name | Pos | Event_type | Server_id | End_log_pos | Info | ++---------------+-----+----------------+-----------+-------------+---------------------------------------+ +| my1log.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.39-log, Binlog ver: 4 | +| my1log.000001 | 123 | Previous_gtids | 1 | 154 | | ++---------------+-----+----------------+-----------+-------------+---------------------------------------+ +2 rows in set (0.00 sec) +``` + +指定主服务器信息:(从服务器操作) + +```shell +[root@slave ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 2 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> edit + -> ; +Query OK, 0 rows affected, 2 warnings (0.01 sec) + +注意:edit中添加的内容 +CHANGE MASTER TO + MASTER_HOST='master', + MASTER_USER='slave', + MASTER_PASSWORD='QianFeng@123', + MASTER_PORT=3306, + MASTER_LOG_FILE='my1log.000001', + MASTER_LOG_POS=4, + MASTER_CONNECT_RETRY=10; + +参数解释: +CHANGE MASTER TO + MASTER_HOST='mysql-master-1.blackmed.cn/ip', + MASTER_USER='slave', //主服务器用户 + MASTER_PASSWORD='big', + MASTER_PORT=3306, + MASTER_LOG_FILE='master2-bin.001', //日志文件 + MASTER_LOG_POS=4, //日志位置 + MASTER_CONNECT_RETRY=10; //默认尝试次数 +获取参数: +mysql> help change master to +``` + +启动slave: + +```shell +mysql> start slave; +Query OK, 0 rows affected (0.00 sec) +``` + +注意: + +​ stop slave;停止slave + +​ reset master;删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件;用于第一次进行搭建主从库时,进行主库binlog初始化工作 + +​ reset slave;用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件 + +查看主从状态: + +```shell +mysql> show slave status\G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master + Master_User: slave + Master_Port: 3306 + Connect_Retry: 10 + Master_Log_File: my1log.000001 + Read_Master_Log_Pos: 154 + Relay_Log_File: slave-relay-bin.000002 + Relay_Log_Pos: 361 + Relay_Master_Log_File: my1log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 154 + Relay_Log_Space: 568 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 1 + Master_UUID: 85c6acc4-3db0-11ed-b302-000c29311164 + Master_Info_File: /var/lib/mysql/master.info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: + Executed_Gtid_Set: + Auto_Position: 0 + Replicate_Rewrite_DB: + Channel_Name: + Master_TLS_Version: +1 row in set (0.00 sec) +``` + +注意: + +​ Slave_IO_Running: Yes + +​ Slave_SQL_Running: Yes + +验证: + +​ 主服务器创建数据: + +```shell +mysql> create database t1; +Query OK, 1 row affected (0.00 sec) +``` + +​ 从服务器查看数据: + +```shell +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| sys | +| t1 | ++--------------------+ +5 rows in set (0.00 sec) +``` + +## 二:GTID主从复制 + +#### 1.GTID概念 + +​ GTID基于事务ID复制 + +​ GTID全局事务标识(global transaction identifiers) + +​ 是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置 + +​ 不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。而是使用MASTER_AUTO_POSTION=1的方式开始复制 + +#### 2.GTID组成 + +​ GTID = source_id:transaction_id + +​ source_id源id,用于鉴别原服务器,即mysql服务器唯一的server_uuid,由于GTID会传递到slave,所以也可以理解为源ID + +​ transaction_id事务id,为当前服务器上已提交事务的一个序列号,通常从1开始自增长的序列,一个数值对应一个事务 + +示例: + +​ 3E11FA47-71CA-11E1-9E33-C80AA9429562:23 + +​ 前面的一串为服务器的server_uuid + +​ 后面的23为transaction_id + +#### 3.GTID工作原理 + +​ master更新数据时,会在事务前产生GTID,一同记录到binlog日志中 + +​ slave端的i/o 线程将变更的binlog,写入到本地的relay log中 + +​ sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录 + +​ 如果有记录,说明该GTID的事务已经执行,slave会忽略 + +​ 如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog + +#### 4.主从部署 + +​ 注意:实验之前环境初始化,不要有残留的数据 + +##### 环境准备 + +| 节点 | IP地址 | +| :----: | :--------: | +| Master | 10.0.0.128 | +| Slave | 10.0.0.42 | + +注意: + +​ 所有节点关闭防火墙和selinux + +​ 保证yum仓库可用 + +​ 保证网络畅通 + +​ 如果是克隆的服务器需要修改每台数据库的server-uuid + +修改主机名:(所有节点)(可选操作) + +```shell +[root@xingdian ~]# hostnamectl set-hostname master +[root@xingdian ~]# hostnamectl set-hostname slave +``` + +添加本地解析:(所有节点)(可选操作) + +```shell +[root@master ~]# cat /etc/hosts +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 +10.0.0.128 master +10.0.0.42 slave + +[root@slave ~]# cat /etc/hosts +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 +10.0.0.128 master +10.0.0.42 slave +``` + +##### Master部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +主服务器部署: + +```shell +[root@master ~]# vim /etc/my.cnf +log-bin +server-id=1 +gtid_mode = ON +enforce_gtid_consistency=1 +``` + +创建授权用户: + +```shell +[root@master ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 3 +Server version: 5.7.39 MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> grant all on *.* to slave@'%' identified by 'QianFeng@123'; +Query OK, 0 rows affected, 1 warning (0.00 sec) + +mysql> flush privileges; +Query OK, 0 rows affected (0.00 sec) + +mysql> exit +Bye +``` + +重启服务: + +```shell +[root@master ~]# systemctl restart mysqld +``` + +##### Slave部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +从服务器部署: + +```shell +[root@slave ~]# vim /etc/my.cnf +log-bin +server-id=2 +gtid_mode = ON +enforce_gtid_consistency=1 +relay_log_recovery = on +master-info-repository=TABLE +relay-log-info-repository=TABLE +//这两个参数会将master.info和relay.info保存在表中,默认是Myisam引擎,官方建议用 +``` + +重启服务: + +```shell +[root@slave ~]# systemctl restart mysqld +``` + +配置连接主服务器: + +```shell +[root@slave ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 2 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> change master to + -> master_host='master', + -> master_user='slave', + -> master_password='QianFeng@123', + -> master_auto_position=1; +Query OK, 0 rows affected, 2 warnings (0.00 sec) +``` + +启动Slave: + +```shell +mysql> start slave; +Query OK, 0 rows affected (0.00 sec) +``` + +主从状态验证: + +```shell +mysql> show slave status\G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: master-bin.000001 + Read_Master_Log_Pos: 154 + Relay_Log_File: slave-relay-bin.000002 + Relay_Log_Pos: 369 + Relay_Master_Log_File: master-bin.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 154 + Relay_Log_Space: 576 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 1 + Master_UUID: 00813e87-4321-11ed-a33c-000c29311164 + Master_Info_File: mysql.slave_master_info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: + Executed_Gtid_Set: + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: + Master_TLS_Version: +1 row in set (0.00 sec) +``` + +数据验证: + +主服务器创建数据: + +```shell +[root@master ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 3 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> create database qfcloud; +Query OK, 1 row affected (0.00 sec) + +mysql> exit +Bye +``` + +从服务器查验数据: + +```shell +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| qfcloud | +| sys | ++--------------------+ +5 rows in set (0.00 sec) +``` + +## 三:GTID双主双从 + +#### 1.环境准备 + +注意: + +​ 实验之前环境初始化,不要有残留的数据 + +​ 先做双主,M-M互为主从,从是双主的从 + +| 节点 | IP地址 | +| :------: | :--------: | +| Master-1 | 10.0.0.128 | +| Master-2 | 10.0.0.46 | +| Slave-1 | 10.0.0.42 | +| Slave-2 | 10.0.0.45 | + +注意: + +​ 所有节点关闭防火墙和selinux + +​ 保证yum仓库可用 + +​ 保证网络畅通 + +​ 如果是克隆的服务器需要修改每台数据库的server-uuid + +#### 2.Master-1部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +主服务器一部署: + +```shell +[root@master-1 ~]# vim /etc/my.cnf +log-bin = my1log +server-id = 1 +gtid_mode=ON +enforce_gtid_consistency=1 +``` + +创建授权账户: + +```shell +[root@master-1 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 4 +Server version: 5.7.39 MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> grant all on *.* to 'slave'@'%' identified by 'QianFeng@123'; +Query OK, 0 rows affected, 1 warning (0.00 sec) + +mysql> flush privileges; +Query OK, 0 rows affected (0.00 sec) + +mysql> exit +Bye +``` + +重启服务: + +```shell +[root@master-1 ~]# systemctl restart mysqld +``` + +#### 3.Master-2部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +主服务器二部署: + +```shell +[root@master-2 ~]# vim /etc/my.cnf +log-bin = my2log +server-id = 2 +gtid_mode=ON +enforce_gtid_consistency=1 +``` + +创建授权账户: + +```shell +[root@master-2 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 4 +Server version: 5.7.39 MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> grant all on *.* to 'slave'@'%' identified by 'QianFeng@123'; +Query OK, 0 rows affected, 1 warning (0.00 sec) + +mysql> flush privileges; +Query OK, 0 rows affected (0.00 sec) + +mysql> exit +Bye +``` + +重启服务: + +```shell +[root@master-2 ~]# systemctl restart mysqld +``` + +#### 4.双主互为主从 + +Master-1: + +```shell +[root@master-1 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 3 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> change master to + -> master_host='master-2', + -> master_user='slave', + -> master_password='QianFeng@123', + -> master_auto_position=1; +Query OK, 0 rows affected, 2 warnings (0.01 sec) + +mysql> start slave; +Query OK, 0 rows affected (0.00 sec) + +mysql> show slave status\G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master-2 + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: my2log.000001 + Read_Master_Log_Pos: 154 + Relay_Log_File: master-1-relay-bin.000002 + Relay_Log_Pos: 361 + Relay_Master_Log_File: my2log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 154 + Relay_Log_Space: 571 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 2 + Master_UUID: 1b453d94-452e-11ed-b744-000c2936b606 + Master_Info_File: /var/lib/mysql/master.info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: + Executed_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: + Master_TLS_Version: +1 row in set (0.00 sec) + +mysql> exit +Bye +``` + +Master-2: + +```shell +[root@master-2 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 3 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> change master to + -> master_host='master-1', + -> master_user='slave', + -> master_password='QianFeng@123', + -> master_auto_position=1; +Query OK, 0 rows affected, 2 warnings (0.01 sec) + +mysql> start slave; +Query OK, 0 rows affected (0.00 sec) + +mysql> show slave status\G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master-1 + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: my1log.000001 + Read_Master_Log_Pos: 587 + Relay_Log_File: master-2-relay-bin.000002 + Relay_Log_Pos: 794 + Relay_Master_Log_File: my1log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 587 + Relay_Log_Space: 1004 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 1 + Master_UUID: 146f4cae-452e-11ed-b87f-000c29311164 + Master_Info_File: /var/lib/mysql/master.info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Executed_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: + Master_TLS_Version: +1 row in set (0.00 sec) + +mysql> exit +Bye +``` + +#### 5.Slave-1部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +从服务器一部署: + +```shell +[root@slave-1 ~]# vim /etc/my.cnf +log-bin = my3log +server-id = 3 +gtid_mode=ON +enforce_gtid_consistency=1 +relay_log_info_repository = TABLE +master_info_repository = TABLE +relay_log_recovery = on + 当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性 +``` + +重启服务: + +```shell +[root@slave-1 ~]# systemctl restart mysqld +``` + +从连接主服务器: + +```shell +[root@slave-1 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 2 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> CHANGE MASTER TO + -> MASTER_HOST='master-1', + -> MASTER_USER='slave', + -> MASTER_PASSWORD='QianFeng@123', + -> MASTER_AUTO_POSITION=1 FOR CHANNEL 'master-1'; +Query OK, 0 rows affected, 2 warnings (0.00 sec) + +mysql> start slave; +Query OK, 0 rows affected (0.00 sec) + +mysql> show slave status\G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master-1 + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: my1log.000001 + Read_Master_Log_Pos: 587 + Relay_Log_File: slave-1-relay-bin-master@002d1.000002 + Relay_Log_Pos: 794 + Relay_Master_Log_File: my1log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 587 + Relay_Log_Space: 1016 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 1 + Master_UUID: 146f4cae-452e-11ed-b87f-000c29311164 + Master_Info_File: mysql.slave_master_info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Executed_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: master-1 + Master_TLS_Version: +1 row in set (0.00 sec) + + +mysql> CHANGE MASTER TO + -> MASTER_HOST='master-2', + -> MASTER_USER='slave', + -> MASTER_PASSWORD='QianFeng@123', + -> MASTER_AUTO_POSITION=1 FOR CHANNEL 'master-2'; +Query OK, 0 rows affected, 2 warnings (0.01 sec) + +mysql> start slave; +Query OK, 0 rows affected, 1 warning (0.00 sec) + +mysql> show slave status\G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master-1 + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: my1log.000001 + Read_Master_Log_Pos: 587 + Relay_Log_File: slave-1-relay-bin-master@002d1.000002 + Relay_Log_Pos: 794 + Relay_Master_Log_File: my1log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 587 + Relay_Log_Space: 1016 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 1 + Master_UUID: 146f4cae-452e-11ed-b87f-000c29311164 + Master_Info_File: mysql.slave_master_info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Executed_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: master-1 + Master_TLS_Version: +*************************** 2. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master-2 + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: my2log.000001 + Read_Master_Log_Pos: 154 + Relay_Log_File: slave-1-relay-bin-master@002d2.000002 + Relay_Log_Pos: 361 + Relay_Master_Log_File: my2log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 154 + Relay_Log_Space: 583 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 2 + Master_UUID: 1b453d94-452e-11ed-b744-000c2936b606 + Master_Info_File: mysql.slave_master_info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: + Executed_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: master-2 + Master_TLS_Version: +2 rows in set (0.00 sec) +``` + +#### 6.Slave-2部署 + +安装数据库:(略) + +启动数据库:(略) + +修改数据库初始密码:(略) + +从服务器二部署: + +```shell +[root@slave-2 ~]# vim /etc/my.cnf +log-bin = my4log +server-id = 4 +gtid_mode=ON +enforce_gtid_consistency=1 +relay_log_info_repository = TABLE +master_info_repository = TABLE +relay_log_recovery = on +``` + +重启服务: + +```shell +[root@slave-2 ~]# systemctl restart mysqld +``` + +从连接主服务器: + +```shell +[root@slave-2 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 2 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> CHANGE MASTER TO + -> MASTER_HOST='master-1', + -> MASTER_USER='slave', + -> MASTER_PASSWORD='QianFeng@123', + -> MASTER_AUTO_POSITION=1 FOR CHANNEL 'master-1'; +Query OK, 0 rows affected, 2 warnings (0.01 sec) + +mysql> start slave; +Query OK, 0 rows affected (0.00 sec) + +mysql> CHANGE MASTER TO + -> MASTER_HOST='master-2', + -> MASTER_USER='slave', + -> MASTER_PASSWORD='QianFeng@123', + -> MASTER_AUTO_POSITION=1 FOR CHANNEL 'master-2'; +Query OK, 0 rows affected, 2 warnings (0.00 sec) + +mysql> start slave; +Query OK, 0 rows affected, 1 warning (0.01 sec) + +mysql> show slave status\G +*************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master-1 + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: my1log.000001 + Read_Master_Log_Pos: 587 + Relay_Log_File: slave-2-relay-bin-master@002d1.000002 + Relay_Log_Pos: 794 + Relay_Master_Log_File: my1log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 587 + Relay_Log_Space: 1016 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 1 + Master_UUID: 146f4cae-452e-11ed-b87f-000c29311164 + Master_Info_File: mysql.slave_master_info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Executed_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: master-1 + Master_TLS_Version: +*************************** 2. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: master-2 + Master_User: slave + Master_Port: 3306 + Connect_Retry: 60 + Master_Log_File: my2log.000001 + Read_Master_Log_Pos: 154 + Relay_Log_File: slave-2-relay-bin-master@002d2.000002 + Relay_Log_Pos: 361 + Relay_Master_Log_File: my2log.000001 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 154 + Relay_Log_Space: 583 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 +Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 2 + Master_UUID: 1b453d94-452e-11ed-b744-000c2936b606 + Master_Info_File: mysql.slave_master_info + SQL_Delay: 0 + SQL_Remaining_Delay: NULL + Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates + Master_Retry_Count: 86400 + Master_Bind: + Last_IO_Error_Timestamp: + Last_SQL_Error_Timestamp: + Master_SSL_Crl: + Master_SSL_Crlpath: + Retrieved_Gtid_Set: + Executed_Gtid_Set: 146f4cae-452e-11ed-b87f-000c29311164:1-2 + Auto_Position: 1 + Replicate_Rewrite_DB: + Channel_Name: master-2 + Master_TLS_Version: +2 rows in set (0.00 sec) +``` + +#### 7.验证 + +主服务器创建数据: + +```shell +[root@master-1 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 9 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> create database qfcloud; +Query OK, 1 row affected (0.00 sec) + +mysql> exit +Bye +``` + +其他服务器验证: + +```shell +[root@master-2 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 8 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| qfcloud | +| sys | ++--------------------+ +5 rows in set (0.00 sec) + +[root@slave-1 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 8 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| qfcloud | +| sys | ++--------------------+ +5 rows in set (0.00 sec) + +[root@slave-2 ~]# mysql -u root -pQianFeng@123 +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 7 +Server version: 5.7.39-log MySQL Community Server (GPL) + +Copyright (c) 2000, 2022, Oracle and/or its affiliates. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| qfcloud | +| sys | ++--------------------+ +5 rows in set (0.00 sec) +```