Docker安装主从mysql,亲测有效

一、获取mysql镜像

拉去最新的mysql,如果想要拉去指定的mysql镜像只需要按照名称:版本格式获取指定镜像,默认是点赞最多版本

默认点赞多的版本

 docker pull mysql

指定版本

 docker pull mysql:5.7

下载完成之后检查一下mysql镜像是否拉去成功

docker images | grep mysql

得到如下结果表示镜像拉取成功
在这里插入图片描述

二、运行mysql

2.1 简单部署mysql

启动mysql,执行成功之后会返回容器id

  docker run -d -p 3306:3306 --privileged=true -v /var/log/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name=mysql mysql

参数说明:

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -P: 随机端口映射,容器内部端口随机映射到主机的端口

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • –name=“nginx-lb”: 为容器指定一个名称;

  • -e username=“ritchie”: 设置环境变量;

  • –volume , -v: 绑定一个卷

启动容器之后,需要检查容器是否正常

  docker ps |grep mysql

在这里插入图片描述
进入/usr/local/mysql/conf(注:当前文件夹目录是 映射卷的目录,千万别弄错了)目录下新建如下脚步文件my.cnf,编辑my.cnf内容如下,保存并退出shift+ZZ:

vim my.cnf
[client]
default_character_set=utf8 
[mysqld] 
collation_server = utf8_general_ci 
character_set_server = utf8 

启动容器之后,需要检查容器是否正常

  docker ps |grep mysql

在这里插入图片描述

进入容器,注意a65a90c70898 为本人的容器id

 docker exec -it 628b497e1ecf /bin/bash

在这里插入图片描述
执行以下sql

#创建db01库
CREATE DATABASE db01;
#进入db01库
use db01;
#创建表t1
CREATE table t1(id int ,nams varchar(20));
#新增数据
INSERT into t1 VALUES (1,"aa");
#查询t1表
SELECT * from t1;
#新增数据
INSERT into t1 VALUES (2,"王五");
#查询t1表
SELECT * from t1;

三、运行MySQL

3.1 安装master 节点

运行如下指令

docker run -d -p 3307:3306 --privileged=true -v /var/log/mysql-master/log:/var/log/mysql -v /usr/local/mysql-master/data:/var/lib/mysql -v /usr/local/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name=mysql-master mysql

进入/usr/local/mysql-master/conf(注:当前文件夹目录是 映射卷的目录,千万别弄错了)目录下新建如下脚步文件my.cnf,
创建my.cnf:

touch my.cnf

编辑文件命令

vim my.cnf

内容如下:

## 默认编码格式
[client]
default_character_set=utf8 
[mysqld]
## 设置服务端编码格式
collation_server = utf8_general_ci 
## 设置编码格式
character_set_server = utf8 
## 设置server_id,同一局域网中需要唯一 
server_id=101
## 指定不需要同步的数据库名称 
binlog-ignore-db=mysql
## 开启二进制日志功能 
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务) 
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row) 
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。 
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 
slave_skip_errors=1062

按键,保存退出
Shift zz

3.2 安装slave节点

运行如下指令

docker run -d -p 3308:3306 --privileged=true -v /var/log/mysql-slave/log:/var/log/mysql -v /usr/local/mysql-slave/data:/var/lib/mysql -v /usr/local/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name=mysql-slave mysql

查看容器是否起来

docker ps | grep mysql-slave

在这里插入图片描述进入/usr/local/mysql-slave/conf(注:当前文件夹目录是 映射卷的目录,千万别弄错了)目录下新建如下脚步文件my.cnf,
创建my.cnf:

touch my.cnf

编辑文件命令

vim my.cnf

内容如下:

## 默认编码格式
[client]
default_character_set=utf8 
[mysqld] 
## 设置服务端编码格式
collation_server = utf8_general_ci 
## 设置编码格式
character_set_server = utf8 
## 设置server_id,同一局域网中需要唯一 
server_id=102 
## 指定不需要同步的数据库名称 
binlog-ignore-db=mysql   
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 
log-bin=mall-mysql-slave1-bin   
## 设置二进制日志使用内存大小(事务) 
binlog_cache_size=1M   
## 设置使用的二进制日志格式(mixed,statement,row) 
binlog_format=mixed   
## 二进制日志过期清理时间。默认值为0,表示不自动清理。 
expire_logs_days=7   
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 
slave_skip_errors=1062   
## relay_log配置中继日志 
relay_log=mall-mysql-relay-bin   
## log_slave_updates表示slave将复制事件写进自己的二进制日志 
log_slave_updates=1   
## slave设置为只读(具有super权限的用户除外) 
read_only=1 

