docker小白第八天
redis常规安装
前期已经配好了阿里云容器镜像加速库
docker search redis
docker pull redis:6.0.8
docker images redis:6.0.8
启动容器,并进入容器的命令行界面
docker run -d -p 6379:6379 redis:6.0.8
docker ps
docker exec -it 容器id /bin/bash
验证redis命令
redis-cli
set k1 v1
get k1
redis高阶安装
1、普通简单的安装在后续的使用可能会出现问题,因此需要在安装过程中进行一些配置。
2、首先删除前文刚刚安装的容器,避免干扰。
docker ps
docker stop 容器id
docker rm -f 容器id
新建个存放redis配置文件的文件夹
mkdir -p /cz/redis
在我的个人目录下新建redis配置存放文件夹
然后去找一个redis.conf文件,如果没有,可以直接先下载一个redis
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创建容器
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容器
docker exec -it myredis /bin/bash
redis-cli
set k1 v1
get k1
测试redis.conf使用了我们修改过的配置文件
select 15 执行成功
select 10 执行成功
select 18 执行失败
因为原始的redis.conf默认select最大选到16
现在我们去修改redis.conf文件,使其select最大选到10。另起一个xshell,直连到linux机器命令行,不进容器命令行界面。找到配置文件
vim redis.conf
找到databases 16,将其修改为databases 10.。然后保存文件,重启redis容器
docker restart myredis
docker exec -it myredis /bin/bash
redis-cli
get k1 验证启动正常
select 15 执行失败了
select 8 执行成功了
docker复杂安装
安装docker主从复制
新建主服务器实例3307
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
cd /cz/mydata/mysql-master/conf
然后vim my.cnf
,进入文件后开始编辑。加入如下代码
[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
重启主数据库实例
docker restart mysql-master
登录数据库
docker exec -it mysql-master /bin/bash
mysql -uroot -p
创建数据库实例的时候 密码设置的是root
创建用于主从同步的用户slave
创建用户并授予一定的权限,下文在从数据库做开启主从同步设置时会用到这个用户。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ' slave'@'%';
新建从服务器3308
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
cd cz/mydata/mysql-slave/conf
vim my.cnf
在my.cnf加入以下
[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实例
docker restart mysql-slave
在主数据库中查看主从同步状态
docker exec -it mysql-master /bin/bash
mysql -uroot -p
输入密码root
show master status;
可以看到主数据库相关的同步信息
另起一个xshell连接linux虚机,进入mysql-slave里查看主从同步状态。
docker exec -it mysql-slave /bin/bash
mysql -uroot -p
输入密码root
show master status;
从数据库内执行下命令,进行主从复制,其中各参数依据前文在主数据库查询到的信息填写。
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:连接失败重试的时间间隔,单位为秒。
从数据库查看主从同步状态
show slave status \G
关注下列两个slave,代表还没开始同步
从数据库中开启主从同步,启动在主数据库中创建的slave用户,并在此查看主从同步状态。
start slave;
show slave status \G
可看到已经开启了主从同步
主从复制测试
在主数据库新建库-使用库-新建表-插入数据,在从数据库查看记录或数据是否同步。
# 主数据库执行如下命令:
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下的数据
在从机执行如下命令查看
use db01;看是否已同步到了数据库db01
select * from t1; 可以看到从机中也查询到了数据
证明主从同步已经完成了