01.安装mysql主从服务器
1.1 初始化docker中mysql挂载目录
cd ~
mkdir mysql_master
mkdir mysql_slave
cd mysql_master
mkdir data
cp -r /etc/mysql/mysql.conf.d ./
cd ../mysql_slave
mkdir data
cp -r /etc/mysql/mysql.conf.d ./
1.2 MySQL主机配置和从机配置
port = 3307
general_log_file = /var/log/mysql/mysql.log
general_log = 1
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
port = 3308
general_log = 0
server-id = 2
1.3 使用docker安装mysql主从
docker pull mysql:5.7.32
sudo docker run -d --name mysql-master -e MYSQL_ROOT_PASSWORD=1 --network=host -v /root/mysql_master/data:/var/lib/mysql -v /root/mysql_master/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.32
sudo docker run -d --name mysql-slave -e MYSQL_ROOT_PASSWORD=1 --network=host -v /root/mysql_slave/data:/var/lib/mysql -v /root/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.32
mysql -uroot -p1 -h 192.168.56.100 --port=3307
mysql -uroot -p1 -h 192.168.56.100 --port=3308
mysqldump -uroot -p1 -h192.168.56.100 -P3307 --all-databases --lock-all-tables > ~/master_db.sql
mysql -uroot -p1 -h192.168.56.100 -P3308 < ~/master_db.sql
1.4 配置MySQL主从
mysql –uroot –p -h 192.168.56.100 -P 3307
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 722 | | | |
+------------------+----------+--------------+------------------+-------------------+
$ mysql -uroot -p1 -h192.168.56.100 -P3308
$ change master to master_host='192.168.56.100', master_port=3307, master_user='slave', master_password='slave',master_log_file='mysql-bin.000003', master_log_pos=722;
$ start slave;
$ show slave status \G
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.56.100
Master_User: slave
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 722
Relay_Log_File: dev-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
02.django使用mysql主从
2.1 django中配置mysql主从
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'syl',
'HOST': '127.0.0.1',
'PORT': '3307',
'USER': 'root',
'PASSWORD': '1',
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'syl',
'HOST': '127.0.0.1',
'PORT': '3308',
'USER': 'root',
'PASSWORD': '1',
}
}
DATABASE_ROUTERS = ['utils.db_router.MasterSlaveDBRouter']
2.2 编写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