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

一、操作步骤

        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; 

Docker配置MySQL主从服务器(Django实现读写分离)_第1张图片

              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

Docker配置MySQL主从服务器(Django实现读写分离)_第2张图片

 二、配置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 = ['#']

你可能感兴趣的:(docker,容器,运维)