生活不易 我用pythonSQL极简教程 · MySQL · MyBatis · JPA 技术笔记 教程 总结大数据&云计算

MySQL主从复制

2019-11-30  本文已影响0人  烤奶要加冰

什么是主从复制?

指的是一台MySQL数据库服务器当主机,另一台或多台数据库服务器当从机,主机负责主要写入数据,从机负责只能读取数据。

主从复制的原理是什么?

MySQL服务器之间的主从复制主要是通过二进制日志文件实现的,主机负责使用二进制日志文件记录数据库数据的变化情况,而从机通过读取和执行二进制日志文件来保持与主机的数据一致。

主从复制有什么优点?

MySQL主从复制流程

下面流程是在阿里云服务器中配置,使用了docker拉取MySQL镜像,创建两个不同端口的MySQL容器。

①准备两台MySQL服务器(一台作为主机,另一台作为从机)
sudo docker run --name mysql_master -p 3307:3306  -d mysql:5.7.22 -e 
MYSQL_ROOT_PASSWORD=123456 

mysql:5.7.22:表示拉取镜像的版本,建议使用5.7版本,比较稳定。
MYSQL_ROOT_PASSWORD:表示设置数据库的密码,创建时一定要自定义密码。
-p:表示绑定端口,冒号前是可以通过外网访问的端口,冒号后是数据库服务的端口。

tips:自己的服务器中不会创建新的端口,需要自己去添加新的端口才能创建成功。

sudo docker run --name mysql_slave -p 3308:3306 -d mysql:5.7.22 -e 
MYSQL_ROOT_PASSWORD=123456 
sudo docker ps

若可以看到刚刚创建的容器,并正在运行中,则表示创建成功;否则,删除容器重新创建。


②配置主服务器
sudo docker exec -it mysql_master /bin/bash
# 在末尾加上两个配置

## 设置server_id,一般设置为IP的最后一位,同一局域网内注意要唯一
server_id = 3

## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin = edu-mysql-bin

log-bin:表示开启二进制日志功能,名字取得要有意义(关键配置)
server_id:主机的id,这个的值一定要是唯一的。

tips:若没有vim命令,则需要进行安装。
①apt-get update
②apt install vim

service mysql restart
docker container start mysql_master
mysql -u root -p -h xx.xxx.xxx.xxx --port=3307

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 

-h:该参数的值需要更改,改为自己服务器的外网ip地址

③ 配置slave服务器
sudo docker exec -it mysql_slave /bin/bash
# 在末尾加上两个配置

## 设置server_id,一般设置为IP的最后一位,同一局域网内注意要唯一
server_id = 4

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin = edu-mysql-bin

tips:在slave中,可以不用配置参数 log-bin,若要配置必须要与主机的值相同。该参数的作用:当主机宕机时,会选择参数中配置该参数的从机作为新的主机。

service mysql restart

docker container start mysql_slave
④完成Master和Slave链接
mysql -u root -p -h xx.xxx.xxx.xxx --port=3307

show master status;

注意:记录下 File 和 Position 字段的值,后面需要使用
mysql -u root -p -h xx.xxx.xxx.xxx --port=3308

change master to master_host='xx.xxx.xxx.xxx', master_user='slave', master_password='123456', 
master_port=3307, master_log_file='edu-mysql-bin.000001', master_log_pos=34659, 
master_connect_retry=30;

master_host: Master 的IP地址
master_user: 在 Master 中授权的用于数据同步的用户
master_password:同步数据的用户的密码
master_port: Master 的数据库的端口号
master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值

show slave status \G;

Slave_IO_RunningSlave_SQL_Running的值都为No时,表示还没有开始复制过程,若都为Yes则表示开始复制过程。
start slave;

tips:测试方法,使用Navicat分别连接主从数据库,在主机写入数据,当从机同步到主机数据时,则表示主从复制成功。



相关文章:
Django实现读写分离教程
打开MySQL数据库日志文件

上一篇下一篇

猜你喜欢

热点阅读