MySQL主从同步


Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。
每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。
主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)

步骤

配置方法

使用的是主机+docker,主机的mysql做主,docker中的mysql为从

1 安装配置mysql


docker开启mysql服务

2 备份主服务器原有数据到从服务器

-u :用户名
-p :示密码
--all-databases :导出所有数据库
--lock-all-tables :执行操作时锁住所有表,防止操作时有数据修改
~/master_db.sql :导出的备份数据(sql文件)位置,可自己指定

3 配置主服务器master

4 配置从服务器slave (docker中的mysql)

Django数据库读写分离

1 setting中设置从服务器信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 数据库主机
        'PORT': 3306,  # 数据库端口
        'USER': 'name',  # 数据库用户名
        'PASSWORD': 'pwd',  # 数据库用户密码
        'NAME': 'dbname'  # 数据库名字
    },
 'salve': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 数据库主机
        'PORT': 8306,  # 数据库端口
        'USER': 'name',  # 数据库用户名
        'PASSWORD': 'pwd',  # 数据库用户密码
        'NAME': 'dbname'  # 数据库名字
    }

2 utils文件中告知Django进行读写处理时选择数据库

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 = ['project.utils.db_router.MasterSlaveDBRouter']
原文地址:https://www.cnblogs.com/cizao/p/11481846.html