Docker中配置MySql环境

目录

一、简单安装

1. 首先从Docker Hub中拉取镜像

2. 启动尝试创建MySQL容器,并设置挂载卷。

3. 查看mysql8这个容器是否启动成功

4. 如果已经成功启动,进入容器中简单测试

4.1 进入容器

4.2 登录mysql中 

4.3 进行简单添加查找测试

二、主从复制安装

2.1 主服务创建配置

1. 主从服务容器创建,并且配置

2. 创建配置文件并设置参数

3. 重启容器使得配置生效

4. 进入容器内,进行主服务中进行设置

4.1 进入容器

4.2 创建数据同步用户,并给同步用户授权

4.3 查看所有用户的权限

4.4 查看MySQL主服务器的当前状态,包括二进制日志文件和位置

2.2 从服务创建配置

1. 从服务容器创建,并且配置

2. 创建配置文件并设置参数

3. 重启容器使得配置生效

4. 进入容器内,进行从服务中进行设置

4.1 进入容器

4.2 配置从服务器,指定主服务器

4.3 启动 MySQL 主从复制

4.4 查看 MySQL 主从复制状态

2.3 安装中的遇到的问题

2.4 配置完成,进行简单测试

1. 在主服务器中创建并添加数据

2. 在从服务器中查询数据,是否同步

3. 测试结果


一、简单安装

1. 首先从Docker Hub中拉取镜像

这里我要安装的是mysql8版本。

docker pull mysql:8.0.27

2. 启动尝试创建MySQL容器,并设置挂载卷。

docker run -p 3306:3306 \
           --name mysql8 \
           --privileged=true \
           -v /app/mysql8/log:/var/log/mysql \
           -v /app/mysql8/data:/var/lib/mysql \
           -v /app/mysql8/conf:/etc/mysql/conf.d \
           -v /app/mysql8/files:/var/lib/mysql-files \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -d mysql:8.0.27
  • --name mysql8: 为容器指定一个名称,这里是 mysql8
  • --privileged=true: 赋予容器更多的权限。在一般情况下,尽量避免使用 --privileged,因为它会赋予容器更多的权限,可能会带来一些安全风险。
  • -v /app/mysql8/log:/var/log/mysql: 将主机上的 /app/mysql8/log 目录映射到容器内的 /var/log/mysql,用于存储MySQL的日志文件。
  • -v /app/mysql8/data:/var/lib/mysql: 将主机上的 /app/mysql8/data 目录映射到容器内的 /var/lib/mysql,用于持久化存储MySQL的数据。
  • -v /app/mysql8/conf:/etc/mysql/conf.d: 将主机上的 /app/mysql8/conf 目录映射到容器内的 /etc/mysql/conf.d,用于提供自定义的MySQL配置文件。
  • -v /app/mysql8/files:/var/lib/mysql-files: 将主机上的 /app/mysql8/files 目录映射到容器内的 /var/lib/mysql-files,用于存储MySQL的文件。
  • -e MYSQL_ROOT_PASSWORD=123456: 设置MySQL root用户的密码为 123456
  • -d: 后台运行容器。

3. 查看mysql8这个容器是否启动成功

docker ps

4. 如果已经成功启动,进入容器中简单测试

4.1 进入容器

docker exec -it mysql8 /bin/bash

4.2 登录mysql中 

mysql -uroot -p123456

4.3 进行简单添加查找测试

CREATE DATABASE mydatabase;

USE mydatabase;

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

INSERT INTO users (username, email) VALUES
('john_doe', 'john@example.com'),
('jane_smith', 'jane@example.com'),
('bob_jones', 'bob@example.com');

SELECT * FROM users; 

二、主从复制安装

2.1 主服务创建配置

1. 主从服务容器创建,并且配置

ps:这里也默认使用mysql8版本进行安装。

