MySQL主从复制

MySQL主从复制原理

MySQL主从复制_第1张图片

参照图片可知:主库将所有的写操作记录在binlog日志中,并生成log dump线程,将binlog日志传给从库的I/O线程。从库生成两个线程,一个是I/O线程,另一个是SQL线程I/O线程去请求主库的binlog日志,并将binlog日 志中的文件写入relay log(中继日志)中SQL线程会读取relay loy中的内容,并解析成具体的操作,来实现主从的操作一致,达到最终数据一致的目的。

简单来说就是  在主库进行的写操作,在从库中可读取出来。实现数据一致。

主从复制作用 :实时灾备,用于故障切换;读写分离,提供查询服务;备份,避免影响业务

MySQL主从复制搭建

1、环境

名称 IP port
M1 192.168.19.133 3307
M1S1 192.168.19.133 3308

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

2、修改配置文件

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

MySQL主从复制_第2张图片

修改主机的配置m1.cnf

MySQL主从复制_第3张图片

修改从机的配置m1s1.cnf

MySQL主从复制_第4张图片

配置文件修改后,复制到容器里面

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

测试连接

MySQL主从复制_第5张图片

3、执行SQL语句

进入主机里面执行相关配置

[root@node4 ~]# docker exec -it M1 bash

root@7de489e010fd:/# mysql -uroot -p123456

创建用户ren

给该用户授予权限 

赋予replication slave权限给 ren 用户,'replication slave' 则是一个必须而基本的权限,它直接授予slave服务器以该账户连接master后可以执行replicate操作的权利。

刷新权限 

使用M1 里面的ren 用户登录

MySQL主从复制_第6张图片

进入从机里面执行相关配置

MySQL主从复制_第7张图片

MySQL主从复制_第8张图片

重要:master_log_file:该文件具体叫什么名称,需要从主机里面去看看。进入M1 里面使用root 用户 登录M1,执行下面的SQL:show master status;

MySQL主从复制_第9张图片

启动主从 (在M1S1里面执行)

查询主从的状态(M1S1) 

MySQL主从复制_第10张图片

成功的标志: Slave_IO_Running和Slave_SQL_Running都为Yes

**搭建失败的原因**

测试主从同步

在M1 里面创建数据库,看M1S1 有没有复制过去

主库创建一个数据库:

# mysql -uroot -p -e 'create database test4;'

从库检查:

# mysql -uroot -p -e 'show databases;' |grep "test4"

MySQL主从复制_第11张图片

你可能感兴趣的:(运维,mysql,主从同步)