Mysql主从复制搭建

百般思念 提交于 2020-04-06 11:31:54

1.mysql主库会把所有的写操作记录在binlog日志中,并且生成log dump线程,将binlog日志传给从库的I/O线程,从库生成两个线程,一个是I/O线程,另外一个是SQL线程。

主将更改操作记录到binlog里从将主的binlog事件(sql语句) 同步本机上并记录在relaylog里从根据relaylog里面的sql语句按顺序执行。

2.主从复制步骤:

  • 确保从数据库与主数据库里的数据一致
  • 在主数据库里创建一个同步账户授权给从数据库使用
  • 配置主数据库(修改配置文件)
  • 配置从数据库(修改配置文件)
  • 一主一从
  • 主主复制
  • 一主多从---扩展系统读取的性能,因为读是在从库读取的
  • 多主一从---5.7版本开始支持
  • 联级复制

3.需求:

搭建两台MYSQL服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读操作。

4.环境说明【使用docker启动两个】

名称	Ip	Port
M1		192.168.149.128 	3307
M1S1	192.168.149.128 	3308

5.安装【阿里云需要放掉端口3307,3308,本机关闭防火墙即可】

docker run --name M1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run --name M1S1 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

6.修改配置文件

*** 一、将容器里面的配置文件复制出来,主要修改服务器的配置。  
# 1.在root目录下创建一个mysqlms的目录存放从docker容器里面复制过来的配置文件。

mkdir mysqlms
docker cp M1:/etc/mysql/conf.d/docker.cnf m1.cnf 
docker cp M1S1:/etc/mysql/conf.d/docker.cnf m1s1.cnf

# 2.配置主机:主机里面要记录sql 语句,以后从机会把该sql 语句偷过去
vi m1.cnf
server-id=1
log-bin=master.bin
# 3.配置从机:
vi  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

*** 三、重启
docker restart M1 M1S1

7.配置主机:执行sql

7.1 进入主机,执行配置
docker exec -it M1 bash
mysql -uroot -p123456

7.2 创建账户
create user 'rep'@'%' identified by '123456';

7.3 给该用户授予权限:
grant replication slave on *.* to 'rep'@'%';
flush privileges

7.4  至此:M1 里面已经创建了一个用户:rep 123456 拥有所以库,所有表replication slave  
尝试使用M1 里面的rep 用户登录:

8.配置从机:执行sql

8.1 配置登录
docker exec -it M1S1 bash;
mysql -u root -p123456;

8.2 从机执行
change master to master_host="127.0.0.1",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=745;

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

8.3 启动主从,查询状态 有两个yes
start slave;
show slave status \G;

8.4 规范如下:
1 只能在主机里面执行DML 语句,绝对不能在【从机】里面执行DML语句【会破坏主从】
2 只在从机里面可以执行查询语句
3 主机只有一台,但是从机可以有多台

9.测试

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!