集群技术
集群概述
MySQL 复制技术
集群目的
负载均衡 解决高并发
高可用HA 服务可用性
远程灾备 数据有效性
类型
M
M-S
M-S-S...
M-M
M-M-S-S
概念
1. 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。
2. 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。
3. 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。
集群案例
环境
环境三部曲
1.全新服务器-互相通信
2.全新安装mysql57-分别安装
3.配置域名解析
注意
请重新安装多台数据库,不要克隆已经安装的数据。因为数据库的ID相同。
master1 10.18.41.54 192.168.232.138 systemctl start mysqld
master2 10.18.41.66 192.168.232.220 systemctl start mysqld
slave1 10.18.41.56 192.168.232.221 systemctl start mysqld
slave 2 10.18.41.69 192.168.232.222 systemctl start mysqld
建议 (可以使用host文件的形式,也可以使用DNS服务器解析.)
一主一从(M-S)(1)
主(master1)
准备数据1(验证主从同步使用) master1
create database master1db;
create table master1db.master1tab(name char(50));
insert into master1db.master1tab values (1111);
insert into master1db.master1tab values (2222);
开启二进制日志 master1
[root@localhost ~]# vim /etc/my.cnf
log_bin
server-id=1
[root@localhost ~]# systemctl restart mysqld ( 重启生效)
创建复制用户 master1
grant replication slave, replication
client on *.* to 'rep'@'10.18.41.%' identified by 'QianFeng@123';
备份master数据库的数据 master1
mysqldump -p'QianFeng@123' --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(验证主从同步使用) master1
insert into master1db.master1tab values (33333333);
insert into master1db.master1tab values (44444);
从(master2)
测试rep用户是否可用 master2
部署数据库应用
mysql -h master1 -urep -p'QianFeng@123' 预防账户问题。
启动服务器序号
[root@localhost ~]#vim /etc/my.cnf
server-id=2 服务器ID是必须设置的。
[root@localhost ~]# systemctl restart mysqld
mysql -uroot -p'QianFeng@123' (测试服务器是否修改正确。能否正常登)
手动同步数据
mysql> set sql_log_bin=0;
mysql> source /tmp/2020-1-1-mysql-full.sql
设置主服务器
mysql> change master to
master_host='master1',
master_user='rep',
master_password='QianFeng@123',
master_log_file='localhost-bin.000002',
master_log_pos=154;
注意,二进制日志的位置,应该参照主服务器备份时生成的新位置。
启动从设备
mysql> start slave;
查看启动状态(IO-YES/SQL-YES)
show slave status\G;