docker run -p 3307:3306 \
           --name mysql-master \
           --privileged=true \
           -v /app/mysql-master/log:/var/log/mysql \
           -v /app/mysql-master/data:/var/lib/mysql \
           -v /app/mysql-master/conf:/etc/mysql/conf.d \
		   -v /app/mysql-master/files:/var/lib/mysql-files \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -d mysql:8.0.27
  • docker run: 启动一个新的Docker容器。
  • -p 3307:3306: 将主机的3307端口映射到容器的3306端口,这样可以通过主机的3307端口访问MySQL服务。
  • --name mysql-master: 为容器指定一个名称,这里是 mysql-master
  • --privileged=true: 赋予容器更高的权限。注意,一般情况下最好避免使用 --privileged,因为它可能会引入一些潜在的安全风险。
  • -v /app/mysql-master/log:/var/log/mysql: 将主机上的 /app/mysql-master/log 目录映射到容器内的 /var/log/mysql,用于存储MySQL的日志文件。
  • -v /app/mysql-master/data:/var/lib/mysql: 将主机上的 /app/mysql-master/data 目录映射到容器内的 /var/lib/mysql,用于持久化存储MySQL的数据。
  • -v /app/mysql-master/conf:/etc/mysql/conf.d: 将主机上的 /app/mysql-master/conf 目录映射到容器内的 /etc/mysql/conf.d,用于提供自定义的MySQL配置文件。
  • -v /app/mysql-master/files:/var/lib/mysql-files: 将主机上的 /app/mysql-master/files 目录映射到容器内的 /var/lib/mysql-files,用于存储MySQL的文件。
  • -e MYSQL_ROOT_PASSWORD=123456: 设置MySQL root用户的密码为 123456
  • -d: 以后台模式运行容器。
  • mysql:8.0.27: 使用的MySQL镜像的标签,这里是MySQL 8.0.27版本

2. 创建配置文件并设置参数

vim /app/mysql-master/conf/my.cnf
[mysqld]
## 设置server_id, 同一个局域网中需要唯一
server_id=1001
## 指定不需要同步的数据库名称
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

ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!

3. 重启容器使得配置生效

docker restart mysql-master

4. 进入容器内,进行主服务中进行设置

4.1 进入容器
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
4.2 创建数据同步用户,并给同步用户授权
create user 'slave'@'%' identified by '123456';
grant replication slave, replication client on *.* to 'slave'@'%';
flush privileges;

4.3 查看所有用户的权限
SELECT user, host, authentication_string, Grant_priv, Super_priv, Create_priv, Insert_priv, Update_priv, Delete_priv, Select_priv FROM mysql.user;

 得到这样得结果

4.4 查看MySQL主服务器的当前状态,包括二进制日志文件和位置
show master status;

参数说明:

File(文件)

表示当前正在写入的二进制日志文件的名称

Position(位置)

表示在二进制日志文件中的当前写入位置

Binlog_Do_DB

一个逗号分隔的数据库列表,表示正在复制的二进制日志事件应用于哪些数据库

Binlog_Ignore_DB

一个逗号分隔的数据库列表,表示正在复制的二进制日志事件不应用于哪些数据库

Executed_Gtid_Set

表示已经执行的 GTID(全局事务标识符)集合。在MySQL的 GTID 复制中

 

2.2 从服务创建配置

1. 从服务容器创建,并且配置

docker run -p 3308:3306 \
           --name mysql-slave \
           --privileged=true \
           -v /app/mysql-slave/log:/var/log/mysql \
           -v /app/mysql-slave/data:/var/lib/mysql \
           -v /app/mysql-slave/conf:/etc/mysql/conf.d \
		   -v /app/mysql-master/files:/var/lib/mysql-files \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -d mysql:8.0.27

2. 创建配置文件并设置参数

vim /app/mysql-slave/conf/my.cnf
[mysqld]
## 设置server_id, 同一个局域网内需要唯一
server_id=1002
## 指定不需要同步的数据库名称
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

ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!

3. 重启容器使得配置生效

docker restart mysql-slave

4. 进入容器内,进行从服务中进行设置

4.1 进入容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
4.2 配置从服务器,指定主服务器

我这里使用的是 CentOS7,查看服务器地址

