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; 可以看到从机中也查询到了数据

证明主从同步已经完成了

相关推荐
向阳121811 分钟前
Dubbo负载均衡
java·运维·负载均衡·dubbo
荒Huang1 小时前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
桥田智能1 小时前
气爪在自动化装配线中是如何应用的?
运维·自动化
MonkeyKing_sunyuhua1 小时前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
追风林2 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
€☞扫地僧☜€3 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
茶馆大橘3 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
其乐无涯3 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流3 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos