Linux远程连接

Linux centos设置静态ip

参考:https://blog.csdn.net/weixin_45533131/article/details/128002480

FileZilla安装下载与使用

参考:https://blog.csdn.net/Passerby_Wang/article/details/125298958

 FileZilla是免费开源的FTP软件,,分为客户端版本和服务器版本,具备所有的FTP软件功能,具备极好的可控性及条理性。

FileZilla传输功能据说较强大,但winSCP报错较详细。建议搭配使用。

注意:FileZilla与winSCP只能上传到不需要root权限的文件夹

centos安装JDK1.8

参考:https://blog.csdn.net/dgfdhgghd/article/details/123207017

https://blog.csdn.net/qq_43711507/article/details/125002451

jdk-8u361-linux-x64.tar.gz下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

先传输到downloads文件夹,后复制到/usr/local/java

mkdir /usr/local/java
tar -zxvf jdk-8u361-linux-x64.tar.gz
mv jdk1.8.0_361 /usr/local/java

配置环境变量

vim /etc/profile

在此文件末尾添加如下命令

export JAVA_HOME=/usr/local/java/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

重新加载配置文件,使配置文件生效。

source /etc/profile

测试

java -version

centos安装mysql8

mysql8.0.23据说很稳定

参考:https://blog.csdn.net/xiaoxiaochunmei/article/details/127801648

mysql默认安装文件夹:/var/lib/mysql必须可修改

日志文件架:/var/log/mysqld.log

linux下mysql配置文件/etc/my.cnf

sudo /etc/init.d/mysql restart
2023-07-14T02:13:48.996317Z 1 [ERROR] [MY-012278] [InnoDB] InnoDB: The innodb_system data file 'ibdata1' must be writable
参考:http://www.manongjc.com/detail/22-fwuxopogkycsznc.html
修复:chmod -R 777 /var/lib/mysql

mysql官网下载:https://dev.mysql.com/downloads/mysql/

mysql重置密码错误参考:

  1. https://zhuanlan.zhihu.com/p/106320403

    alter user user() identified by "123456"; 
    
  2. https://blog.csdn.net/weixin_46018506/article/details/121273337

远程连接:

select host, user from user;

update user set user.host='%' where user.user='root';

flush privileges;

2059 'caching_sha2_password' 错误解决:https://blog.csdn.net/sinat_41721615/article/details/105886386

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误解决:https://blog.csdn.net/chendongpu/article/details/119877240

# 更改加密方式
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
# 更改用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;

异常

1067 - Invalid default value for 'gmt_create'

set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

centos防火墙

参考:

https://cloud.tencent.com/developer/article/1493589?from=15425&areaSource=102001.2&traceId=m1B0pHwhoLv0jXvUSjV43

# 查询已开放的端口
netstat -anp
# 开放3306端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
# 查询指定端口是否已开
sudo firewall-cmd --query-port=3306/tcp
1:查看防火状态
systemctl status firewalld
service iptables status

2:暂时关闭防火墙
systemctl stop firewalld
service iptables stop

3:永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off

4:重启防火墙
systemctl enable firewalld
service iptables restart

5:永久关闭后重启
chkconfig iptables on 

centos-docker

参考:

http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html#配置镜像

架构概念

通过下图可以得知,Docker在运行时分为Docker引擎(服务端守护进程)客户端工具,我们日常使用各种docker命令,其实就是在使用客户端工具Docker引擎进行交互。

docker

# Client 客户端

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

# Host 主机(Docker 引擎)

一个物理或者虚拟的机器用于执行Docker守护进程和容器。

# Image 镜像

什么是Docker镜像?简单的理解,Docker镜像就是一个Linux文件系统(Root FileSystem),这个文件系统里面包含可以运行在Linux内核的程序以及相应的数据。

通过镜像启动一个容器,一个镜像就是一个可执行的包,其中包括运行应用程序所需要的所有内容:包含代码,运行时间,库,环境变量和配置文件等。

Docker 把 App 文件打包成为一个镜像,并且采用类似多次快照的存储技术,可以实现:

  • 多个App可以共用相同的底层镜像(初始的操作系统镜像);
  • App运行时的IO操作和镜像文件隔离;
  • 通过挂载包含不同配置/数据文件的目录或者卷(Volume),单个App镜像可以用来运行无数个不同业务的容器。

