2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 云技术 > Docker

docker的使用、mysql主从复制与django的配合使用

时间:08-17来源:作者:点击数:36
城东书院 www.cdsy.xyz

docker的使用、mysql主从复制与django的配合使用

下载与安装

  • yum update -- 全局更新yum (可能花费时间久)
  • yum remove docker \
  • docker-client \
  • docker-client-latest \
  • docker-common \
  • docker-latest \
  • docker-latest-logrotate \
  • docker-logrotate \
  • docker-engine -- 移除可能存在的docker版本
  • yum install -y yum-utils \
  • device-mapper-persistent-data \
  • lvm2 -- 安装yum工具包和依赖项
  • yum-config-manager \
  • --add-repo \
  • https://download.docker.com/linux/centos/docker-ce.repo --通过yum添加yum源
  • yum install docker-ce docker-ce-cli containerd.io -- 安装docker-ce
  • systemctl start docker -- 启动docker-ce
  • systemctl enable docker --开机启动
  • docker version -- 查看docker 版本
  • #如果期间出现下载源错误的话,可尝试以下方法来解决
  • 解决方法: cd /etc/yum.repos.d -- 进入这个目录
  • ll --查询所有带docker repo包
  • rm-rf --删除所有关于docker的re包
  • 然后在测试 如果还不行 在执行
  • yum clean all yum makecache 这两句就没问题了

sh:

  • yum update
  • yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  • yum install -y yum-utils device-mapper-persistent-data lvm2
  • yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • systemctl start docker
  • systemctl enable docker

注意:使用默认的repo文件安装后,Docker-ce的版本是最新19.03版本

  • 查看repo文件支持的Docker-ce版本
  • yum list docker-ce --showduplicates | sort -r #从高到低列出Docker-ce的版本
  • yum list docker-ce-cli --showduplicates | sort -r #从高到低列出Docker-ce-cli的版本
  • 指定版本进行安装
  • 该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如,docker-ce-18.09.1
  • yum -y install docker-ce-18.09.9 docker-ce-cli docker-ce-cli-18.09.9 containerd.io

启动docker

  • systemctl start docker -- 启动docker服务
  • systemctl stop docker -- 停止docker服务
  • systemctl status docker --查看 docker状态
  • systemctl restart docker --重启docker服务
  • docker images -- 查看下载的所有软件

修改下载镜像地址

  • vim /etc/docker/daemon.json -- 可以修改下载镜像网站(不改的话默认用的阿里云镜像)
  • #添加如下代码:
  • {
  • "registry-mirrors":[
  • "http://hub-mirror.c.163.com"
  • ]
  • }

清空容器

  • docker container prune -- 清空所有容器(慎重使用)

