集群目的:
负载均衡:解决高并发
高可用HA:服务可用性
远程灾备:数据有效性
1.在主库上把数据更改记录到二进制日志中。
2.备库I/O线程将主库上的二进制日志复制到备库的中继日志中。
3.备库SQL线程读取中继日志中的事件,将其重放到备库数据库上。
环境:1.全新服务器-互相通信
2.全新安装mysql57-分别安装
3.配置域名解析
注意:请重新安装多台数据库,不要克隆已经安装的数据,因为数据库的ID相同;关闭防火墙和selinux
master1:192.168.137.4
master2:192.168.137.5
slaves1: 192.168.137.6
slaves2: 192.168.137.7
一主一从(M-S)(1)
主(master1):
部署一台新的mysql服务器,准备好域名解析(修改host文件或者使用DNS服务器)
准备一些数据(用来验证主从同步使用)
create database master1db; create table master1tab(name char(50)); insert into master1tab values("houzhengrong"); insert into master1tab values("gaoyuchuan");
开启二进制日志
vim /etc/my.cnf log_bin server-id=1 systemctl restart mysqld //重启生效
创建复制用户(不能使用root用户来搞,给用户授权)
grant replication slave,replication client on *.* to 'rep'@'192.168.137.%' identified by 'Rep@5201314';
备份master数据库的数据
mysqldump -uroot -p'Hzr@5201314' --all-databases --single-transaction --master-data=2 --flush-logs > /backup/`date +%F-%H`mysql-all.sql scp -r /backup/2021-11-21-16mysql-all.sql master2:/backup //发送给另一台主机 观察二进制日志分割点(2021-11-21-16mysql-all.sql 这个文件第22行) -- CHANGE MASTER TO MASTER_LOG_FILE='houzhengrong-bin.000002', MASTER_LOG_POS=154;
准备数据2(验证主从同步使用)
insert into master1db.master1tab values("rongrong"); insert into master1db.master1tab values("chuanchuan");
从(master2):
测试rep用户是否可用
部署数据库应用 mysql -h master1 -urep -p'Rep@5201314'
启动服务器序号
vim /etc/my.cnf server-id=2 systemctl restart mysqld mysql -uroot -p'Hzr@5201314'
手动同步数据
set sql_log_bin=0; source /backup/2021-11-21-16mysql-all.sql
设置主服务器
change master to master_host='master1',master_user='rep',master_password='Rep@5201314',master_log_file='houzhengrong-bin.000002',master_log_pos=154;
启动从设备
start slave;
查看启动状态
show slave status\G
返回主服务器添加数据,测试从服务器是否同步
一主一从(M-S)(2)
与第一种方法的不同之处在于使用了“gtid_mode=ON enforce_gtid_consistency=1”,该属性自动记录position位置,不需要手动指定
环境只需要把master2服务器重置一下
systemctl stop mysqld rm -rf /var/lib/mysql/* systemctl restart mysqld grep password /var/log/mysqld.log mysqladmin -uroot -p'查找的密码' password ''
主(master1):
1.启动二进制日志,服务器ID,GTID
vim /etc/my.cnf log_bin server-id=1 gtid_mode=ON enforce_gtid_consistency=1 systemctl restart mysqld
2.授权复制用户rep
grant replication slave,replication client on *.* to 'rep'@'192.168.137.%' identified by 'Rep@5201314'; flush privileges;
3.备份数据
mysqldump -uroot -p'Hzr@5201314' --all-databases --single-transaction --master-data=2 --flush-logs > /backup/`date +%F-%H`mysql-all.sql scp -r /backup/2021-11-23-20mysql-all.sql master2:/backup //发送给另一台主机
4.模拟数据变化
insert into master1db.master1tab values("chuanchuan");
从(master2):
1.测试rep用户是否可用
mysql -urep -p'Rep@5201314' -h master1
2.启动二进制日志,服务器ID,GTID
vim /etc/my.cnf log_bin server-id=2 gtid_mode=ON enforce_gtid_consistency=1 systemctl restart mysqld
3.手动恢复同步数据
set sql_log_bin=0; source /backup/2021-11-23-20mysql-all.sql select * from master1db.master1tab;
4.设置主服务器
change master to master_host='master1',master_user='rep',master_password='Rep@5201314',master_auto_position=1;
5.启动从设备
start slave;