一、集群技术
1.集群概述
mysql复制技术
集群目的
- 负载均衡:解决高并发
- 高可用HA:服务可用性
- 远程灾害:数据有效性
图示
类型
- M
- M-S
- M-S-S...
- M-M
- M-M-S-S
原理图示
图示
概念
1.在主库上把数据更改 (DDL DML DCL) 记录到二进制日志 (BinaryLog) 中。
2.备库/0线程将主库上的日志复制到自己的中继日志 ( Relay Log) 中。3.备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。
2.集群案例
1.环境
环境三部曲
1.全新服务器-互相通信
2.全新安装mysql57-分别安装
3.配置域名解析
192.168.64.140 master1
192.168.64.141 master2
192.168.64.142 slave1
192.168.64.143 slave2
2.一主一从(M-S)(1)
主
部署一台新mysql服务器,准备好域名解析
准备数据
create database master1db;
create table master1db.master1tab(name char(50);
insert into master1db.master1tab values(1111);
insert into master1db.master1tab values(2222);
1.开启二进制日志
vim /etc/my.cnf
log_bin
server-id=1
systemctl restart mysqld 重启生效
2.创建复制用户
grant replication slave,replication client on *.* to 'rep'@'192.168.64.%' identified by 'Root123@'
flush privileges
3.备份master数据库的数据
mysqldump -p'Root123@' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
scp 2020...... master2:/tmp
观察二进制日志分割点
CHANGE MASTER TO MASTER_LOG_FILE='192-bin.000003', MASTER_LOG_POS=154;
4.准备数据2(验证主从同步使用)
insert into master1db.master1tab values(1111);
insert into master1db.master1tab values(2222);
从
1.测试rep用户是否可用----master2
部署数据库应用
mysql -h master1 -urep -p'Root123@'
2.启动服务器序号
vim /etc/my.conf
server-id=2
systemctl restart mysqld
mysql -uroot -p'Root123@' 测试服务器是否修改正确,能否正常登陆
3.手动同步数据
set sql_log_bin=0;
source /tmp/2024...sql
4.设置主服务器
mysql> change master to
master_host='master1',
master_user='rep',
master_password='Root123@',
master_log_file='192-bin.000003';
master_log_pos=154;
启动从设备
start slave;
查看启动状态
show slave status\G;
5.返回服务器(master1)更新数据,再从服务器(master2)观察是否同步
3.一主一从(M-S)(2)
请重置master2数据库
systemctl stop mysqld
rm -rf /var/lib/mysql/*
system start mysqld
grep password /var/log/mysqld.log
mysqladmin -uroot -p'' password 'Root123@'
主
1.启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
systemctl restart mysqld
2.授权复制用户req(略)
grant replication slave,replication client on *.* to 'rep'@'192.168.64.%' identified by 'Root123@';
flush privileges
3.备份数据
mysqldump -p'Root123@' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
scp 2020...... master2:/tmp
4.模拟数据变化
insert into master1db.master1tab values(3333333);
从
1.测试rep用户是否可用----master2
mysql -h master1 -urep -p'Root123@'
2.启动二进制日志,服务器ID,GTID
vim /etc/my.conf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
systemctl restart mysqld
3.恢复手动同步数据
set sql_log_bin=0;
source /tmp/2024...sql
select * from master1db.master1tab;
4.设置主服务器
mysql> change master to
master_host='master1',
master_user='rep',
master_password='Root123@',
master_auto_position=1;
start slave;
show slave status\G;
5.返回服务器(master1)更新数据,再从服务器(master2)观察是否同步
4.双主双从(MM-SS)
前边的实验,主服务器单节点设置,例如主服务器故障会影响全局的写入事件,故设置双主
目前:已经设置了master1为master2的主服务器
只需要设置master2为master1的主服务器
双主(MM)
1..在master2上进行授权
grant replication slave,replication client on *.* to 'rep'@'192.168.64.%' identified by 'Root123@';
flush privileges;
2.在master1上进行如下操作
mysql> change master to
master_host='master2',
master_user='rep',
master_password='Root123@',
master_auto_position=1;
start slave;
show slave status\G;
测试
双从(SS)
1.同步现有数据库
master1
mysqldump -p'Root123@' --all-databases --single-transaction --master-data=2 --flush-logs>`date +%F`-mysql-all.sql
scp -r 2024..mysql-all.sql slave1:/tmp
scp -r 2024..mysql-all.sql slave2:/tmp
slave1 mysql -p'Root123@' < /tmp/2024..mysql-all.sql
slave2 mysql -p'Root123@' < /tmp/2024..mysql-all.sql
2.启动从服务器ID,gtid
slave1
vim /etc/my.conf
server-id=3 标识符
gtid_mode=ON 开启
enforce_gtid_consistency=1
master-info-repository=TABLE 把主信息存进来
relay-log-info-repository=TABLE 中继日志叶存过来
systemctl restart mysqld
slave2
vim /etc/my.conf
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
systemctl restart mysqld
3.设置主服务器
slave1
mysql> change master to
master_host='master1',
master_user='rep',
master_password='Root123@',
master_auto_position=1 for channel 'master1';
mysql> change master to
master_host='master2',
master_user='rep',
master_password='Root123@',
master_auto_position=1 for channel 'master2';
start slave;
show slave status\G;
slave2
mysql> change master to
master_host='master1',
master_user='rep',
master_password='Root123@',
master_auto_position=1 for channel 'master1';
mysql> change master to
master_host='master2',
master_user='rep',
master_password='Root123@',
master_auto_position=1 for channel 'master2';
start slave;
show slave status\G;
4.测试
二、代理技术
1.代理简介
名词:DB Proxy,数据库中间件
功能:
1.读写分离 M-S M-M S-S
2.负载均衡
3.支持数据的分片自动路由和聚合
2.MyCat实战