docker小白第八天

docker小白第八天

redis常规安装

前期已经配好了阿里云容器镜像加速库

bash 复制代码
docker search redis
docker pull redis:6.0.8
docker images redis:6.0.8

启动容器,并进入容器的命令行界面

bash 复制代码
docker run -d -p 6379:6379 redis:6.0.8
docker ps
docker exec -it 容器id /bin/bash

验证redis命令

bash 复制代码
redis-cli
set k1 v1
get k1

redis高阶安装

1、普通简单的安装在后续的使用可能会出现问题,因此需要在安装过程中进行一些配置。

2、首先删除前文刚刚安装的容器,避免干扰。

bash 复制代码
docker ps
docker stop 容器id
docker rm -f 容器id

新建个存放redis配置文件的文件夹

bash 复制代码
mkdir -p /cz/redis
在我的个人目录下新建redis配置存放文件夹

然后去找一个redis.conf文件,如果没有,可以直接先下载一个redis

bash 复制代码
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar -xzvf redis-6.0.8.tar.gz
cd redis-6.0.8
gcc -v  查看gcc版本,redis需要gcc版本为5.3以上
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash  临时将gcc版本修改,退出再进会复原
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile 永久修改gcc版本
make install

然后可以用xftp查看此时linux系统内的文件,找到redis.conf,然后将其复制到自己上文新建的文件夹内。

然后找到这个文件,vim进行编辑。

需要编辑内容如下:

1、开启redis验证,防止中勒索病毒

2、允许redis外地连接,需要注释掉 bind 127.0.0.1

3、将daemonize yes 注释起来或者改为daemonize no,因为该配置和docker run中的-d冲突,会导致容器一直启动失败。

4、开启redis数据持久化 appendonly yes

然后使用redis创建容器

bash 复制代码
docker run -p 6379:6379 --name myredis --privileged=true -v /cz/redis/redis.conf:/etc/redis/redis.conf -v /cz/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
开启容器卷最高权限,设定端口,挂载容器卷到宿主机上
docker ps
查看容器

此时创建容器成功

测试redis容器

bash 复制代码
docker exec -it myredis /bin/bash
redis-cli
set k1 v1
get k1

测试redis.conf使用了我们修改过的配置文件

bash 复制代码
select 15  执行成功
select 10  执行成功
select 18  执行失败
因为原始的redis.conf默认select最大选到16

现在我们去修改redis.conf文件,使其select最大选到10。另起一个xshell,直连到linux机器命令行,不进容器命令行界面。找到配置文件

bash 复制代码
vim redis.conf

找到databases 16,将其修改为databases 10.。然后保存文件,重启redis容器

bash 复制代码
docker restart myredis
docker exec -it myredis /bin/bash
redis-cli
get k1 验证启动正常
select 15 执行失败了
select 8 执行成功了

docker复杂安装

安装docker主从复制

新建主服务器实例3307
bash 复制代码
docker run -p 3307:3306 --name mysql-master --privileged=true -v /cz/mydata/mysql-master/log:/var/log/mysql -v /cz/mydata/mysql-master/data:/var/lib/mysql -v /cz/mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
此处是将linux机器的3307端口与容器的3306端口做映射关系
docker ps
进入mysql的conf目录文件新建my.cnf
bash 复制代码
cd /cz/mydata/mysql-master/conf

然后vim my.cnf,进入文件后开始编辑。加入如下代码

bash 复制代码
[mysqld]
##设置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
##跳过主从复制中遇到的所有错误或指定类型的错误﹐避免slave端复制中断。
##如∶1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

重启主数据库实例

bash 复制代码
docker restart mysql-master

登录数据库

bash 复制代码
docker exec -it mysql-master /bin/bash
mysql -uroot -p
创建数据库实例的时候 密码设置的是root
创建用于主从同步的用户slave

创建用户并授予一定的权限,下文在从数据库做开启主从同步设置时会用到这个用户。

bash 复制代码
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ' slave'@'%';
新建从服务器3308
bash 复制代码
docker run -p 3308:3306 --name mysql-slave --privileged=true -v /cz/mydata/mysql-slave/log:/var/log/mysql -v /cz/mydata/mysql-slave/data:/var/lib/mysql -v /cz/mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
此处是将linux机器的3308端口与容器的3306端口做映射关系
docker ps
进入从数据库的conf目录中配置my.cnf
bash 复制代码
cd cz/mydata/mysql-slave/conf
vim my.cnf

在my.cnf加入以下

bash 复制代码
[mysqld]
##设置server_id ,同一局域网中需要唯一
server_id=102
##指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能,以备slave作为其他数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
##~设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
##二进制日志过期清理时间。默认值为0∶表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或指定类型的错误﹐避免slave端复制中断。
##如∶1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
##relay_logi配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为只读(具有super权限的用户除外)
read_only=1
重启slave实例
bash 复制代码
docker restart mysql-slave

在主数据库中查看主从同步状态

bash 复制代码
docker exec -it mysql-master /bin/bash
mysql -uroot -p
输入密码root
show master status;

可以看到主数据库相关的同步信息

另起一个xshell连接linux虚机,进入mysql-slave里查看主从同步状态。

bash 复制代码
docker exec -it mysql-slave /bin/bash
mysql -uroot -p
输入密码root
show master status;

从数据库内执行下命令,进行主从复制,其中各参数依据前文在主数据库查询到的信息填写。

bash 复制代码
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000002', master_log_pos=154, master_connect_retry=30;
# master_host:主数据库的IP地址;
# master_port:主数据库的运行端口;
# master_user:在主数据库创建的用于同步数据的用户账号;
# master_password:在主数据库创建的用于同步数据的用户密码;
# master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
# master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
# master_connect_retry:连接失败重试的时间间隔,单位为秒。

从数据库查看主从同步状态

bash 复制代码
show slave status \G

关注下列两个slave,代表还没开始同步

从数据库中开启主从同步,启动在主数据库中创建的slave用户,并在此查看主从同步状态。

bash 复制代码
start slave;
show slave status \G

可看到已经开启了主从同步

主从复制测试

在主数据库新建库-使用库-新建表-插入数据,在从数据库查看记录或数据是否同步。

bash 复制代码
# 主数据库执行如下命令:
show databases;查看当前的库
create database db01;创建新库
use db01; 使用新库
create table t1(id int,name varchar(20));创建新表t1
insert into t1 values(1.'cz'); 插入数据
select * from t1; 查询t1下的数据

在从机执行如下命令查看

bash 复制代码
use db01;看是否已同步到了数据库db01
select * from t1; 可以看到从机中也查询到了数据

证明主从同步已经完成了

相关推荐
Lary_Rock2 分钟前
Android 编译问题 prebuilts/clang/host/linux-x86
android·linux·运维
绵绵细雨中的乡音15 分钟前
Linux进程学习【基本认知】
linux·运维·学习
matrixlzp25 分钟前
K8S Service 原理、案例
云原生·容器·kubernetes
GnixAij1 小时前
Docker SSH端口转发
docker·ssh
珹洺1 小时前
Linux操作系统从入门到实战(三)Linux基础指令(上)
linux·运维·服务器
剁椒排骨1 小时前
win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
运维·windows·经验分享·计算机外设·win11·win10
angushine2 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
归寻太乙2 小时前
Linux环境变量
linux·运维·服务器
m0Java门徒2 小时前
面向对象编程核心:封装、继承、多态与 static 关键字深度解析
java·运维·开发语言·intellij-idea·idea
Sapphire~2 小时前
Linux-06 ubuntu 系统截图软件使用简单记录
linux·运维·ubuntu