Docker安装mysql并配置主从,超详细

简介:

本文使用docker安装mysql,并创建master节点,slave节点用于实现主从。废话不多说,直接开始。

1.docker下载镜像,这里我以5.7版本为例。

docker pull mysql:5.7

2.在宿主机上新建如下目录,进行文件挂载。目录名称,路径可随意更改,我这里这是提供进行参考。

    mysql-master  master节点目录

        conf      mysql配置文件

        data      mysql数据

        log       mysql日志

    mysql-slave

        conf      mysql配置文件

        data      mysql数据

        log       mysql日志

文件夹示例图如下

准备在conf目录下新建配置文件my.cnf

配置文件内容如下:

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=1

## 指定不需要同步的数据库名称

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权限的用户除外) 0:可读写,1:只读

read_only=0

3.运行镜像,生成mysql的master节点

docker run --name mysql-master -p 3307:3306 -v D:/docker_share/mysql-master/log:/var/log/mysql -v D:/docker_share/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

4.单独挂载配置文件

上面一步没有挂载配置文件,因为在实际操作中我发现mysql的配置文件默认存在/etc目录下,而etc目录下存在很多文件,我并不想挂载这个目录,所以这一步单独拿出来,只挂载指定文件

docker cp D:/docker_share/mysql-master/conf/my.cnf 容器id:/etc/my.cnf

5.重启mysql-master

docker restart mysql-master

6.登录mysql-master

## 进入容器

docker exec -it mysql-master /bin/bash

## 登录mysql

mysql -uroot -p123456

为容器实例内创建数据同步用户

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

进行授权

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

查看状态

show master status;

如果没有出现上图,出现的是Empty,则是因为配置文件中没有开启binlog。

7.到此,master节点部署完成

8.运行镜像,生成mysql的slave节点

docker run --name mysql-slave -p 3308:3306 -v D:/docker_share/mysql-slave/log:/var/log/mysql -v D:/docker_share/mysql-slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

挂载配置文件

docker cp D:/docker_share/mysql-slave/conf/my.cnf 容器id:/etc/my.cnf

配置文件: 需要注意,server_id需要唯一,read_only=1

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=2

## 指定不需要同步的数据库名称

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权限的用户除外) 0:可读写,1:只读

read_only=1

9.重启mysql-slave

docker restart mysql-slave

10.登录mysql-slave

## 进入容器

docker exec -it mysql-slave /bin/bash

## 登录mysql

mysql -uroot -p123456

执行【主从复制命令】

change master to master_host='ip地址', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-slave1-bin.000001', master_log_pos=617, master_connect_retry=30;

主从复制命令参数说明

master host:主数据库的lP地址;

master port:主数据库的运行端口;

master user:在主数据库创建的用于同步数据的用户账号;

master_password:在主数据库创建的用于同步数据的用户密码:

master_Iog_ile:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

master_connect_retry:连接失败重试的时间间隔,单位为秒。

11.启动同步并查看数据库主从同步状态

## 启动同步命令

start slave;

## 查看数据库主从同步状态

show slave status \G;

两个参数都为yes,才表示正常。如果Slave_IO_Running一直显示Connecting,说明无法连接到master节点,可以参考这篇文章:Slave_IO_Running:Connecting ;_slaveiorunning为connecting-CSDN博客

如果Slave_SQL_Running:No,可以查看一下类似下图中的Error提示,具体情况具体分析。

12.进行验证

可以使用navcate等工具在master节点新建数据库,数据表,增加数据。mysql-slave节点会自动同步。这里需要注意,mysql-slave节点不建议手动新建任何数据表,首先slave节点本来就是从库,而且如果新建的表在主库中存在,同步就会报错。

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、付费专栏及课程。

余额充值