首页 > 数据库 >基于Docker做MySQL主从搭建与Django的读写分离

基于Docker做MySQL主从搭建与Django的读写分离

时间:2022-08-24 10:14:42浏览次数:62  
标签:主库 slave MySQL Django master mysql home Docker 从库

基于Docker做MySQL主从搭建

主从的作用:写数据数据时使用主库,从库只用来读数据,这样做能够减少数据库压力,主从搭建可以一主一从,也可以是一主多从。

mysql主从配置的流程

如图:

image

1.master会将变动记录到二进制日志(binlog)里面(主库要开启binlog日志);

2.master有一个I/O线程将二进制日志发送到slave;

3.slave有一个I/O线程把master发送的二进制写入到relay log日志里面;

4.slave有一个SQL线程,按照relay log 日志处理slave的数据;

搭建步骤

第一步:拉取MySQL镜像

docker pull mysql:5.7

第二步:创建一些文件夹,存放MySQL配置

# 主库配置
mkdir /home/mysql
mkdir /home/mysql/conf.d
mkdir /home/mysql/data
vim /home/mysql/my.cnf

"""
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

server-id=100
log-bin=mysql-bin
"""
# 从库配置
mkdir /home/mysql2
mkdir /home/mysql2/conf.d
mkdir /home/mysql2/data/
vim /home/mysql2/my.cnf

"""
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

server-id=101  
log-bin=mysql-slave-bin   
relay_log=edu-mysql-relay-bin 
"""

第三步:启动两个docker容器

# 运行主库的容器
docker run  -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 运行从库的容器
docker run  -di -v /home/mysql2/data/:/var/lib/mysql -v /home/mysql2/conf.d:/etc/mysql/conf.d -v /home/mysql2/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

第四步:连接主库

mysql -h 10.0.0.200 -P 3306 -uroot -p123456
# 创建test用户
create user 'test'@'%' identified by '123';
# 授权用户
grant all privileges on *.* to 'test'@'%' ;
# 刷新权限
flush privileges;
# 查看主服务器状态(显示如下图)
show master status; 

image

第五步:连接从库

# 连接
mysql -h 10.0.0.200 -P 3307 -uroot -p123456
# 连接主库
change master to master_host='10.0.0.200',master_port=3306,master_user='test',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=0;
# 开启从库
start slave;
# 查看从库状态
show slave status\G;

第六步:测试

# 在主库上创建数据库test1
create database test1;
# 在从库上查看是否同步成功
show database;

django读写分离

第一步:配置文件配置

# 配置两个数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '10.0.0.200',  # mysql的ip地址
        'PORT': 3306,  # mysql端口号
        'USER': 'test',  # mysql用户名
        'PASSWORD': '123',  # mysql密码
        'NAME': 'test1',  # mysql库名称
    },
    'default2': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '10.0.0.200',  # mysql的ip地址
        'PORT': 3307,  # mysql端口号
        'USER': 'root',  # mysql用户名
        'PASSWORD': '123456',  # mysql密码
        'NAME': 'test1',  # mysql库名称
    }
}

第二步:读写分离

# 方式一:手动读写分离
# 主库用于写
Book.objects.using('default').create(name='西游记')
# 从库用于读
res = Book.objects.using('default2').all()
print(res)
# 方式二:自动读写分离
# 第一步:写一个类
class AuthRouter(object):
    # 读,返回在配置文件中用于读的数据库的键
    def db_for_read(self, model, **hints):
        return 'default2'
    # 写,返回在配置文件中用于写的数据库的键
    def db_for_write(self, model, **hints):
        return 'default'
# 第二步:在配置文件中配置
DATABASE_ROUTERS = ['django_test.db_router.AuthRouter', ]  # 类的路径

标签:主库,slave,MySQL,Django,master,mysql,home,Docker,从库
From: https://www.cnblogs.com/yume-zbh/p/16595835.html

相关文章

  • Mysql 一主一从
    1.主从原理1.1主从介绍所谓mysql主从就是建立两个完全一样的数据库,其中一个为主要使用的数据库,另一个为次要的数据库,一般在企业中,存放比较重要的数据的数据库服务器......
  • Docker安装Open LDAP并启用syncrepl镜像同步
    简单介绍如何快速通过docker启动openldap服务,并通过syncrepl机制实现目录数据的镜像复制。本文只涉及关键步骤,相关技术的入门请移步入门教程。所有本文的配置和脚本只针对b......
  • django中发送post请求,报错csrf跨域问题,解决的办法?
    方法一:在setting.py文件中找到MIDDLEWARE字段,然后注释掉带有csrf的那一行。方法二:在发送请求的html文件的form表单中添加一行{%csrf_token%},即可解决。......
  • 【python】Django入门例子
     https://blog.csdn.net/DAO_HUNG/article/details/120245121页面效果:     碰到的问题:1、setting.py的TEMPLATES‘DIRS’[]加入模版路径配置错误,不知道为......
  • docker中的mysql中文乱码解决办法
    博主最近在做谷粒商城,因为要使用docker安装mysql,但是由于安装的时候没有指定mysql的数据库的utf8格式,导致插入的时候就出现了中文是问号的情况,到处百度终于解决,于是打......
  • springboot+mybatis-plus-join+mysql实现连表查询
    1.简介  Mybatis是目前比较主流的持久层框架,使用非常广泛。Mybatis-Plus是基于Mybatis增强工具包,越来越受到开发人员的喜爱。  在使用Mybatis-Plus开发时,简单的crud......
  • docker 学习第一篇 Linux 安装docker
    1、下载docker,下载地址https://docs.docker.com/engine/install/centos/2、卸载旧的docker,sudoyumremovedocker\docker-client\......
  • ERROR 2006 (HY000): MySQL server has gone away
    sourcesql文件的时候,报错如下:ERROR2006(HY000):MySQLserverhasgoneaway 经查阅导致该error的原因很多,具体分析了我的问题是语句太长了,修改max_allowed_packet......
  • liunx 安装 mysql 8.0 ,centos 7
    下载地址:MySQL::DownloadMySQLCommunityServerhttps://dev.mysql.com/downloads/mysql/ 下载完整的打包程序,然后解压   解压命令:tar-xvfmysql-8.0.30-......
  • MySQL 5.7 vs 8.0版本的性能有什么区别
    1、新增持久化设置MySQL8.0新增SETPERSIST的命令,该命令的配置值保存到数据目录下的mysqld-auto.cnf文件中,待重启后,读取该文件,用其中的配置覆盖缺省的配置文件,补充了SE......