# Container 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

Docker 面向对象
镜像
容器 对象

# 镜像分层

Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。

一、安装准备

1、前提条件

  • Docker可以运行在Windows、Mac、CentOS、Ubuntu等操作系统上

  • Docker支持以下的CentOS版本:

    • CentOS 7 (64-bit)
    • CentOS 6.5 (64-bit) 或更高的版本
  • 目前,CentOS 仅发行版本中的内核支持 Docker

    • Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
    • Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

2、查看系统内核

uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。

uname -r

3、查看已安装的CentOS版本信息

cat /etc/redhat-release

二、CentOS7安装docker

官网:http://www.docker.com

安装手册:https://docs.docker.com/install/linux/docker-ce/centos(CE-社区版)

卸载旧版本

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

1、安装需要的软件包

yy -utils提供了yy-config-manager相关功能,device-mapper-persistent-data和lvm2是设备映射器驱动程序所需要的。

yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2

2、设置docker下载镜像

推荐阿里云下载地址

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

3、更新yum软件包索引

我们在更新或配置yum源之后,通常都会使用yum makecache 生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度

yum makecache fast

4、安装docker ce

yum install -y docker-ce

5、启动docker

systemctl start docker

6、版本验证

docker version

7、设置开机启动

#查看服务是否自动启动(是:enabled | 否:disabled)
systemctl list-unit-files|grep docker.service 

#设置开机启动:如不是enabled可以运行如下命令设置自启动
systemctl enable docker
#重新加载服务配置
systemctl daemon-reload 

#如果希望不进行自启动,运行如下命令设置
systemctl disable docker
#重新加载服务配置
systemctl daemon-reload 

三、卸载docker

systemctl stop docker 
yum remove -y docker-ce
rm -rf /var/lib/docker

三 、docker命令

镜像命令

官方文档:https://docs.docker.com/reference

# 查看镜像

执行命令:docker images

属性 说明
REPOSITORY 镜像在仓库中的名称
TAG 镜像标签
IMAGE ID 镜像 ID
CREATED 镜像的创建日期
SIZE 镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下。

# 搜索镜像

如果你需要从网络中查找需要的镜像,可以通过以下命令搜索。

执行命令:docker search 镜像名称

属性 说明
NAME 镜像名称
DESCRIPTION 镜像描述
STARS 用户评价
OFFICIAL 是否为官方构建
AUTOMATED Docker Hub 自动构建

# 拉取镜像

拉取镜像就是从中央仓库下载镜像到本地。

执行命令:docker pull 镜像名称

如果不声明tag镜像标签信息则默认拉取latest版本。

# 删除镜像

按镜像ID删除单个镜像。

执行命令:docker rmi 镜像ID

按镜像ID删除多个镜像。

执行命令:docker rmi 镜像ID 镜像ID 镜像ID

docker images -q可以查询到所有镜像的ID,通过组合命令可以实现删除所有镜像的操作。

执行命令:docker rmi docker images -q

提示

注意:如果通过某个镜像创建了容器,则该镜像无法删除。
解决办法:先删除镜像中的容器,再删除该镜像。

# 容器命令

# 查看容器

查看正在运行的容器。

执行命令:docker ps

属性 说明
CONTAINER ID 容器 ID
IMAGE 所属镜像
COMMAND 启动容器时运行的命令
CREATED 创建时间
STATUS 容器状态
PORTS 端口
NAMES 容器名称

查看停止的容器。

执行命令:docker ps -f status=exited

查看所有容器(包括运行和停止)。

执行命令:docker ps -a

查看最后一次运行的容器。

执行命令:docker ps -l

列出最近创建的 n 个容器。

执行命令:docker ps -n 5

# 创建与启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • -i:表示运行容器;
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端;
  • --name:为创建的容器命名;
  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
  • -d:在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射
  • -P:随机使用宿主机的可用端口与容器内暴露的端口映射。

# 创建并进入容器

下面这行命令的意思就是通过镜像 AA 创建一个容器 BB,运行容器并进入容器的/bin/bash

docker run -it --name 容器名称 镜像名称:标签 /bin/bash

注意:Docker容器运行必须有一个前台进程,如果没有前台进程执行,容器认为是空闲状态,就会自动退出。

