今天是一个特殊的日子,百年不遇,中秋和国庆同一天,而且是我从第一家公司正式辞职的日子,哎!
主要介绍一下mysql数据库进行主从同步的实现方法
介绍:
简介:
分主服务器和从服务器,主服务器负责写数据,从服务器负责读数据
主服务器写入数据后,即刻将写入数据的命令发送给从服务器,从而使得主从数据同步
mysql服务器之间的主从同步是基于二进制日志机制
目的:
提高读写性能
保证数据安全
具体实现步骤:
配置从服务器:(Docker安装mysql从机)
获取镜像:
sudo docker image pull mysql:5.7.22
或
suod docker load -i 文件路径/xxx.tar
指定mysql从机配置文件:(把主机配置文件拷贝到从机)
mkdir mysql_slave # 创建文件夹,存放从机数据和配置文件
mkdir data
cp -r 主机配置文件地址 ./
修改从机配置文件:
# 修改端口或ip
port = 8306
# 关闭日志
#general_log = 0
# 配置从机唯一编码
server-id = 2
运行从机:
sudo docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/python/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.22
测试从机是否创建成功:
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
主从同步实现:
配置主机:
修改主机配置文件:
# 开启日志
general_log_file = /var/log/mysql/mysql.log
general_log = 1
# 主机唯一编码
server-id = 1
# 二进制日志文件(最重要,主从就是根据二进制日志文件进行同步)
log_bin = /var/log/mysql/mysql-bin.log
从机备份主机原有数据:(冷备份,项目上线前配置)
# 收集主机原有数据
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql
# 从机复制主机原有数据
mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql
从机备份主机原有数据:(热备份,项目上线后实时同步数据)(主机中创建一个从机的账号)
# 创建从机账号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
# 刷新权限
FLUSH PRIVILEGES;
# 展示主机的二进制日志信息(很重要,在连接主机是要用到)
SHOW MASTER STATUS;
# 登录从机
# 连接主机
change master to master_host='127.0.0.1', master_user='slave', master_password='slave',master_log_file='mysql-bin.000250', master_log_pos=990250;
# 开启从机服务(mysql主从同步彻底完成)
start slave;
# 展示从机服务状态
show slave status \G
总结:
总结:
要想主从同步,先需要创建一个从机服务器
创建从机服务器,需要设置从机配置文件,和数据
然后分别修改主机和从机的配置文件
然后设置从机同步备份主机的数据,可以分冷备份和热备份
冷备份只能使从机和主机数据保持一致,但是主机修改数据后,从机不能同步更新,需要继续热备份
Django实现mysql主从同步方法:
增加从机数据库配置
创建和配置数据库读写路由:
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
配置数据读写路由:
DATABASE_ROUTERS = ['路径']