docker Mysql部署主从集群

该文详细介绍了如何在Docker中安装MySQL,配置主从数据库,包括文件夹配置、主从库ID设定、数据目录映射、二进制日志开启,以及防火墙端口设置和远程访问权限的授予。同时,文中还提到了通过dockerrun命令启动主从库容器,并展示了如何检查主从库的连接状态和线程状态,确保主从复制的正常运行。
摘要由CSDN通过智能技术生成

目录

1 docker安装

2 docker mysql 安装配置 远程连接

2.0 配置

2.0.1 文件夹 配置

2.0.2 主库文件配置 my.cnf -> 主库 id 和 开启二进制日志 

2.0.3 从库文件配置 -> 从库 id

2.1 mysql 主 -> 第一个端口号和从库不一样

2.1.1 docker run 主库

2.1.2  查看主库二进制日志

2.2 mysql 从库

2.2.1 docker run 从库

2.2.2 从库权限设置

2.3 mysql 远程设置 -> 主库 从库 都要设置

2.4 防火墙/安全组 端口号要打开 

3 mysql 配置主从关系

3.1 课程视频

3.1.1 原理课程 ->( 客户端 --> Mycat中间件服务器 -> 主从服务器)

3.1.2 搭建课程

3.2 搭建主从

3.2.1  查看主库ip -> 让从库连接

3.2.2 测试主从数据库连接 -> 在从库 容器中 bash>

3.2.3 从库中设置从主关系 ->  从库mysql中 mysql> 

3.2.3 开启从库 ->  从库数据库中 ->两进程启动

3.2.4 查看线程状态 --> 端口号要用3306

4 测试

5 非 docker 主从 集群


1 docker安装

coin-ex 一// Docker安装_tenc1239的博客-CSDN博客

2 docker mysql 安装配置 远程连接

2.0 配置

2.0.1 文件夹 配置

// 主库 从库 目录 --> 最终要映射到容器
mkdir -p /opt/mysql-m/conf 
mkdir -p /opt/mysql-s/conf

// 主库 从库 数据 目录
mkdir -p /opt/mysql-m/data
mkdir -p /opt/mysql-s/data

2.0.2 主库文件配置 my.cnf -> 主库 id 和 开启二进制日志 

// 新建并打开my.cnf文件
vim /opt/mysql-m/conf/my.cnf

// 配置文件内容
[mysqld]
#mysqld 代表mysql 的服务进程
#指定对应的进程
# pid-file 进程号记录在这个文件 不设置 会放在mysql 的数据目录下 host_name.pid 

pid-file=/var/run/mysqld/mysqld.pid # 可以 不写 这里是容器的路径 容器会自动创建 如果不是容器 就要写自定义
socket=/var/run/mysqld/mysqld.sock # 可以不写 自动生成  是指 连接方式
datadir=/var/lib/mysql 
server-id=1 #主库id 要和从库区分开
log-bin=mysql-master-bin # 开启二进制日志

2.0.3 从库文件配置 -> 从库 id

// 新建并打开my.cnf文件
vim /opt/mysql-s/conf/my.cnf

// 配置文件内容
[mysqld]
#mysqld 代表mysql 的服务进程
#指定对应的进程
# pid-file 进程号记录在这个文件 不设置 会放在mysql 的数据目录下 host_name.pid 

pid-file=/var/run/mysqld/mysqld.pid # 可以 不写 这里是容器的路径 容器会自动创建 如果不是容器 就要写自定义
socket=/var/run/mysqld/mysqld.sock # 可以不写 自动生成  是指 连接方式
datadir=/var/lib/mysql 
server-id=2 #主库id 要和从库区分开
log-bin=mysql-slave-bin # 开启二进制日志 日志名前缀mysql-slave-bin

2.1 mysql 主 -> 第一个端口号和从库不一样

2.1.1 docker run 主库

docker run --name mysql_m -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