# 退出当前容器

exit

# 守护式方式创建容器

docker run -di --name 容器名称 镜像名称:标签

# 登录守护式容器方式

docker exec -it 容器名称|容器ID /bin/bash

# 停止与启动容器

# 停止容器
docker stop 容器名称|容器ID

# 启动容器
docker start 容器名称|容器ID

# 文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令。

docker cp 需要拷贝的文件或目录 容器名称:容器目录

也可以将文件从容器内拷贝出来。

docker cp 容器名称:容器目录 需要拷贝的文件或目录

# 目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。

但是容器被删除的时候,宿主机的内容并不会被删除。如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。

创建容器添加-v参数,格式为宿主机目录:容器目录,例如:

docker run -di -v /home/ruoyi/data:/usr/local/data --name centos7-01 centos:7

# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名

提示

目录挂载操作可能会出现权限不足的提示。这是因为CentOS7中的安全模块SELinux把权限禁掉了,在docker run时通过--privileged=true给该容器加权限来解决挂载的目录没有权限的问题。

  • 匿名挂载

匿名挂载只需要写容器目录即可,容器外对应的目录会在/var/lib/docker/volumes中生成。

# 匿名挂载
docker run -di -v /usr/local/data --name centos7-02 centos:7
# 查看 volume 数据卷信息
docker volume ls
  • 具名挂载

具名挂载就是给数据卷起了个名字,容器外对应的目录会在/var/lib/docker/volume中生成。

# 匿名挂载
docker run -di -v docker_centos_data:/usr/local/data --name centos7-03 centos:7
# 查看 volume 数据卷信息
docker volume ls
  • 指定目录挂载

之前挂载方式就属于指定目录挂载,这种方式的挂载不会在/var/lib/docker/volume目录生成内容。

docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
  • 查看目录挂载关系

通过docker volume inspect数据卷名称 可以查看该数据卷对应宿主机的目录地址。

执行命令:docker volume inspect docker_centos_data

通过docker inspect容器ID或名称 ,在返回的JSON节点中找到Mounts,可以查看详细的数据挂载信息。

  • 只读/读写
# 只读。只能通过修改宿主机内容实现对容器的数据管理。
docker run -it -v /宿主机目录:/容器目录:ro 镜像名

# 读写,默认。宿主机和容器可以双向操作数据。
docker run -it -v /宿主机目录:/容器目录:rw 镜像名

# 删除容器

# 删除指定容器
docker rm 容器名称|容器ID

# 删除多个容器
docker rm 容器名称|容器ID 容器名称|容器ID

# 查看容器 IP 地址

我们可以通过以下命令查看容器的元信息。

docker inspect 容器名称|容器ID

也可以直接执行下面的命令直接输出 IP 地址。

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID

Dockerfile

Docker中构建镜像最常用的方式,就是使用DockerfileDockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。官方文档:https://docs.docker.com/engine/reference/builder

# Dockerfile 常用指令

指令 语法 说明
FROM FROM <image>:<tag> 指明构建的新镜像是来自于哪个基础镜像,如果没有选择tag,那么默认值为latest
MAINTAINER MAINTAINER <name> 指明镜像维护者及其联系方式(一般是邮箱地址)。官方说明已过时,推荐使用LABEL
LABEL LABEL <key>=<value> ... 功能是为镜像指定标签。也可以使用LABEL来指定镜像作者
RUN RUN <command> 构建镜像时运行的Shell命令,比如构建的新镜像中我们想在/usr/local目录下创建一个java目录
ADD ADD <src>... <dest> 拷贝文件或目录到镜像中。src 可以是一个本地文件,还可以是一个url。然后自动下载和解压
COPY COPY <src>... <dest> 拷贝文件或目录到镜像中。用法同 ADD,只是不支持自动下载和解压
EXPOSE EXPOSE <port> [<port>/<protocol>...] 暴露容器运行时的监听端口给外部,可以指定端口是监听 TCP 还是 UDP,如果未指定协议,则默认为 TCP
ENV ENV <key>=<value> ... 设置容器内环境变量
CMD CMD ["executable","param1","param2"] 启动容器时执行的Shell命令。在Dockerfile中只能有一条CMD指令。如果设置了多条CMD,只有最后一条会生效
ENTRYPOINT ENTRYPOINT ["executable", "param1", "param2"] 启动容器时执行的 Shell 命令,同 CMD 类似,不会被 docker run 命令行指定的参数所覆盖,如果设置了多条ENTRYPOINT,只有最后一条会生效
WORKDIR WORKDIR param 为 RUN、CMD、ENTRYPOINT 以及 COPY 和 AND 设置工作目录
VOLUME VOLUME ["param"] 指定容器挂载点到宿主机自动生成的目录或其他容器。一般的使用场景为需要持久化存储数据时

