Docker配置MySQL主从服务器(Django实现读写分离)

该文详细介绍了如何使用Docker部署两台mysql服务器,进行主从配置,包括容器的运行、远程连接以及权限设置。然后在Django项目中配置主从数据库,实现读写分离,创建数据库路由确保读操作在从库,写操作在主库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、操作步骤

        1、先自行按转Docker容器

        2、安装两台mysql服务器

                1、查找mysql

docker search mysql

                2、安装mysql,为最新版

docker pull mysql

                3、查看本地镜像

docker images

                4、运行容器(安装两次就有两个mysql容器)

                        参数:

                        -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。

                        MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。

                               注意修改:mysql-test的名字,和端口号为:3308:3306

docker run -itd --name mysql-test -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

                5、查看是否安装成功

docker ps

              3、远程连接入主库

#1、连接主库
mysql -h 192.168.1.102 -P 3308 -u root -padmin123
从机连接到主机
##创建test用户
create user 'slave'@'%' identified by 'admin123';
##授权用户(任何表库,任何ip地址登录方式)
grant all privileges on *.* to 'slave'@'%' ;
###刷新权限
flush privileges;
#查看主服务器状态(显示如下图)
show master status; 

              4、远程连接从库

#连接
mysql -h 192.168.1.102 -P 3310 -u root -padmin123
#创建从机账号
change master to master_host='127.0.0.1', master_user='slave', master_password='admin123',master_log_file='mysql-bin.000002', master_log_pos=650413;
开启从机服务
$ start slave;
# 展示从机服务状态
$ show slave status \G

 二、配置Django

1、在settings配置主从

DATABASES = {
    'default': { # 写(主机)
        'ENGINE': 'django.db.backends.mysql', # 数据库引擎
        'HOST': '192.168.103.158', # 数据库主机
        'PORT': 3306, # 数据库端口
        'USER': 'root', # 数据库用户名
        'PASSWORD': 'admin123', # 数据库用户密码
        'NAME': 'meiduoManage' # 数据库名字
    },
    'slave': { # 读(从机)
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '192.168.103.158',
        'PORT': 3310,
        'USER': 'root',
        'PASSWORD': 'mysql',
        'NAME': 'meiduoManage'
    }
}

2、创建数据库读写路由       

class MasterSlaveDBRouter(object):
    """数据库读写路由"""

    def db_for_read(self, model, **hints):
        """读"""
        return "slave"

    def db_for_write(self, model, **hints):
        """写"""
        return "default"

    def allow_relation(self, obj1, obj2, **hints):
        """是否运行关联操作"""
        return True

3、配置数据读写路由

DATABASE_ROUTERS = ['#']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ambitionManZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值