Mysql主从复制

介绍

MySQL数据库默认是支持主从复制的,底层基于MySQL数据库自带的 二进制日志 功能实现。

二进制日志: 也称为binlog,这是MySQL自带的一种日志功能,它会记录下所有的增删改语句,但是不记录查询语句。

主从复制原理:MySQL的主从复制其实就是由主库生成binlog,里面记录用户对数据库产生影响的操作。从库负责读取这个日志,并进行解析得到对应的SQL语句,然后在自己所在的服务器上执行,就可以得到跟主库一致的数据了。

Mysql主从复制_第1张图片  

MySQL复制过程分成三步:

  1. master将数据变更写入二进制日志

  2. slave将master的二进制日志拷贝到它的中继日志(relay log)

  3. 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,密码为Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限。
 #    常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
 GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
 ​
 # 在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='Root@123456', -- 上面账号的密码
     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主从复制_第2张图片

 得到这个结果,就代表你成功了

 

测试

到此为止,主从复制环境已经搭建好了,接下来,我们可以连接上两台MySQL服务器进行测试。

测试时,我们只需要在主库Master执行操作,查看从库Slave中是否将数据同步过去即可。

① 在master中创建数据库itcast, 刷新slave查看是否可以同步过去

Mysql主从复制_第3张图片

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

Mysql主从复制_第4张图片

 

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

Mysql主从复制_第5张图片

 

你可能感兴趣的:(微服务,mysql,数据库,服务器)