MySQL数据库的集群方案
MySQL 高可用架构:主从备份
- 为了防止数据库的突然,挂机,我们需要对数据库进行
高可用架构
主从备份 是常见的场景 - 通常情况下都是
一主一从/(多从)
正常情况下,都是主机进行工作,从机进行备份主机数据,如果主机某天突然意外宕机,从机可以立刻工作
而不会数据丢失…
MySql 主从复制原理
mysql主节点(称master) | 从(称slave)复制
-
首先我们要先开启主机的
日志记录
master主机,每进行 DML的操作,向日志中写入一条消息记录到二进制日志事件(binary log)
-
从节点,中会指定主节点的信息:ip 端口
二进制日志 的位置文件...
并启动一个线程,异步实时的
将master的binary log events拷贝到它的中继日志(relay log)
slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)
注意:
- 通常为了保证数据准确,主从备份之前要:确保
- 主DB server和从DB server数据库的版本一致
- 主DB server和从DB server数据库数据一致
- 主DB server开启二进制日志,主DB server和从DB server的server_id
服务id
都必须唯一
环境准备:
- percona-5-7-23.tar
Mysql的衍生版本Percona 通过docker进行搭建服务。这里本人直接使用提供好的tar 进行生成Docker镜像
有网络条件的朋友可以直接 拉取最新的镜像!
Docker 搭建Mysql 主从备份:
- 正好,前段时间,看了一段时间Dokcer 本次就直接通过Dokcer进行搭建了…
正常情况其实也无疑..
搭建Master01节点:
#本人安装软件的目录:
[root@hadoop1 ~]# cd /usr/local
[root@hadoop1 local]# ls
apache-phoenix-5.0.0-HBase-2.0-bin elasticsearch haproxy-1-9-3.tar kafka_2.10-0.10.2.1 MR-1.0-SNAPSHOT.jar partition.csv zookeeper-3.4.13
apache-tomcat-7.0.85 elasticsearch-6.2.4 hbase-2.1.0 kibana-6.2.4-linux-x86_64 Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz percona-5-7-23.tar
apollo hadoop jdk1.8.0_171 logstash-6.3.0 mysql wordcount.txt
#本人没有下载,就直接讲 tar包转换成镜像文件了...
[root@hadoop1 local]# docker load --input percona-5-7-23.tar
f972d139738d: Loading layer [==================================================>] 208.8MB/208.8MB
793d15bf88da: Loading layer [==================================================>] 6.144kB/6.144kB
f34bc9e37309: Loading layer [==================================================>] 303.1kB/303.1kB
39df7a5abc61: Loading layer [==================================================>] 22.46MB/22.46MB
#省略..
#查看所有镜像
#percona Mysql衍生版本
#haproxy 代理服务器
[root@hadoop1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
haproxy 1.9.3 d1ba0f09266d 2 years ago 72.1MB
percona 5.7.23 9db94bcf28b3 2 years ago 577MB
正片开始😀
Mysql master主节点搭建
#回到根目录 创建文件目录(用户区分之前安装的应用...)
[root@hadoop1 /]# cd /
[root@hadoop1 /]# mkdir -p /data/mysql/master01
#进入一号主节点目录
[root@hadoop1 /]# cd /data/mysql/master01
#创建两个目录:conf配置文件 data日志文件,为了方便操作容器内,创建数据卷
[root@hadoop1 master01]# mkdir conf data
[root@hadoop1 master01]# ls
conf data
#linux 设置文件权限 777 最大!
[root@hadoop1 master01]# chmod 777 * -R
[root@hadoop1 master01]# cd /data/mysql/master01/conf
#创建编写配置文件 👇👇
[root@hadoop1 conf]# vim my.cnf
#生成容器
#-v 设置数据卷:容器与宿主机进行文件管理共享,为了方便更改查看配置文件!
#-p 设置端口,因为对外访问的是linux的端口,容器内部的端口要与宿主机进行映射所以之后的 3306只能有一个!(后面就是3307 3316别搞混)
#-e 配置数据库默认密码 root
[root@hadoop1 conf]# docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
cde032cb98a0465f08cee6554e83a4d53ce2b72bc95f662746d712418d4d1c91
#启动mysql 容器 && (并且查看他的启动日志:如果启动报错就可以实时的发现!
[root@hadoop1 conf]# docker start percona-master01 && docker logs -f percona-master01
#...
[root@hadoop1 ~]# docker ps -a
cde032cb98a0 percona:5.7.23 "/docker-entrypoint.…" 15 hours ago Exited (255) 15 minutes ago 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp percona-master01
my.cnf 文件内容
#配置mysql基础信息
[mysqld]
#开启二进制日志,集群必须开启,主从互备直接通信就是通过: 二进制日志! (从节点这个可以忽略!)
log-bin=mysql-bin
#服务id,同一个集群环境下服务id不可重复!
server-id=1
- 从节点可以忽略:
log-bin=mysql-bin
因为,从节点只需要读取,主节点的二进制日志
即可!
主节点 测试连接:
- 查看二进制日志文件:
文件名
文件位置...
设置:主节点配置信息
#创建同步账户以及授权
CREATE USER 'wf'@'%' IDENTIFIED BY 'wf';
#配置权限, 读库读表的操作 *.*
GRANT REPLICATION SL