MySQL实现主从库,AB复制配置
AB复制是一种数据复制技术,是myslq数据库提供的一种高可用、高性能的解决方案。
AB复制的模式:
一主一从 、一主多从、双主、多主多从
复制的工作原理:
要想实现ab复制,那么前提是master上必须开启二进制日志
1)首先master将数据更新记录到二进制日志文件中
2)从slave start开始,slave通过I/O线程向master请求二进制日志文件,slave要知道向谁请求从哪个位置点请求
3)master接收到slave的I/O请求之后,就会从相应的位置点开始,给slave传日志
4)slave接收到日志后,会写入本地的中继日志中
5)slave通过sql线程读取中继日志中的内容,在数据库中执行相应的操作,到此为止,master和slave上的数据一致,之后slave服务器进入等待状态,等待master的后续更新
复制工作原理图:
配置说明:
安装配置
1.准备工作
1.关闭防火墙
2.关闭selinux
3.配置固定ip地址
4.配置好yum源
5.修改主机名
2.实验环境
master server:192.168.1.3 master.uplook.com #主数据库
slave server: 192.168.1.4 slave.uplook.com #从库
3.配置过程
master配置 (主库所在服务器)
1)安装软件
安装MySQL数据库(没有安装的可以看这个参照 https://www.cnblogs.com/pxblog/p/10529943.html)
2)修改主库服务器的配置文件
1 | vim /etc/my.cnf |
[mysqld]
log-bin=binlog //开启二进制日志
server-id=1 //指定服务id
3)启动服务
1 | systemctl start mysqld |
4)查看服务是否被监听
1 | netstat -tulnp | grep 3306 |
显示以下内容,说明启动成功(可能参数会有不同)
1 | tcp6 0 0 ::: 3306 :::* LISTEN 11156 /mysqld |
5)授权一个实现复制数据的用户 (出现问题,具体说明可以查看 https://www.cnblogs.com/pxblog/p/10721939.html)
1 | mysql> grant replication slave,replication client on *.* to 'repluser' @ '192.168.1.4' identified by '123456' ; |
在slave远程登陆 测试授权
1 | mysql -u repluser -h 192.168 . 1.3 -p123456 |
slave配置(从库所在服务器)
1)安装软件
(一样安装MySQL数据库)
2)修改配置文件
1 | vim /etc/my.cnf |
[mysqld]
server-id=2 //保证和主服务器不一致
3)启动服务
1 | systemctl start mysqld |
4)查看服务是否被监听
1 | netstat -tulnp | grep 3306 |
出现以下内容说明成功(可能参数会有不同)
1 | tcp6 0 0 ::: 3306 :::* LISTEN 11156 /mysqld |
5)在master(主库所在服务器)上查看,登录MySQL数据库
1 | mysql> show master status\G |
显示以下内容
*************************** 1. row ***************************
File: binlog.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
6)从库所在数据库操作,进入从库,在slave上同步数据,需要告诉slave从master的哪个位置开始同步 (以下参数每个人可能不一样)
1 2 3 4 | mysql> change master to master_host= '192.168.1.3' , master_port= 3306 ,master_user= 'repluser' , master_password= '123456' , master_log_file= 'binlog.000001' ,master_log_pos= 154 ; |
说明:
master_host:数据库服务器ip
master_port:数据库端口
master_user:用户
master_password:密码
master_log_file:值与上面的File的参数对应
master_log_pos:值与上面的Position的值一样
7)在启动从服务器
1 | mysql> start slave; |
Query OK, 0 rows affected (0.00 sec)
8)查看从服务器的状态
1 | mysql> show slave status\G; |
Slave_IO_Running: Yes //确保io和sql线程是yes
Slave_SQL_Running: Yes
测试:主从同步是否成功
在master上创建表插入数据
在slave上查看是否有该表
有表示主从同步完成
问题:
1.如果change语句有问题
mysql>slave stop;
change语句问题原因
1)可能多空格
2)关键字不正确
2.同步数据的账户无法连接主服务器
1)账户密码错误
2)无法远程登陆
给所有表加读锁
> flush tables with read lock;
解锁
> unlock tables;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-03-16 Centos不能上外网解决
2019-03-16 JAVA微信支付——PC二维码支付代码(WeChatPay.java 才是调用类)
2019-03-16 JAVA微信公众号网页开发 —— 用户授权获取openid和用户微信信息
2019-03-16 JAVA微信公众号网页开发 —— 接收微信服务器发送的消息