mysql集群与主从复制

冷暖自知 提交于 2020-02-06 02:45:55

mysql的读写分离是通过主从复制来实现的,那么为什么要读写分离呢?

随着用户量的增多,数据库的性能往往会成为一个系统的瓶颈所在,一般系统的“读”压力远远大于“写”压力,所以可以通过数据库的读写分离来提高系统的性能。让主数据库负责“写”操作,从数据库负责“读”操作,从数据库可以部署多个来提高“读”的速度。所以,读写分离可以分担mysql的压力,提供系统的性能和吞吐量

 

那么主从复制的原理是什么?

1)首先,mysql主数据库在事务提交时会把所有对数据的操作都写入二进制文件binlog中

2)从数据库读取到binlog中的记录,根据这个记录重做数据库操作,通过复制达到数据一致

 

但是主数据库和从数据库间总会有延迟,如果刚刚保存的数据你就要马上能够读取到,这个时候可以让这次查询去主数据库中执行

 

 

接下来实现一个主从复制的小案例

 

由于本项目的这些服务都是docker的镜像,所以mysql我也想通过docker来安装,这里使用的是5.7版本

docker pull mysql:5.7

首先要创建外部挂载点来挂载容器中的文件

sudo mkdir -p /usr/local/mysql/data

sudo mkdir -p /usr/local/mysql/log

sudo mkdir -p /usr/local/mysql/conf

sudo chmod 775 -R /usr/local/mysql/


然后开始挂载:

docker run -p 3316:3306 --name mysql-master -v /usr/local/mysql/log:/var/log/mysql  -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

参数说明

-p 3316:3306:将容器的3306端口映射到主机的3316端口

 -v /usr/local/mysql/conf:/etc/mysql:将配置文件夹挂在到主机

 -v/usr/local/mysql/log:/var/log/mysql:将日志文件夹挂载到主机

 -v/usr/local/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机

 -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码

 

从数据库也类似:

docker run -p 3317:3306 --name mysql-slaver -v /usr/local/mysql/slave/log:/var/log/mysql  -v /usr/local/mysql/slave/data:/var/lib/mysql -v /usr/local/mysql/slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

 

接下来就是要实现主从同步

 

每一个数据库都有自己独一无二的id,read-only设置是否为只读数据库,要让主数据库中的某张表能够同步,就需要设置binlog-do-db=

要忽略同步的库则是replicate-ignore-db=

binlog就是二进制日志,mysql主从复制的底层原理就是通过将主数据库的操作记录到binlog,从数据库再从里面获取记录重新执行一遍主数据库的所有操作来实现的复制

 

然后要在主库中创建从库能够使用的账号密码

1、进入master容器

docker exec -it mysql-master /bin/bash

2、进入mysql内部 (mysql –uroot -p)

 

1)、授权root可以远程访问( 主从无关,为了方便我们远程连接mysql)

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

flush privileges;

2)、添加用来同步的用户

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';

3、查看master状态

show master status\G;

 

1、进入slaver容器

docker exec -it mysql-slaver /bin/bash

2、进入mysql内部(mysql –uroot -p)

1)、授权root可以远程访问( 主从无关,为了方便我们远程连接mysql)

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

flush privileges;

 

2)、设置主库连接

change master to master_host='192.168.109.108',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3316;

3)、启动从库同步

start slave;

4)、查看从库状态

show slave status\G;

 

至此主从配置完成;

总结:

1)、主从数据库在自己配置文件中声明需要同步哪个数据库,忽略哪个数据库等信息。并且server-id不能一样

2)、主库授权某个账号密码来同步自己的数据

3)、从库使用这个账号密码连接主库来同步数据

 

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