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重置密码错误参考:
-
https://zhuanlan.zhihu.com/p/106320403
alter user user() identified by "123456";
-
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防火墙
参考:
# 查询已开放的端口
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
引擎进行交互。
# 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 Hub
中99%
的镜像都是通过在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
安装手册: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
中构建镜像最常用的方式,就是使用Dockerfile
。Dockerfile
是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。官方文档: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
,在该镜像中安装jdk
和tomcat
以后将其制作为一个新的镜像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/
您可以在macOS
,Windows
和Linux
上运行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;
记下File
和Position
的值。执行完此步骤后不要再操作主服务器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
- 测试环境
主服务器ip: 192.168.152.153
从服务器ip: 192.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.
- 报错: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/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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略