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,密码为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服务器进行测试。
测试时,我们只需要在主库Master执行操作,查看从库Slave中是否将数据同步过去即可。
① 在master中创建数据库itcast, 刷新slave查看是否可以同步过去
② 在master的itcast数据下创建user表, 刷新slave查看是否可以同步过去
③ 在master的user表中插入一条数据, 刷新slave查看是否可以同步过去