提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言(mysql的主从搭建)
通俗而言就是将数据库的内容修改放在主数据库,将数据的读取放在从数据库上,这样既可以提高整体的性能,减轻主服务器的负担,同时也可以用于数据的备份和恢复
一、为什么要主从搭建?
为了满足更高的性能要求,同时也为了提高数据冗余性从而使数据更安全
这里须引入CAP理论
C:一致性 (在分布式系统中所有节点的数据一致)
A:可用性 (性能要强,不能出现长时间的不可用状态)
P:分区容错性 (当节点之间出现故障时,各分区仍可以独立运行)
CAP理论的核心观点是:三者无法同时满足,只能三者选其二实现,即CA or CP or AP
二、主从搭建的原理(这里以一主一从为例)
- 当master中的数据发生改变时,binlog会记录这种改变(以二进制的形式)
- slave会开启IO线程读取binlog中的改变并将其写进slave中的Relay log中
- slave中的SQL线程会读取relay log中的改变并将其写进slave数据库中
三、binlog常用指令(这里注意这些语句都是进入docker容器并且再进入MySQL后的命令语句)
1、查看binlog是否启用
show variables like 'log_bin';
这里看到是已经启用了的
2.查看binlog的位置
show variables like '%datadir%';
可以看到是在/var/lib/mysql/路径中
3.显示所有日志文件
show binary logs;
我这里只有一个binlog文件,也可以有多个
4.查询指定binlog文件
show binlog events in 'wnhz-master-logbin.000001';
可以看到查到了很多,我这里就粘取一部分
四、主从开始搭建
1、创建用于存放主从的文件夹
这里选择使用如图的结构,其中3306作主,3310和3311作从,是一主两从的结构,配置文件my.cnf放置在conf文件夹下
首先创建储存用的文件夹(注意这里先进入到local文件夹中,路径在根目录下的usr下的local)
[root@localhost local]# mkdir -p software/mysql/3306 software/mysql/3310 software/mysql/3311
创建好后如图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/1f8d478000c747a390d9edecfa786f91.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c7f25443d6da4fcd9a23da20143f87fb.png)
别忘了这一步
2、从容器中拷贝所需要的原始配置文件my.cnf
这里先随便创建一个容器目的是为了拷贝里面自带的原始文件my.cnf
docker run -it --name mytest -e MYSQL_ROOT_PASSWORD=123 -d mysql
使用docker ps后发现已经创建好了
开始拷贝
注意要先进入指定的文件夹,这里我已经依靠cd语句成功进入
docker cp mytest:/etc/mysql/my.cnf ./
(注:这里的config文件夹名称后来改成了conf)
拷贝成功
3 、开始搭建主容器
*# 其中的-v 为挂载参数, :前为宿主机的文件 :后为容器中的数据文件*
docker run \
-it \
--name mysql_3306 \
--privileged \
--network wn_docker_net \
--ip 172.18.12.2 \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
可以看到创建且挂载成功
4、客户端连接测试
首先开放防火墙
firewall-cmd --add-ports=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
成功开放
同时也成功连接
4、客户端连接测试
开始配置master(把这段塞进配置文件中)
default_authentication_plugin=mysql_native_password
# Custom config should go here
!includedir /etc/mysql/conf.d/
server-id=200
log_bin=wnhz-master-logbin
relay_log=wnhz-mysql-relay-bin
binlog_format=row
在用vim编辑之前先用进入文件夹中,我这里已经进来了
然后开始编辑
5、创建slaver
从和主同理,作者这里偷个懒就先不写了,以后闲暇时间可以考虑写上
6、创建主从关系
create user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
flush privileges;
然后要开始建立关系,先进入sql环境 然后输入这个语句(其中这里的“binlog.000002”和MASTER_LOG_POS=1779是通过这里查出来的)
change master to master_host='172.18.12.2', master_user='slave',master_password='123',MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=1779;
再输入这个
start slave;
再查看
show slave status \G;
这里出现两个yes即为配置成功
另一个从同理就不赘述了