Docker 部署 MYSQL-5.7 主从

embedded/2025/2/13 17:01:03/

一、拉取对应镜像

docker pull registry.cn-hangzhou.aliyuncs.com/farerboy/mysql:5.7

二、部署主节点

1、创建对应需要的目录

mkdir -p /wwwroot/opt/docker/mysql-master-3306/log
mkdir -p /wwwroot/opt/docker/mysql-master-3306/data
mkdir -p /wwwroot/opt/docker/mysql-master-3306/conf
touch /wwwroot/opt/docker/mysql-master-3306/conf/my.cnf

2、my.cnf 配置填充

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
binlog_cache_size = 32K
thread_stack = 256K
join_buffer_size = 256K
query_cache_type = 0
max_heap_table_size = 128M
lower_case_table_names = 1
port = 3306
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 256M
table_open_cache = 1024
sort_buffer_size = 4096K
net_buffer_length = 4K
read_buffer_size = 4096K
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 64M
thread_cache_size = 128
query_cache_size = 0M
tmp_table_size = 128Mexplicit_defaults_for_timestamp = true
#skip-name-resolve
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535skip-ssllog_bin = ON
server_id = 1
sync_binlog = 1
binlog_format = ROW
expire-logs-days=10
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

内容解读:

sql_mode:设置MySQL的SQL模式,这里指定了一系列严格模式和错误处理模式,例如禁止日期字段中的零值、禁止自动创建用户等。

binlog_cache_size:指定了二进制日志缓存的大小,这是MySQL服务器用于存储二进制日志事件的缓冲区大小。

thread_stack:设置线程栈的大小,即每个MySQL线程的栈空间大小。

join_buffer_size:设置连接缓冲区的大小,用于执行连接操作时的中间结果缓存。

query_cache_type:设置查询缓存的类型,这里将其设置为0,表示禁用查询缓存。

max_heap_table_size:设置最大的堆表(内存表)大小限制。

lower_case_table_names:设置表名的大小写规则,这里设置为1表示表名不区分大小写。

port:指定MySQL服务器监听的端口号。

default_storage_engine:设置默认的存储引擎,这里设置为InnoDB。

performance_schema_max_table_instances:设置性能模式中表实例的最大数量。

table_definition_cache:设置表定义缓存的大小。

skip-external-locking:禁用外部锁定,不再支持旧式的外部锁定。

key_buffer_size:设置MyISAM索引缓冲区的大小。

table_open_cache:设置表打开缓存的大小,用于存储表的打开实例。

sort_buffer_size:设置排序缓冲区的大小,用于执行排序操作时的中间结果缓存。

net_buffer_length、read_buffer_size、read_rnd_buffer_size:分别设置网络缓冲区、读取缓冲区和随机读取缓冲区的大小。

myisam_sort_buffer_size:设置MyISAM排序缓冲区的大小。

thread_cache_size:设置线程缓存的大小,用于存储已经分配但未被使用的线程。

query_cache_size:设置查询缓存的大小,这里将其设置为0,表示禁用查询缓存。

tmp_table_size:设置临时表的最大大小。

explicit_defaults_for_timestamp:设置是否启用了显式的时间戳默认值。

max_connections:设置最大连接数。

max_connect_errors:设置最大连接错误数。

open_files_limit:设置打开文件的限制数。

skip-ssl:禁用SSL连接。

log_bin:启用二进制日志功能。

server_id:设置服务器的ID。

sync_binlog:设置二进制日志的同步方式。

binlog_format:设置二进制日志的格式,这里设置为ROW格式。

expire-logs-days:设置二进制日志文件的过期时间。

binlog-ignore-db:设置要忽略的数据库,这里分别忽略了mysql、information_schema和performance_schema数据库。

symbolic-links:设置是否允许符号链接,这里设置为0,禁用符号链接以防止安全风险。

3、运行mysql主节点镜像

docker run -dti --name mysql-master-3306 \n
--privileged --cgroupns private \n
--env MYSQL_ROOT_PASSWORD=123456 \n
-p 3306:3306 \n
-v /wwwroot/opt/docker/mysql-master-3306/log:/var/log/mysql \n
-v /wwwroot/opt/docker/mysql-master-3306/data:/var/lib/mysql \n
-v /wwwroot/opt/docker/mysql-master-3306/conf:/etc/mysql \n
registry.cn-hangzhou.aliyuncs.com/farerboy/mysql:5.7

运行成功后测试主节点链接。

三、部署从节点

1、创建对应需要的目录