# 构建镜像

Dockerfile文件编写好以后,真正构建镜像时需要通过docker build命令。

docker build命令用于使用Dockerfile创建镜像。

# 使用当前目录的 Dockerfile 创建镜像
docker build -t mycentos:7 .

# 通过 -f Dockerfile 文件的位置创建镜像
docker build -f /home/ruoyi/docker/Dockerfile -t mycentos:7 .
  • -f:指定要使用的 Dockerfile 路径;
  • --tag, -t:镜像的名字及标签,可以在一次构建中为一个镜像设置多个标签。

# Dockerfile 实践

接下来我们通过基础镜像centos:7,在该镜像中安装jdktomcat以后将其制作为一个新的镜像mycentos:7

创建目录,编写Dockerfile文件

mkdir -p /usr/local/`dockerfile`

执行命令:vi Dockerfile,写入信息。

# 指明构建的新镜像是来自于`centos:7`基础镜像
FROM centos:7
# 通过镜像标签声明了作者信息
LABEL maintainer="ruoyi.vip"

# 设置工作目录
WORKDIR /usr/local
# 新镜像构建成功以后创建指定目录
RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
# 拷贝文件到镜像中并解压
ADD jdk-8u111-linux-x64.tar.gz /usr/local/java
ADD apache-tomcat-8.5.27.tar.gz /usr/local/tomcat
# 暴露容器运行时的 8080 监听端口给外部
EXPOSE 8080
# 设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_111
ENV PATH $PATH:$JAVA_HOME/bin
# 启动容器时启动 tomcat
CMD ["/usr/local/tomcat/apache-tomcat-8.5.27/bin/catalina.sh", "run"]

构建镜像

docker build -f /home/ruoyi/docker/Dockerfile -t mycentos:test .

启动镜像

docker run -di --name mycentos -p 8080:8080 mycentos:test

进入容器

docker exec -it mycentos7 /bin/bash

# 镜像构建历史

docker history 镜像名称:标签|ID
docker history mycentos:7

四、docker常用命令

docker文件中不允许出现 ‘#’

拉取镜像

docker pull ...

创建与启动容器

docker run ...

卸载容器

docker rm

进入容器执行命令

docker exec -it mysql /bin/bash

Docker Compose

通过前面几篇文章的学习,我们可以通过Dockerfile文件让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,或者开发一个Web应用,除了Web服务容器本身,还需要数据库服务容器、缓存容器,甚至还包括负载均衡容器等等。

Docker Compose恰好满足了这样的需求,它是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序所需要的服务。然后使用一个命令,就可以通过YAML配置文件创建并启动所有服务。

Docker Compose`项目是`Docker`官方的开源项目,来源于之前的`Fig`项目,使用`Python`语言编写。负责实现对`Docker`容器集群的快速编排。项目地址为:`https://github.com/docker/compose/releases

Docker Compose使用的三个步骤为:

  • 使用Dockerfile文件定义应用程序的环境;
  • 使用docker-compose.yml文件定义构成应用程序的服务,这样它们可以在隔离环境中一起运行;
  • 执行docker-compose up命令来创建并启动所有服务。

# Compose 安装

参考: https://blog.csdn.net/weixin_39518516/article/details/131941379

官方文档:https://docs.docker.com/compose/install/

您可以在macOSWindowsLinux上运行Compose。本文演示基于Linux环境的安装。我们可以使用curl命令从Github下载它的二进制文件来使用,运行以下命令下载Docker Compose的当前稳定版本。或者从网页下载后上传至服务器指定目录/usr/local/bin也行。

/usr/local/bin
chmod a+x /usr/local/bin/docker-compose

