centos7 docker Mysql8 搭建主从

Mysql8 搭建主从

  • docker的安装
  • docker-compose的安装
  • 安装mysql
  • 配置主从
    • 在master配置
    • 在slave中配置
    • 在master中创建同步用户
    • 在slave中连接
  • 测试连接
    • 测试配置
    • 测试数据同步
    • 遇到的问题
      • id重复错误
      • 执行事务出错,跳过错误
      • my.cnf 不删除多余配置的错误
      • 可能用到的命令

docker的安装

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE
和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使
用。
本文介绍 Docker CE 的安装使用。
移除旧的版本:

$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

安装一些必要的系统工具:

sudo yum install -y yum-utils device-mapper-persistentdata lvm2

添加软件源信息:

sudo yum-config-manager --add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/dockerce.repo

更新 yum 缓存:

# centos 7
sudo yum makecache fast
# CentOS 8没有fast这个命令
sudo yum makecache

安装 Docker-ce:

sudo yum -y install docker-ce

查看已安装docker版本

docker version

启动 Docker 后台服务

sudo systemctl start docker

开机启动

sudo systemctl enable docker

镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加
速器来解决。
可以使用阿里云的docker镜像地址:https://7qyk8phi.mirror.aliyuncs.co
m
新版的 Docker 使用 /etc/docker/daemon.json (Linux,没有请新
建)。
请在该配置文件中加入:
(没有该文件的话,请先建一个)

{
"registry-mirrors":
["https://7qyk8phi.mirror.aliyuncs.com"]
}

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

检查加速器是否生效
配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是
否生效,在命令行执行 docker info,如果从结果中看到了如下内容,说
明配置成功。

Registry Mirrors:

https://7qyk8phi.mirror.aliyuncs.com/

docker-compose的安装

#运行此命令以下载 Docker Compose 的当前稳定版本
sudo curl -L
"https://github.com/docker/compose/releases/download/1.29.
2/docker-compose-$(uname -s)-$(uname -m)" -o
/usr/local/bin/docker-compose
#对二进制文件应用可执行权限
sudo chmod +x /usr/local/bin/docker-compose
#测试安装
docker-compose --version
#若有docker-compose version 1.29.2, build 5becea4c,则安装成

安装mysql

在你的home路径下创建一个文件 vim docker-compose.yml 将下列内容复制到该文件中保存(改成自己的密码和容器名), 然后执行docker-compose up -d 命令 执行 会按照docker-compose.yml文件中的配置进行安装,会自动创建好docker 容器 ,安装完成后 使用 docker ps -a 命令可以查看

vim docker-compose.yml
docker-compose up -d
docker ps -a

在这里插入图片描述

version: "3.5"services:saber-mysql:image: mysql:8.0container_name: 容器名restart: alwaysenvironment:- MYSQL_ROOT_PASSWORD= 密码ports:- 13306:3306volumes:- /home/mysql/data:/var/lib/mysql- /home/mysql/conf.d:/etc/mysql/conf.dsaber-redis:image: redis:7.0.11container_name: 容器名restart: alwaysvolumes:- /home/redis/data:/data- /home/redis/config/:/usr/local/etc/redis/command: redis-server /usr/local/etc/redis/redis.confports:- 16379:6379

配置主从

在两台服务器上除以上的操作后,可以开始配置主从了,首先测试两台服务器是否联通 通过ping命令进行测试

ping  另一台服务器的IP地址  如 :ping  121.227.45.33

ctrl + c 结束 查看结果

在master配置

在msyql容器成功运行后,可以通过 docker exec -it mysql(容器名)bash 进入容器

docker exec -it mysql(容器名)bash

然后登录到mysql

 mysql  -uroot -p密码

正常后退出容器 exit 退出mysql ctrl + d 可以退出容器

修改master配置文件

在这里插入图片描述
①可以看到mysql的配置映射到了这个路径下,但是不是直接修改这个文件,而是在这个目录下新建配置文件进行配置 这里是从 /etc/my.cnf (使用find / -name my.cnf 找一下 如果没有这个文件,通常是这个)目录下复制了一份配置文件过来cp /etc/my.cnf /home/mysql/conf.d/my.cnf

