一、集群技术
1、mysql 复制技术
(1) 集群目的
负载均衡 → 解决高并发(数据同时共享)
高可用 HA → 服务可用性(解决服务器性能)
远程灾备 → 数据有效性
(2) 原理
主服务器启动二进制日志文件,数据更改的操作 (DDL、DML、DCL) 都会记录在二进制日志文件 (binlog) 中;
从服务器启动两个线程:I/O 线程和 SQL 线程。I/O 线程会读取主服务器二进制日志文件上的变更操作,记录在自己的中继日志 (Relay log) 中;
从服务器上的 SQL 线程会读取中继日志,并把数据重放到数据库里,实现主服务器和从服务器的数据同步。
(3) 集群准备
准备四台虚拟机(双主双从),分别修改域名,测试连通性,再安装数据库
vim /etc/hosts 添加域名
测试连通性:
二、集群案例
1、一主一丛
(1) 主服务器配置
① 在主服务器中准备一些数据
② 开启主服务器的二进制日志
vim /etc/my.cnf
配置后重启数据库,再进入数据库查看二进制日志是否开启
③ 创建复制用户(让从服务器以此身份与主服务器同步)
grant replication slave,replication client on *.* to 'bean'@'192.168.198.%' ;
( 如果主服务数据库有设置命令,这条命令还得跟上 identified by '密码')
这条命令是将 "replication slave" 和 "replication client" 权限授予用户名为 'bean',且IP地址符合 '192.168.198.%' 这个模式的用户。这个用户可以连接到MySQL服务器作为从属服务器,获取复制数据和状态信息。
④ 备份主服务器数据库的数据
mysqldump --all-databases --single-transaction --master-data=2 --flush-logs > /backup/`date +%F`-mysql-all.sql
将备份的数据拷到 master2 的目录下:
scp -r /backup/2023-08-21-mysql-all.sql master2:/tmp
观察二进制日志分割点:
备份后主服务器再增添新数据,这些新数据不会存在在备份文件中:
(2) 从服务器配置
① 测试复制用户是否可用
mysql -h master1 -ubean:-h master1 表示登录点为 matser1
② 启动服务器序号
vim /etc/my.cnf
server-id=2
添加完序号后重启数据库,并登录查看数据库能否正常启动
③ 手动同步数据
set sql_log_bin=0; (暂停记录二进制日志)
source /tmp/2023-08-21-mysql-all.sql(主服务器上的数据拷贝进从服务器)
查看数据:
④ 设置主服务器进行同步更新
查看之前的备份文件可以知道二进制日志文件及截断点:
为从服务器设置主服务器:
change master to master_host='master1',master_user='bean',master_log_file='bin-log.000003',master_log_pos=245;
启动从设备:start slave;
返回主服务器(master1)更新数据,观察从服务器(master2)是否同步:
2、双主双从
1、双主设置
若只进行主服务器单节点设置,主服务器故障会影响全局的事件写入。
设置方法:两台 master 互相设置为对方的主服务器。
2、双从设置
① 同步现有数据库:
主服务器:
备份 master1 的数据库给 slave1:
mysqldump --all-databases --single-transaction --master-data=2 --flush-logs > /backup/`date +%F-%H`-mysql-all.sql
将备份传给从服务器 slave1:
scp -r /backup/2023-08-23-15-mysql-all.sql slave1:/tmp
从服务器:
数据库写入备份文件
mysql < /tmp/2023-08-23-15-mysql-all.sql
开启从服务器的 id,并重启数据库:
slave1:server-id=3
② 为从服务器设置主服务器:
change master to master_host='master1',master_user='bean',master_log_file='bin-log.000017',master_log_pos=245;
开启从服务器模式:start slave;
查看从属状态:
slave2 的配置也同理。配置完毕后可以在数据库添加数据查看是否同步。