docker-mysql

一主多从配置

服务器规划:使用docker方式创建,主从服务器IP一致,端口号不一致

  • 主服务器:容器名zhiyou-mysql-master,端口3309
  • 从服务器:容器名zhiyou-mysql-slave1,端口3307
  • 从服务器:容器名zhiyou-mysql-slave2,端口3308

注意:如果此时防火墙是开启的,则先关闭防火墙,并重启docker,否则后续安装的MySQL无法启动

#关闭docker
systemctl stop docker
#关闭防火墙
systemctl stop firewalld
#启动docker
systemctl start docker

准备主服务器

  • step1:在docker中创建并启动MySQL主服务器:端口3309
docker pull mysql:8.0.29        
# 拉取mysql,版本8
docker images              
# 查看拉取到本地的mysql镜像
docker run -d \
-p 3309:3309 \
-v /zhiyou/mysql/master/conf:/etc/mysql/conf.d \
-v /zhiyou/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name zhiyou-mysql-master \
mysql:8.0.29
  • step2:创建MySQL主服务器配置文件:

默认情况下MySQL的binlog日志是自动开启的,可以通过如下配置定义一些可选配置

vim /zhiyou/mysql/master/conf/my.cnf

配置如下内容

[mysqld]
# 服务器唯一id,默认值1
server-id=1
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
#binlog-do-db=mytestdb
# 设置不需要复制的数据库
#binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema
port = 3309 

重启MySQL容器

docker ps -a
# 查看所有容器
docker restart zhiyou-mysql-master

navicat连接不到docker-mysql可能是端口不对,参考:

https://blog.csdn.net/csdnhwl/article/details/122191843

binlog格式说明:

  • binlog_format=STATEMENT:日志记录的是主机数据库的写指令,性能高,但是now()之类的函数以及获取系统参数的操作会出现主从数据不同步的问题。

  • binlog_format=ROW(默认):日志记录的是主机数据库的写后的数据,批量操作时性能较差,解决now()或者 user()或者 @@hostname 等操作在主从机器上不一致的问题。

  • binlog_format=MIXED:是以上两种level的混合使用,有函数用ROW,没函数用STATEMENT,但是无法识别系统变量

  • step3:使用命令行登录MySQL主服务器:

#进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码
docker exec -it zhiyou-mysql-master env LANG=C.UTF-8 /bin/bash
#进入容器内的mysql命令行
mysql -u root -p
#查看密碼加密方式
use mysql;
select host,user,plugin,authentication_string from user;
#修改默认密码校验方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 可能需要修改远程连接用户
use mysql;
select host, user from user;
update user set user.host='%' where user.user='root';
flush privileges;
  • step4:主机中创建slave用户:
-- 创建slave用户
CREATE USER 'zhiyou_slave'@'%';
-- 设置密码
ALTER USER 'zhiyou_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'zhiyou_slave'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
abc
  • step5:主机中查询master状态:

执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

reset master;
SHOW MASTER STATUS;

记下FilePosition的值。执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

准备从服务器

可以配置多台从机slave1、slave2...,这里以配置slave1为例

  • step1:在docker中创建并启动MySQL从服务器:端口3307
docker run -d \
-p 3307:3307 \
-v /zhiyou/mysql/slave1/conf:/etc/mysql/conf.d \
-v /zhiyou/mysql/slave1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name zhiyou-mysql-slave1 \
mysql:8.0.29

docker ps 查看镜像是否启动

  • step2:创建MySQL从服务器配置文件:
vim /zhiyou/mysql/slave1/conf/my.cnf
vim /zhiyou/mysql/slave1/conf/auto.cnf

配置如下内容:

my.cnf

