主从复制原理
Master的事件会按照顺序写入binary-log中。当Slave连接到Master的后,Master机器会为Slave开启binlog dump线程,该线程会去读取bin-log日志。在Slave连接到Master后,Slave库有一个I/O线程 通过请求log dump thread读取binary-log日志,然后写入从库的relay-log日志中。Slave还有一个 SQL线程,实时监控 relay-log日志内容是否有更新,解析文件中的SQL语句,在Slave数据库中去执行。
主从复制配置步骤
启动docker
systemctl start docker
搭配环境
docker run --name M1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1
docker run --name M1S1 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1
修改配置文件
mkdir /mysqlms
cd /mysqlms
docker cp M1:/etc/mysql/conf.d/docker.cnf m1.cnf
docker cp M1S1:/etc/mysql/conf.d/docker.cnf m1s1.cnf
配置主机m1.cnf
vim m1.cnf
在其中添加
server-id=1
log-bin=master.bin
配置从机m1s1.cnf
vim m1s1.cnf
在其中添加
server-id=2
配置文件修改后,复制到容器里面
docker cp m1.cnf M1:/etc/mysql/conf.d/docker.cnf
docker cp m1s1.cnf M1S1:/etc/mysql/conf.d/docker.cnf
重启MySQL(m1,m1s1)
docker restart M1 M1S1
进入主机里面执行相关配置
docker exec -it M1 bash
mysql -uroot -p123456
创建用户
create user 'rep'@'%' identified by '123456';
给该用户授予权限
grant replication slave on *.* to 'rep'@'%';
刷新权限
flush privileges;
使用M1 里面的rep 用户登录
mysql -urep -p123456
进入从机里面执行相关配置
docker exec -it M1S1 bash
mysql -uroot -p123456
change master to
master_host="192.168.100.128",master_port=3307,
master_user="rep",
master_password="123456",
master_log_file="master.000001",
master_log_pos=745;
进入M1 里面使用root 用户登录M1查看master_log_file
show master status;
启动主从:(在M1S1里面执行)
start slave ;
查询主从的状态(M1S1)
show slave status \G
当出现
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
即为成功