find / -name my.cnf
cp /etc/my.cnf  /home/mysql/conf.d/my.cnf`

②但是启动msyql的时候会报错,需要删除掉一些原本不需要的配置

vim my.cnf 

③在[mysql]下添加以下配置后,重启docker systemctl restart docker 或 mysql容器 docker restart mysql(容器名)使用命令查看配置是否生效

systemctl restart dockerdocker restart mysql(容器名)
server_id=1
log-bin=mysql-bin
read-only=0
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
binlog_format=STATEMENT
#binlog_format=ROW
#binlog_format=MIXED

其中 server-id 是 MySQL 服务器的唯一标识符(在主从复制中必须唯一),
log-bin 是二进制日志文件的名称前缀(用于记录所有更改),
binlog-do-db 是指定需要复制的数据库名称。

在slave中配置

同msater一样在[mysql]中配置即可,重启后查看是否生效

server_id=2
log-bin=mysql-bin
read-only=1
log-slave-updates=1
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

其中 server-id 是 MySQL 服务器的唯一标识符(在主从复制中必须唯一),
relay-log 是中继日志文件的名称前缀(用于存储从主服务器接收到的二进制日志信息),
log-slave-updates 是指定从服务器记录自己的二进制日志以便后续其他从服务器复制,
read-only 是将从服务器设置为只读模式(以避免在从服务器上进行写操作)。

配置主要是忽略部分系统表的同步, 以及从库开启只读模式.

注: 从库的只读模式只对非 SUPER 用户起作用, 同时不影响主从复制的写功能.

SHOW VARIABLES LIKE 'server_id'; 

命令检查从服务器的 server_id 参数是否已设置为不同于主服务器的值。

在master中创建同步用户

上述步骤测试无问题后,可以进行同步用户的创建和配置了

登录mysql执行

CREATE USER 'sxxx'@'%' IDENTIFIED BY '你的密码';GRANT REPLICATION SLAVE ON *.* TO 'sxxx'@'%';GRANT * ON *.* TO 'sxxx'@'%';FLUSH PRIVILEGES;

在slave中连接

登录mysql,根据master的情况填写一下命令中的参数,在master中的mysql中执行命令 show master status ;

show master status;

CHANGE MASTER TO MASTER_HOST='master服务器地址', MASTER_USER='同步用户名', MASTER_PASSWORD='密码', MASTER_PORT=13306(端口), MASTER_LOG_FILE='mysql-bin.000006(看情况)', MASTER_LOG_POS= 看情况;

示例

CHANGE MASTER TO MASTER_HOST='121.228.45.51',MASTER_PORT=13306, MASTER_USER='sxxxx', MASTER_PASSWORD='124444', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=156;

然后执行命令 ,开启从库

START SLAVE;

使用以下命令检查从服务器当前的复制状态:

测试连接

测试配置

SHOW SLAVE STATUS\G

如果输出中的 Slave_IO_RunningSlave_SQL_Running 都为 Yes,那么说明主从复制已经成功搭建起来了。

如果发现 status 中有任何错误, 则停止从库同步:

stop slave;

排查完原因后, 可能需要重置同步:

reset slave;

重新 start slave 后当看到如下显示说明成功了:

如果: Seconds_Behind_Master 字段为 0,这表示从服务器与主服务器之间的数据同步是实时的,即从服务器已经追上了主服务器。

测试数据同步

Slave_IO_RunningSlave_SQL_Running 都为 Yes,然后在master中创建库和表,以及添加数据,在slave中会自动同步

遇到的问题

目前使用docker和docker-compose 安装好了 msysql8 在两台服务器 ,但是在配置主从的时候 不知道在哪里修改配置文件 使slave(从库)能够从主库中完成同步
目前尝试了docker exec 进入mysql容器内部 临时修改服务id 能够在连接后成功同步连接后的建库和建表操作
但是由于是临时配置的 不太稳定 而且重启后就失效了 不清楚在哪里进行配置 在/etc/my.cnf中配置 不起作用 猜测应该是不应该在这里配置 根据docker-compose.yml中的数据卷映射 到/home/mysql/conf.d 文件 发现是空的 但是/home/mysql/data中的数据映射成功了 目前不清楚在哪里进行配置
在这里插入图片描述

还有 好像只能同步连接后的建库建表操作 连接之前的操作和数据怎么同步(未解决,以下是说明)

在启动主从复制后,如果你没有手动创建数据库和表,那么主服务器上新创建的数据库和表会自动被复制到从服务器上。但是,如果你已经手动创建了数据库或表,那么需要手动将这些数据库和表导入到从服务器上。

需要注意的是,在从服务器上执行 SHOW DATABASES;
命令时,可能不会立即看到主服务器上新创建的数据库。这是因为默认情况下,从服务器会缓存主服务器的 binlog 事件,直到执行 START
SLAVE; 命令时才开始读取并应用这些事件。如果你想在从服务器上立即看到新创建的数据库,可以尝试执行 STOP SLAVE; 和
START SLAVE; 命令以重新启动从服务器的复制进程。

id重复错误

Slave_IO_Running 的状态显示为 “No”,并且在 Last_IO_Error 中出现了以下错误提示:

Fatal error: The slave I/O thread stops because master and slave haveequal MySQL server ids; these ids must be different for replication towork (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual beforeusing it).

这个错误提示的意思是从服务器和主服务器使用了相同的 MySQL 服务器 ID,导致无法进行数据复制。为了解决这个问题,需要在从服务器上修改 MySQL 的服务器 ID。

临时设置id

SET GLOBAL server_id = 2;  临时设置id

检查从服务器的 server_id

SHOW VARIABLES LIKE 'server_id';

执行事务出错,跳过错误

从服务器的主从复制状态显示为 “Slave_IO_Running: Yes”,但是 “Slave_SQL_Running: No”,并且在 Last_SQL_Error 中出现了以下错误提示:

Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ‘ANONYMOUS’ at master log binlog.0

这个错误提示表明在执行事务时出现了错误,导致了主从复制的停止。为了解决这个问题,你可以尝试以下步骤:

STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

这里的 1 是指跳过一个错误的 SQL 语句,如果有多个错误,可以多次执行 SET GLOBAL SQL_SLAVE_SKIP_COUNTER 的命令。

重新配置从服务器的主从复制参数,并开始复制进程

CHANGE MASTER TO MASTER_HOST='', MASTER_USER='', MASTER_PASSWORD='your_password', MASTER_PORT=13306, MASTER_LOG_FILE='binlog.000006', MASTER_LOG_POS=771;
START SLAVE;

永久配置跳过错误

在这里插入图片描述

将 <错误代码> 替换为您希望跳过的特定错误代码。如果要跳过多个错误代码,可以使用英文逗号分隔它们,例如:

slave_skip_errors = 1062,1050

my.cnf 不删除多余配置的错误

Can’t read dir of ‘/etc/my.cnf.d’ (OS errno 2 - No such file or directory)mysql: [ERROR] Stopped processing the ‘includedir’ directive in file /etc/mysql/conf.d/my.cnf at line 28.mysql: [ERROR] Stopped processing the ‘includedir’ directive in file /etc/mysql/my.cnf at line 29.mysql: [Warning]Using a password on the command line interface can be insecure.ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

有几个问题需要解决:

/etc/my.cnf.d 目录不存在:该错误提示表明 /etc/my.cnf.d 目录不存在。在 CentOS 7的默认安装中,MySQL 的配置文件目录通常是 /etc/mysql/conf.d 而不是 /etc/my.cnf.d。请确保您在命令行或配置文件中正确指定了正确的路径。

includedir 指令的处理停止:该错误提示表明 MySQL 在处理 /etc/mysql/conf.d/my.cnf 和
/etc/mysql/my.cnf 文件时遇到了问题。可能是由于文件中的某些配置错误导致的。请检查这两个文件的第 28 行和第 29行的内容,并确保没有语法错误或其他问题。

无法通过 socket 连接到本地 MySQL 服务器:该错误提示表示无法通过 /var/run/mysqld/mysqld.sock文件的 socket 连接到本地的 MySQL 服务器。这可能是由于 MySQL服务器未启动或配置错误导致的。您可以尝试执行以下步骤来解决此问题:

检查 MySQL 服务器是否已正确启动。您可以使用 systemctl status mysqld 命令来检查 MySQL 服务器的状态。
如果 MySQL 服务器未启动,请使用 systemctl start mysqld 命令启动它。 如果 MySQL服务器已启动但仍无法连接,请检查 /etc/my.cnf 或 /etc/mysql/my.cnf 文件中的 socket配置项,并确保它与实际的 socket 文件路径匹配。
最后,请确保您在命令行中使用密码进行连接时谨慎操作,因为这可能存在安全风险。建议使用安全的方式连接到 MySQL 服务器,如使用配置文件或环境变量来提供密码。

用户认证方式出错

error connecting to master ‘sxy@121.229.41.41:13306’ - retry-time: 60retries: 1 message: Authentication plugin ‘caching_sha2_password’ reported error: Authenticat

在这里插入图片描述

ALTER USER 'user'@'ip或%' IDENTIFIED WITH mysql_native_password BY 'your_password';

centos7 服务器改名

要在 CentOS 7 服务器上更改主机名,可以按照以下步骤进行操作:

1.登录到 CentOS 7 服务器,以具有管理员权限的用户身份(例如 root 用户)。

2.打开终端,并执行以下命令来编辑 /etc/hostname 文件:

vim /etc/hostname

3.在编辑器中,将当前的主机名替换为新的主机名,并保存文件。

4.重启服务器,以使主机名更改生效:

reboot

5.在服务器重新启动后,新的主机名将生效。

可能用到的命令

删除容器docker rm -f 容器名或id删除镜像 docker rmi  镜像名和id查看镜像信息docker images mysql赋予新用户全部权限示例:GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';查看当前MySQL用户及其权限:SELECT User, Host, authentication_string FROM mysql.user;确认新用户具有创建数据库的权限。如果该用户没有创建数据库的权限,则可以使用以下命令授权:GRANT CREATE ON *.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;如果在远程主机上也需要授予 new_user 用户创建数据库的权限,则可以使用以下命令:GRANT CREATE ON *.* TO 'new_user'@'remote_host';
FLUSH PRIVILEGES;

备注: 部分问题参考https://www.jianshu.com/p/4d09ee0e973f解决

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS添加三方库冲突了

1 duplicate symbol for architecture arm64 改为 在Build Settings->Other link flags中添加-dead_strip&#xff0c;如果Other link flags中有-all_load与-force_load则删掉&#xff0c;只填-dead_strip

倒计时4天|谈思AutoSec智能汽车安全攻防实训课程火热报名中~

车联网技术是国内外的研究热点问题。车联网技术与传统汽车行业深度融合&#xff0c;促进了自动驾驶技术在多种智能场景下的部署与应用。然而&#xff0c;车联网技术智能化、共享化、网联化发展的同时也带来了不可避免的安全问题&#xff0c;如硬件安全、数据安全、通信安全、云…

前端:如何让background背景图片进行CSS自适应

在设置login背景时&#xff0c;找到了一张这样的图片&#xff1a; 但是设置成login背景时&#xff0c;如果没有做一些css适应设置&#xff0c;图片就变样了&#xff0c;变成了这样&#xff1a; 严重变形了&#xff0c;这就造成了一种理想与现实的差距。 若想解决这个自适应问题…

JavaScript实现飘窗功能

实现飘窗功能很简单 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

遗留系统现代化:7步入门数字化转型

遗留系统对企业来说可能是一把双刃剑。虽然它们曾经对企业很有帮助&#xff0c;但随着时间的推移&#xff0c;这些应用程序、系统和架构变得过时&#xff0c;最终会限制企业发展。 为了实现保持竞争优势所需的扩展、业务敏捷性和数字化转型&#xff0c;越来越多企业意识到需要…

低压无功补偿在分布式光伏现场中的应用

摘要&#xff1a;分布式光伏电站由于建设时间短、技术成熟、收益明显而发展迅速&#xff0c;但光伏并网引起用户功率因数异常的问题也逐渐凸显。针对分布式光伏电站接入配电网后功率因数降低的问题&#xff0c;本文分析了低压无功补偿装置补偿失效的原因&#xff0c;并提出了一…

【BigDecimal类—常用API系列】解决java浮点计算精度损失问题

文章目录 Java浮点计算精度损失问题BigDecimal进行精确运算的解决方案 Java浮点计算精度损失问题 BigDecimal它是干什么用的呢&#xff1f;什么是java浮点计算精度损失问题&#xff1f;我们先看一段代码&#xff0c;看这个代码有什么问题&#xff1f;再说BigDeimal这个类是干什…

Java:TCP 通信方法(基本发送 + 接收)并 实现文件传输且反馈

TCP 通信编程 TCP:是一种可靠的网络协议&#xff0c;再通信两端都建立一个Socket对象。 通信之前要保证连接已经建立。 通过Socket产生IO流进行通信。 创建对象时&#xff0c;会连接服务器&#xff0c;连接不上&#xff0c;会报错。 所以&#xff0c;先运行服务端&#xff0c;再…

【C语言】数据在内存中的存储

目录 练笔 整型数据的存储&#xff1a; char 型数据——最简单的整型 整型提升&#xff1a; 推广到其他整形&#xff1a; 大小端&#xff1a; 浮点型数据的存储&#xff1a; 存储格式&#xff1a; 本篇详细介绍 整型数据&#xff0c;浮点型数据 在计算机中是如何储存的。…

基于SSM的小儿肺炎知识管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

深度学习之网络优化与正则化

视频链接&#xff1a;7.1 神经网络优化的特点_哔哩哔哩_bilibili 神经网络优化的特点 网络优化的难点 &#xff08;1&#xff09;网络结构差异大&#xff1a;不同模型之间的结构差异大——没有通用的优化算法、超参数多 &#xff08;2&#xff09;非凸优化问题&#xff1a;…

maui sqlite开发一个商城加购物车的演示(3)

购物车界面及代码 <?xml version"1.0" encoding"utf-8" ?> <ContentPage xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:syncfusion"clr-namesp…

基于ssm vue的风景文化管理平台源码和论文

摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;基于vue的木里风景文化管理平台也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对…

【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找&#xff0c;向量只会在尾部增加删除。 题目 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你一个二维整数数组 tasks &#xff0c;其中 ta…

SpringCloud微服务 【实用篇】| Docker启示录

目录 一&#xff1a;Docker启示录 1. Docker启示录 2. Docker和虚拟机的区别 3. Docker架构 4. Centos7安装Docker 4.1. 卸载 4.2. 安装docker 4.3. 启动docker 4.4. 配置镜像加速 前些天突然发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽…

yaml 文件格式

yaml文件&#xff1a;是一种标记语言&#xff0c;以竖列形式展示序列化的时间格式&#xff0c;可读性高 类似于json格式。语法简单。 yaml通过缩进来表示数据结构&#xff0c;连续的项目用-减号来表示。 yaml文件使用的注意事项&#xff1a; 1&#xff0c;大小写敏感 2&am…

HT4125 低压CMOS 缓冲门器件 单电源电压转换

​​亿胜盈科HT4125 是一款低压CMOS 缓冲门器件&#xff0c;可运行在针对便携式和电池设备的更宽电压范围内。 其采用了较低阀值电路来设计此输入&#xff0c;以便匹配Vcc 3.3V 时的1.8V 输入逻辑&#xff0c;并且可被用 在1.8V 至3.3V 电平上行转换器功能中。此外&#xff0c;…

数据爬虫:获取申万一级行业数据

目录 1. 获取访问接口 2. 链接网址 3. 链接名单 免责声明&#xff1a;本文由作者参考相关资料&#xff0c;并结合自身实践和思考独立完成&#xff0c;对全文内容的准确性、完整性或可靠性不作任何保证。同时&#xff0c;文中提及的数据仅作为举例使用&#xff0c;不构成推荐…

如何应对网站的Canvas等高级指纹和MAC地址检测?

随着互联网技术的发展&#xff0c;网站和应用程序采用了越来越多的高级指纹和MAC地址检测技术来追踪用户和识别其身份。其中&#xff0c;Canvas指纹是一种常见的高级指纹检测技术&#xff0c;而MAC地址是设备的唯一标识符。在本文中&#xff0c;我们将了解Canvas指纹和MAC地址的…

联通宽带+老毛子Padavan固件 开启IP v6

联通宽带开启IP v6 参考&#xff1a; 联通宽带开启 IPV6 的方法_联通ipv6怎么开通-CSDN博客 个人宽带如何开启IPv6网络访问 - 知乎 (zhihu.com) 首先&#xff0c;你要确定当前你所在的地区运营商已经开通了IPV6&#xff0c;可以使用手机流量 IP查询(ipw.cn) | IPv6测试 | IPv…