[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=2
# 中继日志名,默认xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin
port = 3307
[client]

select uuid();

auto.cnf

[auto]
server-uuid=8251e6e5-2f7e-11ee-b197-000c29748db8
# 按照这个16进制格式,修改server-uuid,重启mysql即可

重启MySQL容器

docker restart zhiyou-mysql-slave1
  • step3:使用命令行登录MySQL从服务器:
#进入容器:
docker exec -it zhiyou-mysql-slave1 env LANG=C.UTF-8 /bin/bash
#进入容器内的mysql命令行
mysql -u root -p
#修改默认密码校验方式
select host,user,plugin,authentication_string from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  • step4:在从机上配置主从关系:

从机上执行以下SQL操作

CHANGE MASTER TO MASTER_HOST='192.168.152.153', 
MASTER_USER='zhiyou_slave',MASTER_PASSWORD='123456', MASTER_PORT=3309,
MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=157,get_master_public_key=1; 

2.3、启动主从同步

启动从机的复制功能,执行SQL:

stop slave;
reset slave;
START SLAVE;
-- 查看状态(不需要分号)
SHOW SLAVE STATUS\G

两个关键进程:下面两个参数都是Yes,则说明主从配置成功!

测试數據:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for t_order
-- ----------------------------
DROP TABLE IF EXISTS `t_order`;
CREATE TABLE `t_order` (
  `id` bigint NOT NULL,
  `orderNo` char(255) DEFAULT NULL,
  `userId` bigint DEFAULT NULL,
  `amount` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `userId` (`userId`),
  CONSTRAINT `userId` FOREIGN KEY (`userId`) REFERENCES `t_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of t_order
-- ----------------------------
INSERT INTO `t_order` VALUES ('0', '121', '1', '12');

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `uname` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', '张三丰');

CentOS mysql集群:主从复制

参考:https://blog.csdn.net/qq_41296669/article/details/124460465

  1. 测试环境
主服务器ip: 192.168.152.153
从服务器ip192.168.152.154
mysql版本: mysql8.0.12(推荐mysql8.0.23)
linux版本: Centos7

主机:/etc/my.cnf

#[必须]主服务器唯一ID
server-id=1
#[必须]启用二进制日志,指名路径。比如:自己本地的路径/log/mysqlbin
log-bin=mysql-bin
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
read-only=0
#设置日志文件保留的时长,单位是秒
binlog_expire_logs_seconds=6000
#控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=200M
#[可选]设置不要复制的数据库
binlog-ignore-db=test
#[可选]设置需要复制的数据库,默认全部记录。比如:binlog-do-db=atguigu_master_slave
binlog-do-db=需要复制的主数据库名字
#[可选]设置binlog格式
binlog_format=STATEMENT

binlog格式设置:

STATEMENT模式(基于SQL语句的复制(statement-based replication, SBR))
ROW模式(基于行的复制(row-based replication, RBR))
MIXED模式(混合模式复制(mixed-based replication, MBR))

从机配置文件

要求主从所有配置项都配置在my.cnf 的[mysqld] 栏位下,且都是小写字母。

#[必须]从服务器唯一ID
server-id=2
#[可选]启用中继日志
relay-log=mysql-relay

重启后台mysql服务,使配置生效。

systemctl restart mysqld

主机:建立账户并授权

#在主机MySQL里执行授权主从复制的命令
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'从机器数据库IP' IDENTIFIED BY 'abc123';
#5.5,5.7

注意:如果使用的是MySQL8,需要如下的方式建立账户,并授权slave:

CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则见下面。
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

查询Master的状态,并记录下File和Position的值。

show master status;

从机:配置需要复制的主机

步骤1:从机上复制主机的命令

CHANGE MASTER TO
MASTER_HOST='主机的IP地址',
MASTER_USER='主机用户名',
MASTER_PASSWORD='主机用户名的密码',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体值;

舉例

CHANGE MASTER TO MASTER_HOST='192.168.152.153',MASTER_USER='slave1',MASTER_PASSWORD='123456',MASTER_LOG_FILE='musql-bin.000014',MASTER_LOG_POS=1119;

最後:

#启动slave同步
START SLAVE;

查看主從複製是否完成

show slave status \G;

重啓:

stop slave;
reset slave; 
#删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件
start slave;

报错

  • 报错:Mysql主从架构报错-Fatal error: The slave I/O thread stops because master and slave have equal MySQL server

参考:https://blog.csdn.net/co1590/article/details/120190659

  • 报错:[ERROR] Found option without preceding group in config file /etc/mysql/conf.d/my.cnf at line 1.

参考:https://geek-docs.com/mysql/mysql-ask-answer/281_mysql_mysql_mycnf_file_found_option_without_preceding_group.html

  • 报错:ANONYMOUS performance_schema.replication_applier_status_by_worker table

Query: 'CREATE USER 'zhiyou_slave'@'%' IDENTIFIED WITH 'caching_sha2_password'

select * from performance_schema.replication_applier_status_by_worker;

參考:

https://blog.csdn.net/qun7559/article/details/129226497

https://zhuanlan.zhihu.com/p/354618063

  • 從庫常見錯誤:

https://blog.csdn.net/xili2532/article/details/112194710?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-112194710-blog-126022008.235^v38^pc_relevant_default_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-112194710-blog-126022008.235^v38^pc_relevant_default_base

搭建完成,可創建一個數據庫進行測試。

https://blog.csdn.net/MovemOemVeovE/article/details/126022008

centos7安装zookeeper

参考:https://blog.csdn.net/m0_49683806/article/details/124626742

关闭防火墙:

systemctl status firewalld
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

新建用户

sudo adduser hadoop

修改root用户的密码

passwd hadoop

安装

tar -zxvf zookeeper-3.4.5.tar.gz
mv zookeeper-3.4.5 /home/hadoop/zookeeper
cd /home/hadoop
cd conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

zoo.cfg

#tickTime:CS通信心跳时间
tickTime=2000  
#initLimit:LF初始通信时限
initLimit=5  
#syncLimit:LF同步通信时限
syncLimit=2
#dataDir:数据文件目录
dataDir=/home/hadoop/zookeeper/tmp
#clientPort:客户端连接端口 
clientPort=2181
#服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
server.1=192.168.152.153:2888:3888
server.2=192.168.152.154:2888:3888
server.3=192.168.152.155:2888:3888
cd /home/hadoop/zookeeper
mkdir tmp
cd tmp
vi myid 
1 2 3
vi  ~/.bashrc   
export ZOOKEEPER_HOME=/home/hadoop/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
source  ~/.bashrc
zkServer.sh start
zkServer.sh status

错误解决:

https://blog.csdn.net/alwaysbefine/article/details/109894232

https://blog.csdn.net/fen_fen/article/details/127802028

查看zookeeper.out文件

配置java软连接

echo $JAVA_HOME
/usr/local/java/jdk1.8.0_361
ln -s -f /usr/local/java/jdk1.8.0_361/bin/java

java路径要真实有效

centos安装nodejs

参考:

https://www.cnblogs.com/binz/p/17253399.html

http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html

https://blog.csdn.net/Rakers1024/article/details/128061641

#进入 https://nodejs.org/dist/,选择自己需要的版本
#我需要的是https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.xz

#下载node  xz包
mkdir -p /home/nodejs
cd /home/nodejs
curl -# -O https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.xz

#解压node
xz -d node-v16.20.2-linux-x64.tar.xz
tar -xvf node-v16.20.2-linux-x64.tar

#配置环境变量
#找到unset i
#unset -f pathmunge,在下方增加配置
export PATH=${PATH}:/home/nodejs/node-v16.20.2-linux-x64/bin

#使配置生效
source /etc/profile

#检查安装是否成功
node -v

配置环境变量

vim /etc/profile
export PATH=$PATH:/usr/local/nodejs/bin
source /etc/profile

centos7安装nginx

whereis nginx
rm -rf [nginx文件,懂我意思吧]

tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2

yum install -y openssl*
yum -y install ncurses-devel

./configure			#先执行
make			    #执行完./configure之后,敲make回车
make install		#确认是否安装成功(可执行可不执行,没有影响)
  • 一般是安装在Linux虚拟机上的/usr/local/nginx目录下,可以通过查找
whereis nginx			#查找nginx文件
cd /usr/local/nginx		#进入该文件
cd ./sbin		#进入sbin文件
./nginx			#启动nginx程序

修改其配置文件

vi nginx.conf
./nginx -s stop		#停止nginx
./nginx	-s quit		#安全退出
./nginx -s reload	#修改了文件之后重新加载该程序文件
ps aux|grep nginx	#查看nginx进程

CentOS 7安装Maven

参考:

https://blog.csdn.net/rfidgroup/article/details/105255958

https://blog.csdn.net/ziye1985/article/details/129273829

https://blog.csdn.net/dontYouWorry/article/details/128934720

cd /usr/local
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
posted @   shiw2019  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略
点击右上角即可分享
微信分享提示