Heim > Datenbank > MySQL-Tutorial > So erreichen Sie eine Lese-/Schreibtrennung zwischen MySQL-Master und -Slave basierend auf Docker und Django

So erreichen Sie eine Lese-/Schreibtrennung zwischen MySQL-Master und -Slave basierend auf Docker und Django

王林
Freigeben: 2023-06-01 15:07:12
nach vorne
939 Leute haben es durchsucht

1. Master-Slave-Konstruktion

Der Prozess oder das Prinzip der Slave-Synchronisation:

  • 1) Der Master zeichnet Änderungen im Binärprotokoll auf.

  • 2) Der Master verfügt über einen I/O-Thread, um das Binärprotokoll an den Slave zu senden #

  • 3) Der Slave verfügt über einen I/O-Thread, um die vom Master gesendete Binärdatei in das Relaisprotokoll zu schreiben; 🎜#4) Der Slave hat einen Der SQL-Thread verarbeitet Slave-Daten gemäß dem Relay-Protokoll.

  • Praktische Bedienung

  • Erstellen Sie zwei Ordner:

mkdir  /home/mysql/data/
touch /home/mysql/conf.d
touch /home/mysql/my.cnf
 
mkdir  /home/mysql2/data/
touch /home/mysql/conf.d
touch /home/mysql/my.cnf
Nach dem Login kopieren

# 🎜 🎜 #Ändern Sie die Konfigurationsdatei:

Konfigurationsdatei der Hauptbibliothek, Server-ID und Binlog-Protokoll aktivieren

[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
server-id=100  
log-bin=mysql-bin
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
Nach dem Login kopieren

Konfiguration der Slave-Bibliothek :

Darunter befinden sich zwei weitere Zeilen

log-bin=mysql-slave-bin #Specify logrelay_log=edu -mysql -relay-bin gibt das Relay-Protokoll an. Erstellen Sie einen Testbenutzer und autorisieren Sie

[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
server-id=101 
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
Nach dem Login kopieren

, sich mit der Slave-Bibliothek zu verbinden und die Verbindung mit der Hauptbibliothek zu konfigurieren.


Verwenden Sie die Befehl „Slave-StatusG anzeigen“ OK Überprüfen Sie, ob die Master-Protokolldatei dieselbe ist

settings.py-Konfiguration

#启动主库容器(挂载外部目录,端口映射成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
#启动从库容器(挂载外部目录,端口映射成33306,密码设置为123456)
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
Nach dem Login kopieren
Lese-/Schreibtrennung manuell festlegen

#在主库创建用户并授权
##创建test用户
create user 'test'@'%' identified by '123';
##授权用户
grant all privileges on *.* to 'test'@'%' ;
###刷新权限
flush privileges;
#查看主服务器状态(显示如下图)
show master status;
# 可以看到日志文件的名字,和现在处在哪个位置
Nach dem Login kopieren

Automatisch angeben (Router schreiben und Einstellung konfigurieren)# 🎜🎜#Erstellen Sie eine db_router.py im Stammverzeichnis

#连接从库
mysql -h 172.16.209.100 -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;
####这两个是yes表示配成功 ####
   Slave_IO_Running: Yes
   Slave_SQL_Running: Yes
Nach dem Login kopieren

In Einstellung registrieren

#在主库上创建数据库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);
Nach dem Login kopieren
Feinkörniger (erforderlich bei Unterdatenbank und Tabellenunterdatenbank)# 🎜🎜#
#1  在setting中配置
DATABASES = {
    # 主库
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lqz1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.133.225.166',
        'PORT': 33307,
    },
    # 从库
    'db1': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lqz1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.133.225.166',
        'PORT': 33306,
    },
}
Nach dem Login kopieren
Bei der Migration der Datenbank können Sie angeben, welche Tabellenstruktur der App in welche Bibliothek migriert wird

####手动来做
    # 向default库写,主库
    res=models.Book.objects.using('default').create(name='金瓶梅',price=33.4)
    # 去从库查
    res=models.Book.objects.using('db1').all().first()
    print(res.name)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo erreichen Sie eine Lese-/Schreibtrennung zwischen MySQL-Master und -Slave basierend auf Docker und Django. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage