Docker 搭建MySql8.0主从集群

2022-01-13  本文已影响0人  tianchaohongyu

概念

分布式的数据库集群可以大幅提升数据库性能,MySql的集群同步原理主要为:

  1. MySql从节点从主节点下载binlog实现数据同步
  2. binlog下载受MySql账户体系限制,因此需要配置权限
  3. 从节点需要配置主节点的信息,以及同步时使用的用户和密码

使用Docker搭建主从集群

前言

搭建主从同步其实很简单,大概分为以下几步:

  1. 安装主节点
  2. 点建立binlog下载专用用户
  3. 安装从节点
  4. 配置主节点连接信息

主节点

# 1.安装主节点
# 启动主节点 使用 mysql/mysql-server:8.0.23 镜像,映射为3306端口、root作为默认用户的密码
# 关键点1:-p 宿主机端口:容器内数据库端口
# 关键点2:-v 宿主机数据库数据存放路径:/lib/mysql
docker run --restart=always --name mysql-master --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.27

# 2.建立binlog下载专用用户
# 进入docker 容器
docker exec -it mysql-master bash
# 使用root用户进入mysql
mysql -uroot -proot
# 使root所有ip皆可访问(方便开发,可省略)
update mysql.user set host = '%' where user = 'root';
# 新建用户test并授权
# 关键点1: 密码必须使用原生插件:mysql_native_password,否则从节点连接时会报错:Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connect
create user 'slave_user'@'%' identified with mysql_native_password by 'slave_password';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_user'@'%';
# 然后刷新权限
flush privileges;
# 查看主节点状态,并记录File和Position参数,最后,可以执行 exit命令退mysql和docker容器
show master status;

从节点

# 1.安装主从节点
# 启动从节点 使用 mysql/mysql-server:8.0.23 镜像,映射为3307端口、root作为默认用户的密码
# 关键点1: 由于主节点占用了3306端口,所以此处使用了3307,而不是3306
# 关键点2: 必须加上--link参数,其后指定了当前容器所要连接的容器,mysql-master表示所要连接的容器的名称,master表示为该容器起的一个别名,slave容器通过这两个名称都可以访问到master容器
# 关键点3: -v 宿主机数据库数据存放路径:/lib/mysql
docker run --restart=always --name mysql-slave --privileged=true -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.27

# 2.修改节点id
# 进入docker容器
docker exec -it mysql-slave /bin/bash
# 创建配置文件,节点id改为2(默认是1,主节点已占用)
cat << EOF >> /etc/my.cnf
server-id=2
EOF
# 停止mysql服务,此时docker容器应该也会一同停止
mysqladmin -u root -proot shutdown

# 3.设置同步参数
# 重新进入docker容器中,此处省略1000字...
# 进入mysql 
mysql -uroot -proot
# 使root所有ip皆可访问(方便开发,可跳过)
update mysql.user set host = '%' where user = 'root';
flush privileges;
# 切换同步参数,使用有权限的用户连接上master服务器,并且复制其数据
# 关键点: MASTER_LOG_FILE 和 MASTER_LOG_POS 是从主节点复制过来的 File和Position参数
change master to MASTER_LOG_FILE='主节点的binlog.000002', MASTER_LOG_POS=1111 , master_host='master', master_user='slave_user', master_password='slave_password', master_port=3306, master_connect_retry=30;
# 开启同步
start slave;
# 然后查看状态
# 关键点1: 查看 Slave_IO_State,必须是 Waiting for source to send event
# 关键点2: 查看 Slave_SQL_Running_State:,必须是 Replica has read all relay log; waiting for more updates
show slave status\G;
# 最后,可以执行 exit命令退mysql和docker容器

结语

到此,一个有运行在Docker上的MySql主从集群便已搭建完毕,赶紧在主节点创建数据库、表和写入数据看看主从同步的威力吧!

上一篇下一篇

猜你喜欢

热点阅读