Docker 安装mysql 主从复制
目录
1 MySql主从复制简介
1.1 主从复制的概念
1.2 主从复制的作用
2. 搭建主从复制
2.1 pull mysql 镜像
2.2 新建主服务器容器实例 3307
2.2.1 master创建 my.cnf
2.2.2 重启master
2.2.3 进入mysql 容器,创建同步用户
2.3 新建从服务器容器实例 3308
2.3.1 slave创建 my.cnf
2.3.2 重启slave 实例
2.3.3 在master中查看主从同步状态
2.3.4 在从数据库中配置主从复制
2.3.5 在从数据中开启主从同步
2.3.6 再次查看 slave status
3 主从复制测试
3.1主机添加数据
3.2 从机直接使用
1 MySql主从复制简介
1.1 主从复制的概念
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
1.2 主从复制的作用
数据的热备:作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
架构的扩展:业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
读写分离:使数据库能支撑更大的并发。
(1)在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
(2)在从服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)
高可用性:数据备份实际上是一种冗余的机制,通过这种冗余的方式可以换取数据库的高可用性,也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证服务的正常运行。
2. 搭建主从复制
2.1 pull mysql 镜像
docker pull mysql
2.2 新建主服务器容器实例 3307
先创建文件夹:
mkdir -p /mydocker/mysql-master/log
mkdir -p /mydocker/mysql-master/data
mkdir -p /mydocker/mysql-master/confdocker run -p 3307:3306 --name=mysql-master -v /mydocker/mysql-master/log:/var/log/mysql -v /mydocker/mysql-master/data:/var/lib/mysql -v /mydocker/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql[root@192 mysql-master]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a298c5defda mysql "docker-entrypoint.s…" 4 seconds ago Up 2 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql-master
#创建容器时出现 找不着/var/lib/mysql-files 的错误
解决办法:在my.cnf 配置文件中加入 secure_file_priv=/var/lib/mysql
2.2.1 master创建 my.cnf
在/mydocker/mysql-master/conf 目录下 创建 my.cnf
[mysqld]
#指定此路径限制数据导入导出,不然默认读取/var/lib/mysql-files路径,但是容器中此路径没有会报错
secure_file_priv=/var/lib/mysql
#设置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
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slae端复制终端
#如:1062错误是指一些主键重复,1032错误是因为主从数据库不一致
slave_skip_errors=1062
2.2.2 重启master
docker restart 6a298c5defda
2.2.3 进入mysql 容器,创建同步用户
docker exec -it mysql-master /bin/bashmysql -uroot -pmysql> CREATE USER 'slave'@'%'IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.15 sec)mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON*.*TO'slave'@'%';
Query OK, 0 rows affected (0.01 sec)
#由于mysql8之后默认使用认证方式为caching_sha2_password,会使主从复制change命令后出现Slave_IO_Running: Connecting
解决办法:
① :在my.cnf 配置文件中加入 default_authentication_plugin=mysql_native_password
② :在master mysql中执行 ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
2.3 新建从服务器容器实例 3308
[root@192 ~]# docker run -p 3308:3306 --name=mysql-slave -v /mydocker/mysql-slave/log:/var/log/mysql -v /mydocker/mysql-slave/data:/var/lib/mysql -v /mydocker/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d284702c6992 mysql "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp mysql-slave
7b510affe5f3 mysql "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql-master
[root@192 ~]#
#创建容器时出现 找不着/var/lib/mysql-files 的错误
解决办法:在my.cnf 配置文件中加入 secure_file_priv=/var/lib/mysql
2.3.1 slave创建 my.cnf
[mysqld]
#指定此路径限制数据导入导出,不然默认读取/var/lib/mysql-files路径,但是容器中此路径没有会报错
secure_file_priv=/var/lib/mysql
#设置server_id,同一局域网中需要唯一
server_id=102
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开始二进制日志功能,以备slave作为其他数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
#设置二进制使用内存大小 (事务)
binlog_cache_size=1M
#设置使用二进制日期格式
binlog_format=mixed
#二进制日志过期清理时间。默认为0,表示不自动清理
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制终端。
#如 1062错误是指一些主键重复,1032错误是因为主从数据库不一致
slave_skip_errors=1062
#relay_log 配置中继日志
relay_log=mall-mysql-relay-bin
#表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
#slave设置为只读(具有super权限的用户除外)
read_only=1
2.3.2 重启slave 实例
docker restart mysql-slavedocker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d284702c6992 mysql "docker-entrypoint.s…" 12 hours ago Up 5 minutes 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp mysql-slave
7b510affe5f3 mysql "docker-entrypoint.s…" 12 hours ago Up 7 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql-master
2.3.3 在master中查看主从同步状态
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000006 | 156 | | mysql | |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.02 sec)
2.3.4 在从数据库中配置主从复制
mysql> change master to master_host='192.168.217.145',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000005',master_log_pos=156,master_connect_retry=30;
Query OK, 0 rows affected, 10 warnings (0.18 sec)master_host: 主数据库的ip地址
master_user: 在主数据库创建的用于同步数据的用户账号
master_password: 在主数据库创建的用于同步数据的用户密码
master_port: 主数据库的运行端口
master_log_file: 指定从数据库要复制数据的日志文件,通过查看主数据库的状态,获取File参数
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据库的状态,获取Position
master_connect_retry: 连接失败重试的时间间隔,单位为妙mysql> show slave status \G;
*************************** 1. row ***************************Slave_IO_State: Master_Host: 192.168.145.217Master_User: slaveMaster_Port: 3307Connect_Retry: 30Master_Log_File: mall-mysql-bin.000005Read_Master_Log_Pos: 156Relay_Log_File: mall-mysql-relay-bin.000001Relay_Log_Pos: 4Relay_Master_Log_File: mall-mysql-bin.000005Slave_IO_Running: NoSlave_SQL_Running: NoReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 156Relay_Log_Space: 156Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 0Master_UUID: Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Master_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace:
1 row in set, 1 warning (0.03 sec)
2.3.5 在从数据中开启主从同步
mysql> start slave;
2.3.6 再次查看 slave status
mysql> show slave status \G;
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.217.145Master_User: slaveMaster_Port: 3307Connect_Retry: 30Master_Log_File: mall-mysql-bin.000007Read_Master_Log_Pos: 156Relay_Log_File: mall-mysql-relay-bin.000002Relay_Log_Pos: 329Relay_Master_Log_File: mall-mysql-bin.000007Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 156Relay_Log_Space: 543Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 101Master_UUID: 4d815ecc-e845-11ee-aad4-0242ac110003Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace:
1 row in set, 1 warning (0.00 sec)
下面2项的状态已经由No 变成 Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
3 主从复制测试
3.1主机添加数据
mysql> create database db01;
Query OK, 1 row affected (0.11 sec)mysql> use db01;
Database changed
mysql> create table t1(id int,name varchar(20));
Query OK, 0 rows affected (1.94 sec)mysql> insert t1 values(1,'z3');
Query OK, 1 row affected (0.01 sec)
3.2 从机直接使用
mysql> use db01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | z3 |
+------+------+
1 row in set (0.00 sec)
相关文章:
Docker 安装mysql 主从复制
目录 1 MySql主从复制简介 1.1 主从复制的概念 1.2 主从复制的作用 2. 搭建主从复制 2.1 pull mysql 镜像 2.2 新建主服务器容器实例 3307 2.2.1 master创建 my.cnf 2.2.2 重启master 2.2.3 进入mysql 容器,创建同步用户 2.3 新建从服务器容器实例 3308…...
GPT每日面试题—如何实现二分查找
充分利用ChatGPT的优势,帮助我们快速准备前端面试。今日问题:如何实现二分查找? Q:如果在前端面试中,被问到如何实现二分查找,如果回答比较好,给出必要的代码示例 A:当被问到如何实…...
机器学习神经网络由哪些构成?
机器学习神经网络通常由以下几个主要组件构成: 1. **输入层(Input Layer)**:输入层接受来自数据源(例如图像、文本等)的原始输入数据。每个输入特征通常表示为输入层中的一个节点。 2. **隐藏层ÿ…...
代码随想录算法训练营day19 | 二叉树阶段性总结
各个部分题目的代码题解都在我往日的二叉树的博客中。 (day14到day22) 目录 二叉树理论基础二叉树的遍历方式深度优先遍历广度优先遍历 求二叉树的属性二叉树的修改与制造求二叉搜索树的属性二叉树公共最先问题二叉搜索树的修改与构造总结 二叉树理论基础 二叉树的理论基础参…...
数据库引论:3、中级SQL
一些更复杂的查询表达 3.1 连接表达式 拼接多张表的几种方式 3.1.1 自然连接 natural join,自动连接在所有共同属性上相同的元组 join… using( A 1 , A 2 , ⋯ A_1,A_2,\cdots A1,A2,⋯):使用括号里的属性进行自然连接,除了这些属性之外的共同…...
毕业设计:日志记录编写(3/17起更新中)
目录 3/171.配置阿里云python加速镜像:2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标:构建基本的python环境:运行爬虫程序 1.配置阿里云pytho…...
(一)基于IDEA的JAVA基础7
关系运算符 运算符 含义 范例 结果 等于 12 false ! 不等于 1!2 true > 大于 1>2 false < 小于 …...
MySQL数据库概念及MySQL的安装
文章目录 MySQL数据库一、数据库基本概念1、数据2、数据表3、数据库4、数据库管理系统(DBMS)4.1 数据库的建立和维护功能4.2 数据库的定义功能4.3 数据库的操纵功能4.4 数据库的运行管理功能4.5 数据库的通信功能(数据库与外界对接࿰…...
redis实际应用场景及并发问题的解决
业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候,有千分之三的概率掉落金币,每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群(这个要求暂时不实现) 编写接口&…...
考研数学|汤家凤《1800》基础部分什么时候做完?
从我个人的经验来看,做完汤家凤1800的基础部分在第一轮复习中并不是必须的,但是可以作为一个有效的复习工具。 我认为汤家凤1800的基础部分确实涵盖了考研高数的基础知识点,并且题目难度适中,适合用来巩固基础。在第一轮复习中&a…...
JS的设计模式(23种)
JavaScript设计模式是指在JavaScript编程中普遍应用的一系列经过验证的最佳实践和可重用的解决方案模板,它们用来解决在软件设计中频繁出现的问题,如对象的创建、职责分配、对象间通信以及系统架构等。 设计模式并不特指某个具体的代码片段,…...
[自研开源] MyData v0.7.5 更新日志
开源地址:gitee | github 详细介绍:MyData 基于 Web API 的数据集成平台 部署文档:用 Docker 部署 MyData 使用手册:MyData 使用手册 试用体验:https://demo.mydata.work 交流Q群:430089673 介绍 MyData …...
3月份的倒数第二个周末有感
坐在图书馆的那一刻,忽然感觉时间的节奏开始放缓。今天周末因为我们两都有任务需要完成,所以就选了嘉定图书馆,不得不说嘉定新城远香湖附近的图书馆真的很有感觉。然我不经意回想起学校的时光,那是多么美好且短暂的时光。凝视着窗…...
Java 变得越来越像 Rust
Java 变得越来越像 Rust 介绍 随着编程的增强和复杂性越来越流行,许多编程语言也相互效仿。 Java 也不例外。 尽管社区内部存在问题,Rust 仍逐年赢得了开发人员的喜爱。并且有充分的理由:由于编译器,Rust 使开发人员能够避免整…...
通过git bash 或命令行ssh访问服务器 sftp上传下载文件
上传下载文件 sftp -P 端口 appywIP 示例:sftp -P 10022 appyw25.222.133.222 然后输入密码即可 ls 查看文件 lls 查看本地文件 cd 跳转 lcd 本地跳转 get ... 下载文件 put 本地文件名 远程文件夹 //上传文件 put -r 本地文件夹 远程文件夹 //上传文件夹服务器…...
27 OpenCV 凸包
文章目录 概念Graham扫描算法convexHull 凸包函数示例 概念 什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。 正式定义: 包含点集合S中所有点的最小凸多边形称为凸包 Graham扫描算法 首先选择Y方向最低…...
【GPT概念04】仅解码器(only decode)模型的解码策略
一、说明 在我之前的博客中,我们研究了关于生成式预训练转换器的整个概述,以及一篇关于生成式预训练转换器(GPT)的博客——预训练、微调和不同的用例应用。现在让我们看看所有仅解码器模型的解码策略是什么。 二、解码策略 在之前…...
蔚来-安全开发一面/二面
基本不怎么会渗透测试,本科期间有过大数据隐私保护(密码)的项目,硕士期间有个华为合作的项目一篇在投的ai安全论文 一面(45min) 1.介绍自己 2.介绍一下实习 3.场景题轰炸,主要针对实习中的场景,主要考察…...
Redis Cluster集群模式容器化部署
Redis Cluster集群模式容器化部署 安装Docker和docker-compose准备docker-compose文件准备Redis配置文件Linux内核参数优化启停Redis实例Redis集群搭建 环境准备: IP版本角色端口172.x.x.11RHEL 7.9master6379172.x.x.12RHEL 7.9master6379172.x.x.13RHEL 7.9maste…...
网络原理(6)——IP协议
目录 一、网段划分 现在的网络划分: 1、一般情况下的家庭网络环境 2、IP地址 3、子网掩码 4、网关 以前的网络划分: 二、特殊IP 1、环回 IP 2、主机号为全 0 的IP 3、广播地址IP 三、路由选择(路线规划) 一、网段划分…...
SEO和SEM分别适合哪些具体的营销目标_如何平衡SEO和SEM的投入
SEO和SEM分别适合哪些具体的营销目标 在当今数字化营销的时代,SEO(搜索引擎优化)和SEM(搜索引擎营销)是两种非常重要的工具。它们各有其独特的优势和适用场景,理解它们的不同之处,有助于我们在…...
用树莓派和SG90舵机实现摄像头云台控制:从零调试到精准转动
树莓派SG90舵机打造智能摄像头云台:从硬件连接到PID调参全指南 当你想用树莓派控制摄像头实现自动追踪或远程监控时,一个灵活可靠的云台系统是核心。SG90这类微型舵机因其体积小、价格低成为DIY项目的首选,但要让它们实现精准平滑的运动控制…...
为什么选择Clef Handbook:15个创新政策彻底改变传统雇佣关系
为什么选择Clef Handbook:15个创新政策彻底改变传统雇佣关系 【免费下载链接】handbook An employee handbook built for inclusion 项目地址: https://gitcode.com/gh_mirrors/handbook6/handbook Clef Handbook是一份为包容性而构建的员工手册(…...
yolov8 mobilev3轻量级 注意力机制感兴趣的话点“我想要”和我私聊吧~
yolov8 mobilev3轻量级 注意力机制 感兴趣的话点“我想要”和我私聊吧~...
pySLAM体素重建技术:TSDF与高斯泼溅的深度解析
pySLAM体素重建技术:TSDF与高斯泼溅的深度解析 【免费下载链接】pyslam pySLAM is a hybrid Python/C Visual SLAM pipeline supporting monocular, stereo, and RGB-D cameras. It provides a broad set of modern local and global feature extractors, multiple …...
适配新的gps模块,在Android系统中注意哪些问题
首先理解Android LocationManager与GNSS硬件适配深度涵盖LocationManager功能、GNSS芯片适配接口、文件系统依赖、调试实战四大模块,“LocationManager是Android定位服务的总入口,GNSS HAL层适配,从芯片驱动到Framework层回调,完整…...
PyQt异步编程实战:QThread与信号槽的完美结合
1. 为什么PyQt需要异步编程? 当你用PyQt开发图形界面程序时,最让人头疼的问题就是界面卡死。想象一下,用户点击一个按钮后,整个窗口突然变成白色,鼠标指针变成沙漏,程序就像冻住了一样——这种体验简直糟透…...
幻兽帕鲁存档修复终极指南:告别数据丢失的完整解决方案
幻兽帕鲁存档修复终极指南:告别数据丢失的完整解决方案 【免费下载链接】palworld-host-save-fix Fixes the bug which forces a player to create a new character when they already have a save. Useful for migrating maps from co-op to dedicated servers and…...
如何高效构建雷达系统:Python雷达模拟的完整实战指南
如何高效构建雷达系统:Python雷达模拟的完整实战指南 【免费下载链接】radarsimpy Radar Simulator built with Python and C 项目地址: https://gitcode.com/gh_mirrors/ra/radarsimpy RadarSimPy是一个基于Python和C构建的开源雷达模拟器,为雷达…...
Steam Achievement Manager终极指南:如何完全掌控你的Steam成就系统
Steam Achievement Manager终极指南:如何完全掌控你的Steam成就系统 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager Steam Achievement Manage…...