docker基础命令

  • 打开云服务器,虚拟化的容器技术、相当于是让你带着操作系统环境去装软件
  • yum update 更新你所的有底层依赖库
  • yum install 表示安装
  • yum remore 表示删除
  • yum info 查看安装包的信息
  • yum search 表示搜索有什么包可以安装
  • yum search docker 找到下面的安装软件
  • docker.x86_64 : Automates deployment of containerized applications
  • yum install -y docker 安装
  • systemctl start docker 启动 docker
  • systemctl stop docker 停止 dockdr
  • systemctl status docker 查看状态
  • docker pull mysql : 5.7.29 下载mysql 5.7.29版本
  • docker images 查看下载的镜像
  • docker pull redis:latest 下载最新的 redis
  • vim /etc/docker/daemon.json 修改镜像
  • docker container ls -a` 查看容器列表
  • docker rm -f redis 删除缓存容器
  • docker rm mysql157 或者
  • docker rm -f mysql57 删除容器
  • netstat -ntlp 查看进程端口的状态(net网络 ,stat 表求状态,-n表示数值,t表示起ttp协义的端口,L 表示时监听状态,p 表示显示进程的信息)

用docker创建Mysql(主从复制结构)

  • #创建主从复制结构的文件夹
  • mkdir docker --创建docker文件夹
  • cd docker --进入docker文件夹
  • mkdir -p mysql/{master,slave-1,slave-2,slave-3} --创建子文件夹
  • cd mysql --进入mysql文件夹
  • mkdir -p master/{conf,data,log} --创建master分支的配置以及日志
  • mkdir -p slave-1/{conf,data,log} --创建slave-1分支的配置以及日志
  • mkdir -p slave-2/{conf,data,log} --创建slave-2分支的配置以及日志
  • mkdir -p slave-3/{conf,data,log} --创建slave-3分支的配置以及日志
  • 查看文件夹的树状图 yum install -y tree
  • tree --树状图文件夹结构
  • #配置主从复制结构
  • cd docker/mysql/master/conf --进入文件夹
  • touch my.cnf --创建配置文件
  • vim my.cnf --编辑配置文件
  • 写入以下内容:(主容器)
  • [mysqld]
  • pid-file=/var/run/mysqld/mysqld.pid --进程文件
  • socket=/var/run/mysqld/mysqld.sock --套接字文件
  • datadir=/var/lib/mysql --数据存放的文件夹
  • log-error=/var/log/mysql/error.log --错误日志存放文件
  • server-id=1 --命名上的区分(配置主从结构时,这个id不同)
  • log-bin=/var/log/mysql/mysql-bin.log --运行日志(=后面可以不写,存放为默认路径)
  • expire_logs_days=30 --日志过期时间(日)
  • max_binlog_size=256M --日志大小(102400自由给大小)
  • symbolic-links=0 --符号连接(可以不写)
  • #slow_query_log=ON --开启慢查询 (调试阶段打开,正式生产环境关掉)
  • #slow_query_log_file=/var/log/mysql/slow.log --慢查询日志的存放位置
  • #long_query_time=1 --慢查询的时间设置(秒)
  • #创建(主)容器并启动容器
  • docker run -d -p 3306:3306 --name mysql-master \
  • -v /root/docker/mysql/master/conf:/etc/mysql/mysql.conf.d \
  • -v /root/docker/mysql/master/data:/var/lib/mysql \
  • -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.29
  • docker exec -it mysql-master /bin/bash 进入容器交互式环境
  • 输入mysql -u root -p123456 --刚才配置的密码
  • grant replication slave on *.* to 'slave'@'%' identified by
  • 'iamslave'; --创建一个账号(可以复制数据的账号)
  • flush privileges; --刷新权限
  • show master status; -- 查询日志(名字,位置) 这句可能查不到二进制日志文件
  • #找不到文件的的解决方法
  • 暂停docker容器,删掉所有容器,用下载的mysql来启动
  • show variables like 'log_bin'; -- 查看二进制日志是否启动
  • show variables like 'datadir'; -- 查看二进制日志存放路径
  • 添加如下配置:
  • [mysqld]
  • datadir=/var/lib/mysql
  • socket=/var/lib/mysql/mysql.sock
  • symbolic-links=0
  • log-error=/var/log/mysqld.log
  • pid-file=/var/run/mysqld/mysqld.pid
  • server-id=1
  • log-bin=mysql-bin
  • 重启,即可找到二进制日志
  • exit --退出环境
  • docker restart mysql-master --重启mysql-master容器
  • #备份数据
  • flush table with read lock; --锁数据库,只能读数据
  • mysqldump -u root -p 123456 -A -B > /root/backup/mysql/mybak$(date
  • +"%Y%m%d%H%M%S").sql -- 输出重定向(文件名是时间)
  • mysqldump -u root -p 123456 -A -B | gzip> /root/backup/mysql/mybak$(date
  • +"%Y%m%d%H%M%S").sql --压缩备份(数据量大的话可以用zip)
  • unlock table; --解锁
  • docker inspect --format'{{ .NetworkSettings.IPAddress }}' mysql-master --查看容器的ip地址
  • #配置从机
  • cd salve-1/conf/ -- 进入文件夹
  • vim my.cnf -- 编辑配置
  • 写入配置:
  • [mysqld]
  • pid-file=/var/run/mysqld/mysqld.pid
  • socket=/var/run/mysqld/mysqld.sock
  • datadir=/var/lib/mysql
  • log-error=/var/log/mysql/error.log
  • server-id=41 -- id不能相同
  • log-bin=/var/log/mysql/mysql-bin.log
  • expire_logs_days=30
  • max_binlog_size=256M
  • symbolic-links=0
  • slow_query_log=ON --启动从机慢查询日志(主(写)从(读))
  • slow_query_log_file=/var/log/mysql/slow.log
  • long_query_time=1
  • #创建容器并启动容器
  • docker run -d -p 3308:3306 --name mysql-slave-1 \
  • -v /root/docker/mysql/slave-1/conf:/etc/mysql/mysql.conf.d \
  • -v /root/docker/mysql/slave-1/data:/var/lib/mysql \
  • -e MYSQL_ROOT_PASSWORD=123456 \
  • --link mysql-master:mysql-master mysql:5.7.29 --给master做别名,注意端口的使用(方便连接)
  • docker exec -it mysql-slave-1 /bin/bash -- 进入交互式环境
  • mysql -u root -p123456 --输入账号密码
  • reset slave; -- 重置奴隶
  • change master to master_host='mysql-master', master_user='slave',
  • master_password='iamslave', master_log_file='mysql-bin.000003',
  • master_log_pos=590;
  • -- 连接master 别名 账号 密码 日志文件 日志位置(里面参数记得修改)
  • start slave; --启动从机
  • show slave status\G -- 查看从机配置
  • 如果有下面的配置,代表生效:
  • ...
  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes
  • ...
  • 至此一个从机已经配置好了,同样的方法配置其他从机(注意如果读不到日志,那就是配置日志路径有问题)

不用docker配置mysql(主从复制结构)

  • 下载安装mysql(配置文件默认放在 /etc/my.cnf中)
  • vim /etc/my.cnf
  • [mysqld1]
  • datadir=/var/lib/mysql
  • socket=/var/lib/mysql/mysql.sock
  • symbolic-links=0
  • log-error=/var/log/mysqld.log
  • pid-file=/var/run/mysqld/mysqld.pid
  • port=3306 #添加这句
  • [mysqld2]
  • datadir=/var/lib/mysql
  • socket=/var/lib/mysql/mysql.sock
  • symbolic-links=0
  • log-error=/var/log/mysqld.log
  • pid-file=/var/run/mysqld/mysqld.pid
  • port=3307 #添加这句
  • 启动它 逻辑和上面相似

Django配合主从复制结构(每个数据库创建用户保证可以连接成功)

#settings.py中配置数据库连接

  • DATABASES = {
  • 'default':{
  • ...,
  • }
  • 'slave1':{ #第二组数据库 (有几个配几个)
  • ...,
  • }
  • }
  • #在主项目common下,新建模块db_routers
  • class MasterSlaveRouter(object):
  • """主从复制路由"""
  • @staticmethod #读
  • def db_for_read(model, **hints):
  • return random.choice(('slave1', 'slave2', 'slave3')) #如果大概率要使用slave1,那就在写一个
  • @staticmethod #写
  • def db_for_write(model, **hints):
  • return 'default'
  • @staticmethod
  • def allow_relation(obj1, obj2, **hints):
  • return None
  • @staticmethod #是否允许数据迁移(正反向工程)
  • def allow_migrate(db, app_label, model_name=None, **hints):
  • return True
  • #settings.py中配置路由
  • DATABASE_ROUTERS = [
  • 'common.db_routers.MasterSlaveRouter',
  • ]
  • #配置成功后,就可以做读写分离了
  • #如果项目中用到分库的数据库,需要注意,在非默认数据库的models.py中添加标签,
  • 实例:
  • class ...():
  • class Meta:
  • managed = False
  • app_label = 'hrs' #随便命名
  • db_table = 'tb_dept'
  • class MasterSlaveRouter(object):
  • """主从复制路由"""
  • @staticmethod #读
  • def db_for_read(model, **hints):
  • if model._meta.app_label == 'hrs':
  • return 'backend' #如果用户操作模型,先找这个模型中的标签熟悉,来决定使用那个数据库
  • return random.choice(('slave1', 'slave2', 'slave3'))
  • @staticmethod #写
  • def db_for_write(model, **hints):
  • if model._meta.app_label == 'hrs':
  • return 'backend
  • return 'default'

实战

启动mysql容器; (主从模式)

  • cd ~
  • mkdir -p /etc/mysql/conf/master
  • mkdir -p /etc/mysql/conf/slave
  • vim /etc/mysql/conf/master/master.cnf

写入内容如下:

  • [mysqld]
  • log-bin=mysql-bin
  • server_id=100
  • vim /etc/mysql/conf/slave/master.cnf

写入内容如下:

  • [mysqld]
  • log-bin=mysql-bin
  • server_id=200
  • docker run
  • --name mysql-master
  • -v /etc/mysql/conf/slave:/etc/mysql/conf.d
  • -e MYSQL_ROOT_PASSWORD=Admin123.
  • -p 8000:3306
  • -d mysql:5.5
  • --character-set-server=utf8mb4
  • --collation-server=utf8mb4_unicode_ci
  • docker run
  • --name mysql-slave1
  • -v /etc/mysql/conf/slave:/etc/mysql/conf.d
  • -e MYSQL_ROOT_PASSWORD=Admin123.
  • -p 3307:3306
  • -d mysql:5.5
  • --character-set-server=utf8mb4
  • --collation-server=utf8mb4_unicode_ci
  • docker exec -it mysql-master bash 进入主库
  • mysql -u root -pAdmin123.
  • CREATE USER 'rep'@'%' IDENTIFIED BY 'Admin123.'; 创建账号
  • GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%'; 给账号授权
  • show master status; # 获取日志文件名
  • quit;
  • exit

保存这两个信息

在这里插入图片描述

从机配置:

  • docker exec -it mysql-salve1 bash
  • mysql -u root -pAdmin123.
  • CHANGE MASTER TO MASTER_HOST='主机ip',MASTER_PORT=3306,MASTER_USER='rep',MASTER_PASSWORD='Admin123.',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=331;
  • start slave;
  • show slave status\G;

如上图代表配置成功

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