数据库主从搭建

数据库主从搭建

为什么要搭建数据库主从,因为一个项目一般都是读的操作比写的操作多很多,所以搭建主从,实现读写分离,减轻数据库压力。

2.1 主从同步原理

mysql主从配置的流程大体如图:

1)master会将变动记录到二进制日志里面;

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

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

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

2.2 注意点

1 咱们用docker模拟了两台服务器,服务器的系统,mysql的版本必须一致

2.3 具体步骤,启动主库

docker pull mysql:5.7
#在home目录下创建mysql文件夹,下面创建data和conf.d文件夹
mkdir /home/mysql
mkdir /home/mysql/conf.d
mkdir /home/mysql/data/
# 创建my.cnf配置文件
touch /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
##主库----start--- 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
##主库----end---
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

#启动主库容器(挂载外部目录,端口映射成33307,密码设置为123456)
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 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2.4 启动从库

#在home目录下创建mysql2文件夹,下面创建data和conf.d文件夹
mkdir /home/mysql2
mkdir /home/mysql2/conf.d
mkdir /home/mysql2/data/
#mkdir /home/mysql2 /home/mysql2/conf.d /home/mysql2/data/
# 创建my.cnf配置文件
touch /home/mysql2/my.cnf

[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
datadir=/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

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

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 33306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2.5 远程连接到主库和从库

#主库
mysql -h 101.133.225.166 -P 33307 -u root -p123456
##创建test用户,设置任意ip地址可以访问,密码为123
create user 'test'@'%' identified by '123';
##授权用户,把所有权限授权给test,他就相当于root了
grant all privileges on *.* to 'test'@'%' ;
###刷新权限
flush privileges;
#查看主服务器状态(显示如下图)
show master status; 

#从库
mysql -h 101.133.225.166 -P 33306 -u root -p123456
#配置详解
/*
change master to
master_host='MySQL主服务器IP地址',
master_user='之前在MySQL主服务器上面创建的用户名',
master_password='之前创建的密码',
master_log_file='MySQL主服务器状态中的二进制文件名',
master_log_pos='MySQL主服务器状态中的position值';
*/
#命令如下
change master to master_host='101.133.225.166',master_port=33307,master_user='test',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=0;
#启用从库
start slave;
#查看从库状态(如下图)
show slave status\G;

2.6 测试

#在主库上创建数据库test1
create database test1;
use test1;
#创建表
create table tom (id int not null,name varchar(100)not null ,age tinyint);
#插入数据
insert tom (id,name,age) values(1,'xxx',20),(2,'yyy',7),(3,'zzz',23);
#在从库上查看是否同步成功
#查看数据库
show database;
use test1;
#查看表
show tables;
#查看数据
select * from test1;

补充:查看容器启动日志

docker logs b8bdd9c57f22

3 django实现读写分离

makemigrations

#同步数据库
migrate   #表示同步到default数据库
migrate app01 --database=db1

3.2 手动控制读写分离

def index(request):

    #向数据表中存条数据
    #写到哪个库中了?默认情况下写到default
    # ret=models.Book.objects.using('default').create(name="xxx")
    # print(ret)

    #读第一条数据,默认从哪读?default
    #指定去从库读?在queryset对象后加个.using('db1')

    # ret=models.Book.objects.all().first()
    ret=models.Book.objects.all().using('db1').first()
    print(ret.name)
    return HttpResponse("ok")

3.3 自动读写分离

#第一步:在项目根路径下创建一个py文件(database_router.py)
class DatabaseAppsRouter(object):
    def db_for_read(self, model, **hints):
        #读可能去db1或者db2中读,
        return 'db1'
    def db_for_write(self, model, **hints):
        print(model)
        return 'default'

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        print(db)
        print(app_label)
        print(model_name)
        if app_label=='app01' and db=="db1":
            return False
        return None
 # 第二部,在setting中配置
DATABASE_ROUTERS = ['mydjangotest.database_router.DatabaseAppsRouter']

3.4 allow_migrate的使用

migrate app01 --database=db1   #不会同步

migrate app01 --database=default #可以同步

#用来控制数据表同步时,不能同步到从库中

原文地址:https://www.cnblogs.com/chanyuli/p/12350142.html

时间: 2024-10-01 04:37:43

数据库主从搭建的相关文章

Mysql数据库主从搭建

主库服务器:192.168.1.100 从库服务器:192.168.1.101 在两台服务器上安装mysql, yum -y install mysql mysql-server mysql-devel 主服务设置 ·设置密码:/usr/bin/mysqladmin -u root password 'passwd'. ·编辑配置文件:vi /etc/my.cnf 加入如下内容: log-bin=mysql-bin      日志路径 server-id = 1           指定服务器i

mysql 5.5数据库主从配置步骤详解

上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5.5.33.tar.gz 环境准备: 服务器a:192.168.10.151 (主) 服务器b:192.168.10.152 (从) 1.安装前准备wget http://mysql.llarian.net/Downloads/MySQL-5.5/mysql-5.5.33.tar.gzyum -y i

Linux系统中MySQL数据库“主从”配置

MySQL数据库"主从"配置 一.配置概述: 在Linux操作系统中配置MySQL数据库的主从复制是很重要的,为什么这样说呢!是因为在你搭建一个服务器以后你配置了2台数据库,一主一从.2台数据库配置好以后,当其中一台数据库被攻击以后,你被攻击的这台数据库的数据会被自动的备份到另一台数据库中去.即使被攻击了数据也不会丢失.配置主从就是为了让web网站或其他的软件可以正常运转,确保数据的存在. 二.配置步骤: <配置具备的条件> 1.需要在虚拟机上安装好两台主机,同时安装好同一

DNS主从搭建之解析

一.DNS定义 DNS是域名系统的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务. DNS命名用于TCP/IP网络中,通过用户友好的名称查找计算机和服务.当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与之相应的IP地址.监听于TCP/53端口.UDP/53端口. 二.DNS域名命名空间 DNS域名命名空间是具有层次行的,一般可分为根域.顶级域.二级域.子域以及主机名, 如图: 三.DNS服务器类型    1.主DNS 服务器 当DNS服务器管理主要区域时,它被称为主D

简单的mysql主从搭建及恢复

mysql主从搭建: 怎么安装mysql数据库,这里不讲,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作:  1.1.版本一致  1.2.初始化表,并在后台启动mysql  1.3.修改root的密码 2.修改主服务器master:   #vi /etc/my.cnf       [mysqld]       log-bin=mysql-bin   //[必须]启用二进制日志       server-id=1       //[必须]服务器唯一ID 3.修改从服务器slave:  

Mysql 主从搭建

Mysql  主从搭建 操作系统: [[email protected] ~]# cat /etc/redhat-release CentOS release 6.8 (Final) Master(主):192.168.137.32 Slave (从) :192.168.137.33 第一步:在CentOS6.x下安装MySQL数据库 这里我直接用脚本安装mysql5.7的 vim auto_install_mysql.sh #!/bin/bash yum install  -y  wget w

Centos 7.1 Bind主从搭建

Centos 7.1  Bind主从搭建 ########################################################################## 概览 DNS简单描述 1.环境准备 2.配置主DNS服务器 2.1. 主要配置文件 2.2. 配置/etc/named.conf 2.3. 配置/etc/named.rfc1912.zones 2.4. 配置/var/named/数据库文件 2.5 启动服务以及测试 3. 配置从dns服务器 3.1. 主D

mysql主从搭建详细步骤

一 .系统环境:Centos 6.5 MySQL版本:mysql-5.5.25a Master:192.168.4.9 Slave :192.168.4.10 二.主从配置需要注意的点 主从服务器操作系统版本尽量保持一致 Master和Slave版本要一致 Slave导入的Master备份数据要完整 Master开启了二进制日志 Slave开启了中继日志 Master和Slave  server_id值,唯一 三.主从配置步骤 Master配置 查看server-id是否唯一 建立主从授权用户

xtrabackup 在线主从搭建

因为意外导致某个MySQL的从服务器宕机,且不可修复,因为是业务数据库,不能停机和锁表进行从库的搭建,所以考虑了使用xtrabackup 进行在线主从搭建. 一.数据库环境 数据库 数据库版本 外网IP 内网IP 同步用户 备份目录 主库 MYSQL-5.6.7 211.147.1.202 192.168.0.123 rep 从库 MYSQL-5.6.7 211.147.1.202 192.168.0.13 二.准备安装包 percona-xtrabackup-2.1.9-744-Linux-x