按键,保存退出
Shift zz

3.3 主从配置

3.3.1 master 节点配置

执行容器重启指令

docker restart mysql-master

进入容器实例

docker exec -it mysql-master /bin/bash

进入mysql

mysql -u root -p

输入密码
在这里插入图片描述 创建同步用户
设置用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

节点说明:
slave --> 用户名
123456 --> 为用户密码
设置群组

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

查看主从同步状态

show master status;

在这里插入图片描述

一定要记录File:mall-mysql-bin.000001、Position:617值

查看mysql-master 的ip

docker inspect mysql-master

在这里插入图片描述在这里插入图片描述

3.3.2 slave 节点配置

执行容器重启指令

docker restart mysql-slave

进入容器实例

docker exec -it mysql-slave /bin/bash

在这里插入图片描述

配置主从复制
执行主从复制配置,在从属docker中执行

change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000003', master_log_pos=154, master_connect_retry=30;
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mall-mysql-bin.000001', master_log_pos=617;

配置参数 说明

节点说明
master_host主数据库的IP地址:ip一定是ens3对应的inet
master_port主数据库的运行端口
master_user在主数据库创建的用于同步数据库的用户账号
master_password在主数据库创建的用于同步数据库的用户密码
maste_log_file指定从数据库需要复制数据的日志文件,通过查看主数据的状态,获取File参数
master_log_pos指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数
master_connect_retry连接失败重试的时间间隔,单位为秒
查看主从配置是否生效
    查看配置
        show slave status \G;

通过如下看出Slave_IO_Running、Slave_SQL_Running结果为no
在这里插入图片描述
执行开启主从

执行如下指令,开启主从

start slave;
    查看配置

执行如下指令
show slave status \G;
通过如下看出Slave_IO_Running、Slave_SQL_Running结果为yes,说明主从开启成功。
如果始终是Slave_IO_Running:Connecting,则参考以下链接:

https://blog.csdn.net/weixin_39359455/article/details/104220723

在这里插入图片描述

3.4 验证

进入master执行如下指令

#创建db01库
CREATE DATABASE db01;
#进入db01库
use db01;
#创建表t1
CREATE table t1(id int ,nams varchar(20));
#新增数据
INSERT into t1 VALUES (1,"aa");
#新增数据
INSERT into t1 VALUES (2,"222");
#查询t1表
SELECT * from t1;

在master中查看数据:
在这里插入图片描述 进入slave查看数据是否同步
在这里插入图片描述 如下图所示,说明主从配置无误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker MySQL主从是一种数据库复制技术,通过在Docker容器中创建MySQL实例来实现主从同步。这种技术可以使数据在主数据库上的变化自动同步到从数据库上,确保数据的一致性和高可用性。 在创建Docker MySQL主从时,首先需要关闭防火墙并重启Docker以确保后续安装MySQL可以正常启动。接下来,需要在Docker中创建并启动MySQL主服务器,通过端口映射将宿主机的端口与Docker容器内的MySQL服务器端口绑定。同时,还需要指定MySQL的配置文件和数据存储路径,并设置MySQL的root密码。 创建主服务器的命令示例为: 引用: ```bash docker run -d \ -p 3306:3306 \ -v /hitd/mysql/master/conf:/etc/mysql/conf.d \ -v /hitd/mysql/master/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ --name hitd-mysql-master \ mysql:8.0.29 ``` 引用: ```bash docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7 ``` 然后,需要创建MySQL主服务器的配置文件,并配置日志、数据和配置文件的路径。 最后,可以通过进入从数据库容器并使用MySQL客户端工具查看主从同步状态。 引用: ```bash docker exec -it mysql-slave /bin/bash mysql -uroot -proot ``` 通过以上步骤,你可以成功创建Docker MySQL主从环境。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker搭建MySQL主从同步(全网最全保姆教程)](https://blog.csdn.net/qq_49619863/article/details/128047193)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Docker 基础教程】Mysql主从环境搭建](https://blog.csdn.net/apple_51931783/article/details/126350430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值