九、主从集群+一主一从(两种方法)
1.数据库集群
集群概述——mysql复制技术
集群目的
负载均衡 解决高并发
高可用HA 服务可用性
远程灾备 数据有效性
图示
类型
1.一主
2.一主一从
3.一主多从
4.双主
5.双主多从
原理图示
实战1-一主一从(1)
布置环境
1.建立4台全新的服务器-互相通信
2.安装全新的mysql57-分别安装
3.配置域名解析 我这里分别是132 133 134 135
注意:请重新安装多台数据库,不要把数据库也克隆,否则数据库id相同无法进行实战。
域名解析命名方法
在每台服务器都打上
vim /etc/hosts
192.168.156.132 master1
192.168.156.133 master2
192.168.156.134 slave1
192.168.156.135 slave2
:wq
ping slave2
ping slave1
ping master2
ping master1
都能ping成功的话,就可以了
1.M-S 一主一从
·主master1
部署一台mysql服务器。准备好域名解析
准备数据1(验证主从同步使用)
mysql -uroot -p'Qianfeng@123'
create database master1db;
use master1db;
create table master1tab (name char(50));
insert into master1tab values('zhangsan'),('lisi');
select * from master1tab;
\q
开启二进制日志
systemctl stop mysqld 关闭mysql服务
vim /etc/my.cnf 编辑
log_bin 开启二进制日志
server-id=1 给服务器一个id
:wq 保存
systemctl start mysqld 开启mysql服务
创建复制用户
grant replication slave,replication on *.* to 'rep'@'192.168.56.%' identified by 'Qianfeng@123';
\q
准备master数据库的数据
mysqldump -p'Qianfeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-allQianfeng.sql
ls
scp -r 2022-01-21-14-mysql-allQianfeng.sql master2:/tmp
去matser2服务器
ls /tmp/
vim /tmp/2022-01-21-14-mysql-allQianfeng.sql
第22行
:wq
这一步是很必要的,这里说明了bin只记录到了哪里,因为主服务器会一直有数据写入。
准备数据2(验证主从同步使用)
去master1服务器
mysql -uroot -p'Qianfeng@123'
insert into master1db.master1tab values ('wangwu');
select * from master1db.master1tab;
这样模拟主数据库的数据发生了变动
·从master2
测试rep用户是否可用
mysql -h master1 -urep -p'Qianfeng@123'
show databases;
\q
启动服务器序号
systemctl stop myaqld
vim /etc/my.cnf
server-id=2
systemctl start mysqld
mysql -uroot -p'Qianfeng@123'
show databases;
手动同步数据
set sql_log_bin=0;
source /tmp/2022-01-21-14-mysql-allQianfeng.sql
select * from master1db.master1tab;
备份的时候就是只有张三和李四
设置主服务器
change master to master_host='master1',master_user='rep',master_password='Qianfeng@123',master_log_bin='localhost-bin.000003',master_log_pos=154; 改变主人-主人主机是master1,主人用户是rep,主人密码是Qianfeng@123,主人二进制文件是000003,行数是154行。
strat slave; 开启奴隶模式
select * from master1db.master1tab;
实战成功,之后主服务器数据改动,从服务器也会同步。 如果有问题可以看看从服务器的绑定情况show slave status\G 如果只有一个1.row就是主服务器的,slave_io_running和slave_sql_running是否yes等等。
实战2-一主一从(2) 另外一种
环境
重置master2数据库
systemctl stop mysql
rm -rf /var/lib/mysql*
systemctl start mysqld
grep password /var/log/mysqld.log
mysqladmin -uroot -p'=.<udCifq41,' password 'Qianfeng@123'
mysql -uroot -p'Qianfeng@123'
\q
主服务器
启动二进制日志。服务器ID,GTID
systemctl stop mysqld
vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
:wq
systemctl restart mysqld
授权复制用户rep
(看上个实战)
备份数据
mysqldump -p'Qianfeng@123' --all-databases --single-transaction --masert-data=2 --flush-logs > `data +%F-%H`-mysql-allQianfeng.sql
scp 2022-01-22-16-mysql-allQianfeng.sql master2:/tmp
模拟数据变化
mysql -uroot -p'Qianfeng@123'
select * from master1db.master1tab;
insert into master1db.master1tab values (77777);
从服务器
观察rep用户能不能开启
mysql -h master1 -urep -p'Qianfeng@123'
:wq
启动二进制日志,服务器id,GTID
systemctl stop mysqld
vim /etc/my.cnf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
:wq
systemctl restart mysqld
恢复手动同步数据
mysql -uroot -p'Qianfeng@123'
set sql_log_bin=0; 临时关闭mysql的二进制日志文件,退出登录及恢复
source /tmp/2022-01-22-16-mysql-allQianfeng.sql
select * from master1db.master1tab;
设定主服务器
change master to master_host='master1',master_user='rep',master_password='Qianfeng@123',master_auto_position=1; 自动进行日志记录
start slave; 开启奴隶模式
select * from master1db.master1tab;
这种自动化配置容易出错,越自动越容易出现不可预估的问题。手动方法麻烦但是简单和稳定。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具