--privileged=true // 指定root权限
-v /opt/mysql-m/conf:/etc/mysql/conf.d // 自定义目录映射到容器目录
-v /opt/mysql-m/data:/var/lib/mysql  // [mysqld]配置文件中 指定的
mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci // 这两个必须写在mysql:5.7 后面

-- 完整---
docker run -itd -p 3306:3306 \
--name mysql-m \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=root \
-v /opt/mysql-m/conf:/etc/mysql/conf.d \
-v /opt/mysql-m/data:/var/lib/mysql \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

2.1.2  查看主库二进制日志

docker exec -it mysql-m bash // 进入mysql容器
mysql -u root -p // 进入mysql

show master status ;

grant all on *.* to 'root'@'%' identified by 'root'; //创建 root 账号 有所有的权限

grant replication slave on *.* to 'to_slave'@'%' identified by 'root'; // 主库创建to_slave 账号  从库复制 密码 root --> 
flush privileges ;

2.2 mysql 从库

2.2.1 docker run 从库

docker run -itd -p 3307:3306 \
--name mysql-s \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=root \
-v /opt/mysql-s/conf:/etc/mysql/conf.d \
-v /opt/mysql-s/data:/var/lib/mysql \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

2.2.2 从库权限设置

grant all on *.* to 'root'@'%'; //  创建root'@'%' 账号 有全部的权限
flush privileges ;

2.3 mysql 远程设置 -> 主库 从库 都要设置


// 远程设置
docker exec -it mysql bash // 进入mysql容器
mysql -u root -p // 进入mysql
use mysql // 随便选择一个数据库
select host,user,plugin,authentication_string from mysql.user; // 进行查询
select * from mysql.user\G; // 进行查询全部 并\G 竖向显示
grant ALL on *.* to `root`@`%` with grant option; // 授权
set password for root@'%' =password('root'); #mysql5.7 远程连接前 必须改一次密码 不管密码是不是root 就是要执行一次
flush privileges;

2.4 防火墙/安全组 端口号要打开 

apt-get install firewalld
systemctl start firewalld #打开防火墙
systemctl enable firewalld #设置防火墙自启动
firewall-cmd --zone=public --add-port=8888/tcp --permanent #设置8888端口开放
systemctl restart firewalld
 
#查看所有永久开放的port
firewall-cmd --list-ports --permanent

3 mysql 配置主从关系

3.1 课程视频

3.1.1 原理课程 ->( 客户端 --> Mycat中间件服务器 -> 主从服务器)

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=188&vd_source=ff8b7f852278821525f11666b36f180a

3.1.2 搭建课程

https://www.bilibili.com/video/BV1md4y1o7DY?p=17&vd_source=ff8b7f852278821525f11666b36f180a

3.2 搭建主从

3.2.1  查看主库ip -> 让从库连接

docker inspect mysql-m | grep IPAddress

3.2.2 测试主从数据库连接 -> 在从库 容器中 bash>

docker exec -it mysql-s bash
// 在bash 中连接
mysql -h 主库ip -u root -p

3.2.3 从库中设置从主关系 ->  从库mysql中 mysql> 

// 主库中 show master status; 查询二进制日志最新位置 以及 日志名
// 外部连接是 docker run 设置的第一个port  这里要用3306 
change master to \
master_host='172.18.0.2',\
master_port=3306,\
master_user='root',\
master_password='root',\
master_log_pos=347,\
master_log_file='mysql-master-bin.000004'; 

3.2.3 开启从库 ->  从库数据库中 ->两进程启动

start slave;

3.2.4 查看线程状态 --> 端口号要用3306(docker内部主从)

mysql> show slave status\G;

3.2.5 如果从库没有数据库和表 直接同步最新数据会报错->不存在表

解决办法: 自建库和表 或 全量同步

4 测试

5 非 docker 主从 集群

Mysql 主从 读写分离_tenc1239的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值