ifconfig

CHANGE MASTER TO
  MASTER_HOST = '192.168.153.133',       -- 主服务器的 IP 地址
  MASTER_USER = 'slave',                  -- 用于连接主服务器的用户名
  MASTER_PASSWORD = '123456',             -- 用于连接主服务器的密码
  MASTER_PORT = 3307,                     -- 主服务器的端口号
  MASTER_LOG_FILE = 'binlog.000011',      -- 主服务器的二进制日志文件
  MASTER_LOG_POS = 1193,                  -- 主服务器的二进制日志位置
  MASTER_CONNECT_RETRY = 30,              -- 如果连接失败,重试的时间间隔(秒)
  GET_MASTER_PUBLIC_KEY = 1;              -- 启用 SSL 模式,1 表示启用
4.3 启动 MySQL 主从复制
start slave;
 4.4 查看 MySQL 主从复制状态
# \G 可以将横向的结果集表格转换成纵向展示。
# slave status的字段比较多,纵向展示比友好
show slave status \G;

主要查看 Slave_IO_Running 和 Slave_SQL_Running是否为 Yes 状态。

ps:如果在安装中遇到问题可以查看下面这篇文章  ↓↓↓ ↓↓↓ 

2.3 安装中的遇到的问题

如果在安装过程中遇到问题,可以查看这篇文章,这是我遇到的一些问题和解决方案。

Docker中安装MySql的遇到的问题icon-default.png?t=N7T8http://t.csdnimg.cn/ujsL1

2.4 配置完成,进行简单测试

1. 在主服务器中创建并添加数据

CREATE DATABASE IF NOT EXISTS mydatabase;

USE mydatabase;

CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);


INSERT INTO users (username, email) VALUES
    ('alice_white', 'alice@example.com'),
    ('charlie_brown', 'charlie@example.com'),
    ('emma_jones', 'emma@example.com');

select * from users;

2. 在从服务器中查询数据,是否同步

show databases;

use mydatabase;

select * from users;

3. 测试结果

主从服务器数据同步 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/363464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

【操作系统·考研】文件系统

1.概述 文件系统(File System)提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。 严格来说,VFS并不是一种实际的FS,它只存在于内存中,不存在与任何外存空间中。 VFS在系统启动时建立,在系统关闭时消亡。 2.结…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextClock组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同…

VMware vCenter告警:vSphere UI运行状况警报

vSphere UI运行状况警报 不会详细显示告警的具体内容,需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具,用于检测vSphere环境中的潜在问题。当警报触发时,通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…

2024斋月大促提前,跨境卖家请收好这份准备指南与大促策略

市场覆盖西欧、中东、东南亚、北非地区的跨境电商卖家注意了,2024年的斋月即将开启,较往年日期,今年提前了10天左右,斋月的第一天预测在3月11日星期一到来。 根据Google搜索数据可知,目前已经进入高频“斋月”搜索期&…

nginx刷新404问题

问题分析 在配置好 nginx 转发之后,发现页面能正常打开,但只要按 F5 刷新之后就会报 404。这是因为 web 单页面开发模式,只有一个 index.html 入口,其他路径是前端路由去跳转的,nginx 没有对应这个路径,然后…

安装GPU版本Pytorch(全网最详细过程)

目录 一、前言 二、安装CUDA 三、安装cuDNN 四、安装Anacanda 五、安装pytorch 六、总结 一、前言 最近因为需要安装GPU版本的Pytorch,所以自己在安装过程中也是想着写一篇博客,把整个过程记录下来,在整个过程中也遇到了不少的问题&a…

大数据开发之离线数仓项目(用户行为采集平台)(可面试使用)

第 1 章:数据仓库概念 数据仓库,是为企业指定决策,提供数据支持的,可以帮助企业,改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括:业务数据、用户行为数据和爬虫数据等。 业务数据&#xff1a…

【Linux C | I/O模型】IO复用 | select、pselect函数详解(看完就会用了)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

【Eclipse平台】2 Eclipse Workbench工作台介绍

