前言
主从复制原理图
原理描述:
- master 主库记录数据的更新信息(create,insert,update,delete,drop)到binlog中。
- slave 从库在一定时间间隔内如果发现master的binlog发生改变,则开启一个I/O线程请求master的binlog;
- 主库会生成一个log dump线程,根据从库的请求,会把binlog传给从库I/O线程;
- 从库的I/O线程把读取到的binlog写入到relay log(中继日志)中;
- 从库的SQL线程会读取relay log文件中的日志,并解析成sql语句逐一执行;
1、环境信息准备
主机 | 角色 |
192.168.0.169 | 主机 |
192.168.0.179 | 从机 |
2、修改主机my.cnf的配置信息
vi /etc/my.cnf //编辑my.cnf文件
加入以下配置信息(修改完成后 重启数据库-主库)
#修改service-id 一般是ip最后一段
server-id = 169
#开启二进制日志
log-bin = mysql-bin
#选择row模式 (STATEMENT, ROW, MIXED)
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=test
#不同步mysql系统数据库
binlog-ignore-db=mysql
3、修改从机my.cnf的配置信息
vi /etc/my.cnf //编辑my.cnf文件
加入以下配置信息(修改完成后 重启数据库-从库),你可以只修改service-id,不用开启binlog
#修改service-id 一般是ip最后一段
server-id = 179
#开启二进制日志
log-bin = mysql-bin
#选择row模式 (STATEMENT, ROW, MIXED)
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=test
#不同步mysql系统数据库
binlog-ignore-db=mysql
# log_slave_updates开启标识,从库同步的数据会写入binlog
# log_slave_updates = 1
重启从库!
4、查看主库master信息
#登录主机的mysql
mysql -uroot -p
#查看master状态
show master status;
记住这里的file和Position信息,后面从库的配置要使用
5、主库中创建用户信息并授权,用来作为从库连接主库做数据复制
# s1是用户名, %代表从任意远程主机登陆,如果你想只有从机能登陆就写成从库主机ip
CREATE USER 's1'@'%' IDENTIFIED BY '你的密码';
#授权
GRANT REPLICATION SLAVE ON *.* TO 's1'@'%';
可以查看你创建的用户
#使用系统库
use mysql;
#查看系统用户信息
select user, host from user;
#删除用户信息的脚本语句
drop user '用户名'@'授权访问的网络';
6、从库配置
#登录mysql
mysql -uroot -p
#执行命令(MASTER_HOST主机地址,MASTER_USER:上面创建的用户,MASTER_LOG_FILE和MASTER_LOG_POS 就是上面show master记录的信息)
CHANGE MASTER TO
MASTER_HOST='192.168.0.169',
MASTER_USER='s1',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=156;
7、 查看从库状态
SHOW SLAVE STATUS\G
什么鬼没有连接上,报 Authentication requires secure connection. 回到主库,执行下面命令
ALTER USER 's1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
再试下 SHOW SLAVE STATUS\G
成功了!
8、测试
主库169创建一个user_info表,179会同步创建user_info表
往169的user_info表中插入一条数据, 179也同步了相同数据
最后
本次的主从复制已搭建成功