开源数据库MySQL DBA运维实战 第6章 集群(1)

目录

 

集群技术

集群概述

集群案例

环境

一主一从(M-S)(1)

主(master1)

从(master2)

一主一从(M-S)(2)

在主服务器上配置(master1)

在从服务器上配置(master2)


集群技术

集群概述

MySQL 复制技术

集群目的:负载均衡 ,解决高并发

                  高可用HA ,服务可用性

                  远程灾备,数据有效性

图示

开源数据库MySQL DBA运维实战 第6章 集群(1)

 类型

M-S       //一主一从

M-S-S...   //一主多从

M-M          //双主

M-M-S-S     //双主双从

原理图示

图示1

开源数据库MySQL DBA运维实战 第6章 集群(1)

图示2

开源数据库MySQL DBA运维实战 第6章 集群(1)

概念

1. 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。

2. 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。

3. 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。

集群案例

环境

环境三部曲

1.全新服务器-互相通信

2.全新安装mysql57-逐一安装

3.配置域名解析 :建议:可以使用host文件的形式,也可以使用DNS服务器解析。

4.请重新安装多台数据库,不要克隆已经安装的数据库。因为数据库的ID相同。我准备了如下四台:

master1  10.8.162.2                 systemctl start mysqld

master2  10.8.162.6                      systemctl start mysqld

slave 1    10.8.162.24                  systemctl start mysqld

slave 2     10.8.162.114                 systemctl start mysqld

一主一从(M-S)(1)

主(master1)

部署一台新mysql服务器。准备好域名解析。

准备数据1(验证主从同步使用

master1

create database master1db;

create table master1db.master1tab(name char(50));

insert into master1db.master1tab values (1111);

insert into master1db.master1tab values (2222);

开启二进制日志

[[email protected] ~]# vim /etc/my.cnf

开源数据库MySQL DBA运维实战 第6章 集群(1)

[[email protected] ~]# systemctl restart mysqld              //重启生效

创建复制用户(master1)

grant replication slave, replication
 client on *.* to 'rep'@'10.8.162%'      identified by '[email protected]';

备份master数据库的数据

mysqldump -p'[email protected]' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql

scp -r 2020-1-1-mysql-all.sql master2:/tmp             //发送给另一台主机同步数据用

观察二进制日志分割点

CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000002', MASTER_LOG_POS=154;

准备数据2(验证主从同步使用)

insert into master1db.master1tab values (33333333);

insert into master1db.master1tab values (44444);

从(master2)

测试rep用户是否可用

[[email protected] ~]# mysql -h master1 -urep -p'[email protected]'

开源数据库MySQL DBA运维实战 第6章 集群(1)

启动服务器序号

[[email protected] ~]# vim /etc/my.cnf

开源数据库MySQL DBA运维实战 第6章 集群(1)

[[email protected] ~]# systemctl restart mysqld

mysql -uroot -p'[email protected]'     //测试服务器是否修改正确。能否正常登陆。

开源数据库MySQL DBA运维实战 第6章 集群(1)

手动同步数据

mysql>  set sql_log_bin=0;

mysql>  source /tmp/2020-08-31-15-mysql-all.sql

设置主服务器

mysql> change master to
master_host='master1',
master_user='rep',
master_password='[email protected]',
master_log_file='localhost-bin.000002',
master_log_pos=154;

启动从设备

mysql> start slave;

查看启动状态(IO-YES/SQL-YES)

show slave status\G;

开源数据库MySQL DBA运维实战 第6章 集群(1)

返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。

开源数据库MySQL DBA运维实战 第6章 集群(1)

一主一从(M-S)(2)

实验2与上一个实验需求基本相同经。master1 作为主mysql,master2 作为从mysql。

不同之处,使用了
“gtid_mode=ON
enforce_gtid_consistency=1”
该属性自动记录position位置。不需要手动指定了。

环境

因与实验1功能相同

请重置master2数据库

systemctl stop mysqld

rm -rf /var/lib/mysql/*

systemctl start mysqld

grep password /var/log/mysqld.log

 mysqladmin -p'VsudOt+g%5Nw' password '[email protected]'

在主服务器上配置(master1)

1 启动二进制日志,服务器ID,GTID

[[email protected] ~]# vim /etc/my.cnf
 

开源数据库MySQL DBA运维实战 第6章 集群(1)

systemctl restart mysqld    
2 授权复制用户rep

grant replication slave,replication client on *.* to 'rep'@'192.168.122.%' identified by '[email protected]';

3 备份数据

mysqldump -p'[email protected]' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql

scp 2020-09-01-21-mysql-all.sql    master2:/tmp    

4 模拟数据变化

insert into master1db.master1tab values (6666666666);

开源数据库MySQL DBA运维实战 第6章 集群(1)

在从服务器上配置(master2)

1 测试rep用户是否可用 

mysql -h master1 -urep -p'[email protected]'

2 启动二进制日志,服务器ID,GTID

开源数据库MySQL DBA运维实战 第6章 集群(1)

systemctl restart mysqld     //测试配置是否有问题,如果启动失败。请检查配置。

3 还恢复手动同步数据

set sql_log_bin=0;

source /tmp/2020-09-01-21-mysql-all.sql

4 设置主服务器

mysql> change master to
master_host='master1',
master_user='rep',
master_password='[email protected]',
master_auto_position=1;

开源数据库MySQL DBA运维实战 第6章 集群(1)

start slave;

开源数据库MySQL DBA运维实战 第6章 集群(1)

show slave status\G;

开源数据库MySQL DBA运维实战 第6章 集群(1)

5 返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。

开源数据库MySQL DBA运维实战 第6章 集群(1)