Eclipse Workbench工作台介绍 本文介绍Eclipse工作台Workbench。 当工作台启动时,首先看到的是一个对话框,该对话框允许我们选择工作区的位置。工作区是存储工作的目录。现在,只需单击“确定”即可选择默认位置。 选择工作区位置后&#x…

LVGL部件4

一.列表部件 1.知识概览 2.函数接口 1.lv_list_add_btn lv_list_add_btn 是 LittlevGL(LVGL)图形库中的一个函数,用于向列表(list)对象中添加一个按钮(button)。 函数原型为:lv_ob…

数据库复试-SQL数据定义与数据查询语句

数据库复试-SQL数据定义与数据查询语句 使用mysql数据库代替之前的sqlserver (完全使用命令行进行操作) 一:登录数据库登录与创建 mysql -uroot -p 123456 CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY, /*主键约束*/Sname CHAR(20) UNIQUE, /*唯一值*/Ssex …

关于标准那些事——第十篇 符号标准

“符号”几乎是无处不在的,无论是生活、学习还是工作中,每个人每天都会碰到,只是我们没有意识到她的存在。正因如此,符号标准在不同场景、不同领域都发挥着统一认知,规范行为的作用,其简约、易用和一致性的…

分布式事务(四)——TCC补偿模式解决方案

系列目录: 《分布式事务(一)—— 事务的基本概念》 《分布式事务(二)—— CAP和Base理论》 《分布式事务(三)—— 两阶段提交解决方案(2PC)》 一、常见分布式事务解决…

轻型民用无人机驾驶航空器安全操控——理论考试多旋翼部分笔记

今天已经可以在线考取轻型民用无人机驾驶航空器执照了,所以我也在在线观看完视频之后整理了如下的知识点,所有知识点全部来自UOM平台。 目录 航空器知识 (1)多旋翼民用无人驾驶航空器螺旋桨的作用 (2&#x…

仰暮计划|“从米票、肉票、糖果票到肥皂票、煤票、棉花票等,生活里头的方方面面都能用粮票买到”

口述人:牛翠英(女) 整理人:霍芝冉 口述人基本信息:现68岁,河南省安阳市北关区霍家村人,现居河南安阳市区。 奶奶一生辛劳,操持家务;亲眼见证了时代变迁,社会发展,…

小米商城服务治理之客户端熔断器(Google SRE客户端熔断器)

目录 前言 一、什么是Google SRE熔断器 二、Google SRE 熔断器的工作流程: 三、客户端熔断器 (google SRE 熔断器) golang GRPC 实现 四、客户端熔断器 (google SRE 熔断器) golang GRPC单元测试 大家可以关注个人博客:xingxing – Web Developer …

【笔试常见易错选择题01】else、表达式、二维数组、%m.ns、%m.nf、常量指针和指针常量、宏定义、传参、数组越界、位段

1. 下列main()函数执行后的结果为&#xff08;&#xff09; int func(){ int i, j, k 0; for(i 0, j -1;j 0;i, j){ k; } return k; } int main(){cout << (func());return 0; }A. -1 B. 0 C. 1 D. 2 判断为赋值语句&#xff0c;j等于0 0为假不进循环 选B. 2. 下面程…

【日常总结】宝塔中 Gitlab服务器 forbidden

一、场景 二、问题 三、原因 四、解决方案 五、实战 Stage 1&#xff1a;打开 /etc/gitlab/gitlab.rb&#xff0c;并编辑 Stage 2&#xff1a;重启gitlab服务 Stage 3&#xff1a;测试&#xff08;打开girlab网页&#xff09; 六、后续 一、场景 公司更换新电脑 服务…

引用与常引用

1.定义 下面写法定义了一个引用&#xff0c;并将它进行初始化为引用某个变量。 类型名 & 引用名 某变量名&#xff1b; int n 4; int & r n; // r引用了n&#xff0c;r的类型是int & 某个变量的引用&#xff0c;等价于这个变量&#xff0c;相当于该变量…
最新文章