当前位置:网站首页>Mysql主从复制
Mysql主从复制
2022-07-23 18:07:00 【二王一个今】
介绍
MySQL数据库默认是支持主从复制的,底层基于MySQL数据库自带的 二进制日志 功能实现。
二进制日志: 也称为binlog,这是MySQL自带的一种日志功能,它会记录下所有的增删改语句,但是不记录查询语句。
主从复制原理:MySQL的主从复制其实就是由主库生成binlog,里面记录用户对数据库产生影响的操作。从库负责读取这个日志,并进行解析得到对应的SQL语句,然后在自己所在的服务器上执行,就可以得到跟主库一致的数据了。
MySQL复制过程分成三步:
master将数据变更写入二进制日志
slave将master的二进制日志拷贝到它的中继日志(relay log)
slave重做中继日志中的事件,生成对应的数据存储到自己的数据区
实现
实现MySQL的主从复制其实非常简单,只需要对MySQL进行简单的配置即可
① 准备服务器
提前准备两台服务器,并且在服务器中安装MySQL,服务器的信息如下:
| 数据库 | IP | 数据库版本 |
|---|---|---|
| Master | 192.168.136.129 | 5.5.49-log |
| Slave | 192.168.136.130 | 5.5.49-log |
==第一台可以直接使用前面一天的,然后重新安装一台Linux操作系统,然后在上面仅仅部署mysql即可==
② 防火墙设置
分别修改两台服务器的防火墙策略,放行3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload firewall-cmd --zone=public --list-ports
③ 主库配置
下面操作仅仅在master库上执行[1. 开启二进制日志 2.创建账户]
# 1. 修改mysql的配置文件/etc/my.cnf,保证下面两项
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志(当前默认已开启)
server-id=1 #[必须]服务器唯一ID(当前默认就是1)
# 2. 重启mysql服务
systemctl restart mysql
# 3. 登录mysql
mysql -uroot -proot
# 4. 在mysql命令行中,创建数据同步的用户并授权
# 本操作会在mysql中创建一个账户xiaoming,密码为[email protected],并且给xiaoming用户授予REPLICATION SLAVE权限。
# 常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by '[email protected]';
# 在mysql命令行中,查看master同步状态
show master status;
==注:截图就是Master的当前状态,执行完此SQL后,在主从复制完成之前这段时间,不能再执行其他操作==
④ 从库配置
下面操作仅仅在slave库上执行
# 1. 修改mysql的配置文件/etc/my.cnf,保证下面两项
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志(当前默认已开启)
server-id=2 #[必须]服务器唯一ID(当前默认1,必须手动修改成2)
# 2. 重启mysql服务
systemctl restart mysql
# 3. 登录mysql
mysql -uroot -proot
# 4. 在mysql命令行中,执行复制的操作
# 注意,这条命令中各项参数,需要根据实际情况进行修改
change master to
master_host='192.168.136.129', -- 主节点ip地址
master_user='xiaoming', -- 主节点创建的用于主从复制的账号
master_password='[email protected]', -- 上面账号的密码
master_log_file='mysql-bin.000002', -- 从主节点哪个日志文件开始同步
master_log_pos=258; -- 从主节点日志文件的哪个位置开始同步
# 5. 在mysql命令行中,开始复制操作
# 启动I/O线程从主库读取binlog,并存储到relaylog中继日志文件中。
# 启动SQL线程读取中继日志,解析后在从库重放。
start slave;
# 6. 在mysql命令行中,查看主从复制的状态
show slave status\G;这个里面的 有个注意点,不用瞎写,直接上下一样就好。

得到这个结果,就代表你成功了
测试
到此为止,主从复制环境已经搭建好了,接下来,我们可以连接上两台MySQL服务器进行测试。
测试时,我们只需要在主库Master执行操作,查看从库Slave中是否将数据同步过去即可。
① 在master中创建数据库itcast, 刷新slave查看是否可以同步过去

② 在master的itcast数据下创建user表, 刷新slave查看是否可以同步过去

③ 在master的user表中插入一条数据, 刷新slave查看是否可以同步过去

边栏推荐
猜你喜欢
随机推荐
(干货)结合Scikit-learn介绍几种常用的特征选择方法
not all arguments converted during string formatting
某些题目对应的智慧数据总结
LeetCode每日一题(1514. Path with Maximum Probability)
Weights & Biases (一)
Monotonic queue optimization DP
Lendingclub loan status business details current, charge off, issued, full paid, grace period
ACM mm 2022 oral | dig: the new framework of self-monitoring character recognition refreshes the recognition performance of 11 public scene character data sets, with an average improvement of 5%
R语言ggpubr包的ggarrange函数多幅图像组合起来、annotate_figure组合图像添加注释、注解、标注信息、使用top参数在可视化图像顶部添加注解信息(自定义字体颜色、大小、样式)
A preliminary study of the relationship between combinatorial mathematics and DP, and the derivation of resettable combinatorial formulas
PowerCLi 添加esxi主机到vCenter
Calculation of structure size (structure memory alignment)
Idea select code generation method
三维点云课程(六)——三维目标检测
socat 使用「建议收藏」
H7-TOOL的CANFD/CAN接口脱机烧写操作说明, 已经更新(2022-07-12)
There is great competition pressure for software testing jobs, and the "migrant workers" who graduated from 985 also suffer
Four principles of interface design
elk笔记25--快速体验APM
R语言使用tidyr包的gather函数将从宽表转化为长表(宽表转化为长表)、第一个参数指定原多个数据列名称生成的新数据列名称、第二个参数指定原表内容值、第三个和第四个参数指定不变的列名称列表



![[machine learning] Wu Enda: lifelong learning](/img/f2/a729c026ed55506e63878d0d317676.jpg)