mkdir -p /wwwroot/opt/docker/mysql-slave-3306/log
mkdir -p /wwwroot/opt/docker/mysql-slave-3306/data
mkdir -p /wwwroot/opt/docker/mysql-slave-3306/conf
touch /wwwroot/opt/docker/mysql-slave-3306/conf/my.cnf

2、my.cnf 配置填充

[mysqld]binlog_cache_size = 32K
thread_stack = 256K
join_buffer_size = 256K
query_cache_type = 0
max_heap_table_size = 128M
lower_case_table_names = 1
port = 3306
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 256M
table_open_cache = 1024
sort_buffer_size = 4096K
net_buffer_length = 4K
read_buffer_size = 4096K
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 64M
thread_cache_size = 128
query_cache_size = 0M
tmp_table_size = 128Mexplicit_defaults_for_timestamp = true
#skip-name-resolve
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535skip-ssllog_bin = ON
server_id = 2
sync_binlog = 1
binlog_format = ROW
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

内容解释:

binlog_cache_size = 32K:设置二进制日志缓存的大小为32KB。

thread_stack = 256K:设置线程栈的大小为256KB,即每个MySQL线程的栈空间大小。

join_buffer_size = 256K:设置连接缓冲区的大小为256KB,用于执行连接操作时的中间结果缓存。

query_cache_type = 0:设置查询缓存的类型为0,表示禁用查询缓存。

max_heap_table_size = 128M:设置最大的堆表(内存表)大小限制为128MB。

lower_case_table_names = 1:设置表名的大小写规则,这里设置为1表示表名不区分大小写。

port = 3306:指定MySQL服务器监听的端口号为3306。

default_storage_engine = InnoDB:设置默认的存储引擎为InnoDB。

performance_schema_max_table_instances = 400:设置性能模式中表实例的最大数量为400。

table_definition_cache = 400:设置表定义缓存的大小为400。

skip-external-locking:禁用外部锁定,不再支持旧式的外部锁定。

key_buffer_size = 256M:设置MyISAM索引缓冲区的大小为256MB。

table_open_cache = 1024:设置表打开缓存的大小为1024,用于存储表的打开实例。

sort_buffer_size = 4096K:设置排序缓冲区的大小为4096KB,用于执行排序操作时的中间结果缓存。

net_buffer_length = 4K、read_buffer_size = 4096K、read_rnd_buffer_size = 256K:分别设置网络缓冲区、读取缓冲区和随机读取缓冲区的大小。

myisam_sort_buffer_size = 64M:设置MyISAM排序缓冲区的大小为64MB。

thread_cache_size = 128:设置线程缓存的大小为128,用于存储已经分配但未被使用的线程。

query_cache_size = 0M:设置查询缓存的大小为0MB,表示禁用查询缓存。

tmp_table_size = 128M:设置临时表的最大大小为128MB。

explicit_defaults_for_timestamp = true:设置是否启用了显式的时间戳默认值为true。

max_connections = 500:设置最大连接数为500。

max_connect_errors = 100:设置最大连接错误数为100。

open_files_limit = 65535:设置打开文件的限制数为65535。

skip-ssl:禁用SSL连接。

log_bin = ON:启用二进制日志功能。

server_id = 2:设置服务器的ID为2。

sync_binlog = 1:设置二进制日志的同步方式为每次提交事务。

binlog_format = ROW:设置二进制日志的格式为ROW格式。

binlog-ignore-db = mysql、binlog_ignore_db = information_schema、binlog_ignore_db = performance_schema:分别设置要忽略的数据库为mysql、information_schema和performance_schema。

symbolic-links=0:设置是否允许符号链接为0,禁用符号链接以防止安全风险。

3、运行mysql从节点镜像

docker run -dti --name mysql-slave-3306 \n
--privileged --cgroupns private \n
--env MYSQL_ROOT_PASSWORD=123456 \n
-p 3306:3306 \n
-v /wwwroot/opt/docker/mysql-slave-3306/log:/var/log/mysql \n
-v /wwwroot/opt/docker/mysql-slave-3306/data:/var/lib/mysql \n
-v /wwwroot/opt/docker/mysql-slave-3306/conf:/etc/mysql \n
registry.cn-hangzhou.aliyuncs.com/farerboy/mysql:5.7

四、配置主从同步

1、配置主节点访问账号

# 查看正在运行的docker容器 
docker ps # 进入到指定id的容器docker exec -it <容器id> /bin/bash

进到容器之后,访问数据库 mysql -uroot -p 回车 ,然后输入密码。

进入到mysql后执行以下语句:

## 创建从节点的访问账号
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';## 查看master状态,结果信息,后面有用
show master status;

记录上面的信息,后面有用

退出mysql 执行 exit即可;

退出容器执行 exit即可;

2、配置从节点同步

如上一样,进入到从节点容器mysql中。执行以下指令

CHANGE MASTER TO
MASTER_HOST='192.168.1.111',
MASTER_USER='slave',
MASTER_PASSWORD='slave',
MASTER_LOG_FILE='ON.000003',
MASTER_LOG_POS=617;执行完成后,开启同步
start slave;
  1. MASTER_HOST='172.17.1.204':指定主节点的IP地址或主机名,这里设置为172.17.1.204。
  2. MASTER_USER='slave':指定用于连接主节点的用户名,这里设置为slave。
  3. MASTER_PASSWORD='slave':指定用于连接主节点的密码,这里设置为slave。
  4. MASTER_LOG_FILE='ON.000004':指定从哪个二进制日志文件开始复制数据。这里设置为ON.000004。
  5. MASTER_LOG_POS=617:指定从二进制日志文件的哪个位置开始复制数据。这里设置为617。

最后测试一下,创建数据库,表,增删改查能够同步到从节点表示成功,多个从节点也是一样的部署方法,只要server_id不同即可。

3、从节点状态查询

# 查询从节点状态
show slave status\G;
# 停止从节点
stop slave;
# 重置从节点
reset slave;
# 启动从节点
start slave;


http://www.ppmy.cn/embedded/161908.html

相关文章

DeepSeek 深度解析:引领 SEO 与数据分析新时代的智能工具

DeepSeek 深度解析&#xff1a;引领 SEO 与数据分析新时代的智能工具 &#x1f680; 在当今数字化时代&#xff0c;网站排名与数据驱动的决策对企业发展至关重要。如何在激烈的市场竞争中精准捕捉用户需求、优化内容策略&#xff1f;答案可能就在 DeepSeek 中。本文将从核心理…

瑞熙贝通实验室安全综合管理平台更新迭代v4.0产品介绍

随着科研事业的蓬勃发展&#xff0c;科研实验室是高校科研的重要场所 &#xff0c;是培养学生科研能力、进行科学实验、创造科研成果的重要基地。然而&#xff0c;实验室也存在诸多安全隐患&#xff0c;如化学品泄露、火灾、设备故障、中毒、辐射、窒息等&#xff0c;这些都可能…

vscode插件Remote - SSH使用教程

Remote - SSH 是一款非常实用的 Visual Studio Code (VSCode) 扩展插件,它允许开发者通过SSH连接到远程服务器,并像在本地一样进行代码编辑和调试。这意味着你可以直接在VS Code中打开位于远程机器上的文件夹,并利用本地安装的VS Code功能,如语法高亮、智能感知、Git集成等…

AI时代的前端工程师:机遇与挑战

在飞速发展的科技浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活。从智能家居到自动驾驶&#xff0c;AI 的触角已经伸向各行各业&#xff0c;而作为互联网应用的基石——前端开发领域&#xff0c;也正经历着AI带来的深刻变革。本…

02、QLExpress从入门到放弃,相关API和文档

QLExpress从入门到放弃,相关API和文档 一、属性开关 public class ExpressRunner {private boolean isTrace;private boolean isShortCircuit;private boolean isPrecise; }/*** 是否需要高精度计算*/ private boolean isPrecise false;高精度计算在会计财务中非常重要&…

JEECGBOOT前端VUE3版本浏览器兼容支持chrome>=76版本方法

JEECGBOOT最新的前端VUE3版本使用的 VITE最新版本Ant design vue最新版本。 部署到生产环境以后发现&#xff0c;chrome76-100左右&#xff0c;CSS样式会乱掉失效&#xff0c;不太兼容&#xff0c;103以上的没问题。 尝试了三种方法&#xff0c;前两种都失败了&#xff0c;第三…

JVM春招快速学习指南

1.说在前面 在Java相关岗位的春/秋招面试过程中&#xff0c;JVM的学习是必不可少的。本文主要是通过《深入理解Java虚拟机》第三版来介绍JVM的学习路线和方法&#xff0c;并对没有过JVM基础的给出阅读和学习建议&#xff0c;尽可能更加快速高效的进行JVM的学习与秋招面试的备战…

爬虫瑞数5.5案例:某钢材交易官网(面向对象补环境)

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、瑞数简介 瑞数动态安全 Botgate&#xff08;机器人防火墙&#xff09;以“动态安全”技术为核心&#xff0c;通过动态封装…