Ape Creation Call for Papers | 10.000 Zeichen langer Artikel zum Einsatz und zur Nutzung der MySQL-Datenbank im Unternehmen

Artikelverzeichnis

Mysql-Binärinstallation und Mycat-Lese-Schreib-Trennung

hallo~ Liebe Fans, der Inhalt dieses Blogbeitrags stellt hauptsächlich den relevanten Einsatz eines Projektdatenspeichers in einem Unternehmen vor!

Viele Freunde glauben, dass jeder mysql bereitstellen und installieren wird, wenn er Linux lernt. Aber tatsächlich wird msyql im Allgemeinen nicht allein verwendet. Für dieses Projekt wird es mit mycat kombiniert, um Lesen und Schreiben zu trennen. Durch dieses Teilen hofft man, mit zu teilen ihr alle.

1. Lernumgebung

CPU-Name IP konfigurieren
Meister 192.168.61.152 8 Kerne, 16 GB Speicher, 200 GB Festplatte
Sklave 192.168.61.153 8 Kerne, 16 GB Speicher, 200 GB Festplatte

2. Initialisieren Sie die Umgebung

2.1 Selinux und Firewall ausschalten

[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

2.2 Ändern Sie den Hostnamen

[root@localhost ~]# hostnamectl set-hostname mysql_master

[root@localhost ~]# hostnamectl set-hostname mysql_slave

2.3 Konfigurieren der Domänennamenauflösung

[root@localhost ~]# vim /etc/hosts 新增集群域名解析
192.168.61.152 mysql_master
192.168.61.153 mysql_slave

Bildbeschreibung hier einfügen

2.4 Zeitsynchronisation

[root@localhost ~]# yum install chrony

[root@localhost ~]# vim /etc/chrony.conf
server mysql_master iburst
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

注:注释所有server项,在下面新增server mysql_master iburst

[root@localhost ~]# systemctl enable chronyd.service
[root@localhost ~]# systemctl restart chronyd.service
[root@localhost ~]# chronyc sources

Bildbeschreibung hier einfügen

3. MySQL-Installation

3.1 Upload-Server für Binärpakete

分别上传至:
192.168.61.152的/root/下
192.168.61.153的/root/下

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

3.2 Nach /home entpacken

[root@localhost ~]# tar zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /home

Bildbeschreibung hier einfügen

3.3 Löschen Sie die Systemumgebung

[root@localhost ~]# rpm -qa |grep mariadb
[root@localhost ~]# rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps

3.4 MySQL-Benutzer erstellen

[root@localhost ~]# useradd -s /sbin/nologin -M mysql

Bildbeschreibung hier einfügen

3.5 Erstellen Sie ein Datenverzeichnis und erteilen Sie Berechtigungen

[root@localhost ~]# mkdir -p /home/mysql/data 			#数据目录
[root@localhost ~]# mkdir -p /home/mysql/logs 			#日志目录
[root@localhost ~]# touch /home/mysql/logs/error.log    #创建日志文件
[root@localhost ~]# mkdir -p /home/mysql/backup 			#备份目录
[root@localhost ~]# chown mysql:mysql -R /home/mysql 	#赋予权限 

3.6 Konfigurieren Sie die my.cnf-Datei

[root@localhost mysql]# cat /etc/my.cnf 
[mysql]
socket=/home/mysql/mysql.sock
# set mysql client default chararter
default-character-set=utf8

[mysqld]
socket=/home/mysql/mysql.sock
# set mysql server port  
port = 3306 # 默认是3306,如果这里发现3306已经被占用,可以更改
# set mysql install base dir
basedir=/home/mysql
# set the data store dir
datadir=/home/mysql/data/
pid-file=/home/mysql/mysql.pid
# set the number of allow max connnection
max_connections=2048	#最大连接数
# set server charactre default encoding
character-set-server=utf8
# the storage engine
default-storage-engine=INNODB
# 设置MySQL对表名等不区分大小写
lower_case_table_names=1
max_allowed_packet=200M
explicit_defaults_for_timestamp=true
#阻止过多尝试失败的客户端以防止暴力破解密码的情况,与性能并无太大的关系
max_connect_errors=30
#此参数确定数据日志文件的大小,以M为单位,根据数据更新频率调整。
innodb_log_file_size=50
#指定大小的内存来缓冲数据和索引,最大可以把该值设置成物理内存的80%
innodb_buffer_pool_size=10G
key_buffer_size=16M
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
log-bin=/home/mysql/logs/mysql-bin #开启binlog日志
binlog-format=ROW #选择row模式
expire_logs_days=30 #日志的保存天数
#错误日志存放地址
log-error = /home/mysql/logs/error.log
#开启slow日志
slow_query_log = ON
slow_query_log_file = /home/mysql/logs/slow.log
long_query_time = 20
log_queries_not_using_indexes
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
innodb_file_per_table=1
[mysql.server]
user=mysql
basedir=/home/mysql
#可以防止出现插入中文报错;如果此时不生效,可以强制在创建表的时候指定使用utf8的编码集 
[client]
default-character-set = utf8

3.7 Initialisieren Sie die Datenbank

[root@localhost ~]# /home/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/home/mysql/ --datadir=/home/mysql/data/

3.8 mysql starten

先将mysql.server放置到/etc/init.d/mysql中
[root@localhost ~]# cp /home/mysql/support-files/mysql.server /etc/init.d/mysql
启动
[root@localhost ~]# /etc/init.d/mysql restart

Bildbeschreibung hier einfügen

3.9 Umgebungsvariablen konfigurieren

[root@localhost ~]# vim /etc/profile 修改末尾添加两行
export PATH=$PATH:/home/mysql/support-files
export PATH=$PATH:/home/mysql/bin
[root@localhost ~]# source /etc/profile

Bildbeschreibung hier einfügen

3.10 Passwort konfigurieren

首先登录mysql
mysql 回车

Bildbeschreibung hier einfügen

root本地设置密码
mysql> SET PASSWORD = PASSWORD('123456');
mysql> FLUSH PRIVILEGES; 

Bildbeschreibung hier einfügen

3.11 Erstellen Sie einen neuen Remote-Benutzer

mysql> grant all on *.* to deploy@'%' identified by '123456';

Bildbeschreibung hier einfügen

3.12 Erstellen Sie einen neuen Abfragebenutzer

#创建只能查询的用户
mysql> grant select on zhihui.* to query@'%' identified by '123456';

Bildbeschreibung hier einfügen

3.13 Abfrageberechtigungen

#查询用户权限
mysql> use mysql
Database changed
mysql> select user,host from user;

3.14 Boot einrichten

[root@localhost ~]# chkconfig --add mysql
[root@localhost ~]# chkconfig --level 345 mysql on
[root@localhost ~]# chkconfig --list

Bildbeschreibung hier einfügen

3.15 Einstellen der Firewall

(1) 向防火墙添加 mysql 端口: 
[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
(2) 刷新防火墙规则: 
[root@localhost ~]# firewall-cmd --reload
(3) 验证端口,查询防火墙开放端口: 
[root@localhost ~]# firewall-cmd  --list-port

3.16 Verwenden Sie nacicat, um den Test zu verknüpfen

Bildbeschreibung hier einfügen

3.17 mysql_slave-Installation

部署mysql_slave需要重复执行上面指令
注:slave的my.cnf中的server-id=2,该参数不要和master的一致。

连接slave_192.168.61.153数据库

Bildbeschreibung hier einfügen

4. Datenbank-Master und -Slave

4.1 Vorbereitungen

确认事项,如下:
1.尽量保持主服务器和从服务器的服务版本一致
2.关闭iptables,关闭selinux,保证时间的一致
3.设置主机名(方便区分主从)
4.master端开启binlog日志功能
5.主服务器正常的情况下,从服务器永远不要写入
6.主与从服务器的server id 不能相同
7.mysql_master_192.168.61.152
8.mysql_slave_192.168.61.153

4.2 Datensynchronisationsarbeiten

将主库master中的库数据导入从库中
主库执行:
[root@mysql_master home]# ln -s /home/mysql/mysql.sock /tmp/
[root@mysql_master home]# mysqldump -uroot -p --all-databases >> /home/mysql/backup/all.sql
[root@mysql_master home]# scp /home/mysql/backup/all.sql 192.168.61.153:/home/mysql/backup/

Bildbeschreibung hier einfügen

4.3 Autorisieren Sie die Slave-Bibliothek

主库给从库授权
主库执行
mysql> grant replication slave on *.* to 'slave'@'192.168.61.153' identified by '123456';

注:授权从库192.168.61.153使用slave用户,密码123456访问主库的数据

Bildbeschreibung hier einfügen

从库登录测试
[root@mysql_slave mysql]# mysql -uslave -p123456 -h 192.168.61.152
mysql> show databases;

Bildbeschreibung hier einfügen

4.4 Konfigurieren Sie die Hauptbibliothek

修改配置文件
[root@master ~]# vim /etc/my.cnf
[mysqld]
innodb_file_per_table=1
server_id=1 	#id号

Bildbeschreibung hier einfügen

注释:每个主机都需要有id号 ,范围是1-65535,是什么数字都可以,但需要保证主从不冲突

生成新的日志文件
[root@mysql_master ~]# cd /home/mysql/logs/
[root@mysql_master logs]# rm -rf mysql-bin.*
[root@mysql_master logs]# /etc/init.d/mysql restart
[root@mysql_master logs]# ls mysql-bin.*
mysql-bin.000001  mysql-bin.index

查看日志位置和状态
mysql> show binlog events\G
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 154 	从154开始的
Binlog_Do_DB: 
Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

Bildbeschreibung hier einfügen

4.5 Konfigurieren Sie die Slave-Bibliothek

修改配置文件,从库执行
[root@mysql_slave ~]# vim /etc/my.cnf
[mysqld]
server-id=2
[root@mysql_slave ~]# /etc/init.d/mysql restart

查看slave状态
[root@mysql_slave ~]# mysql -uroot -p123456
mysql> show slave status\G;
Empty set (0.00 sec)

4.6 Master-Slave-Synchronisation

从库上执行

配置主从同步
[root@mysql_slave ~]# mysql -uroot -p123456
mysql> change master to
master_host='192.124.16.76',
master_user='slave',
master_password='123456',
master_port=3306, 
master_log_file='mysql-bin.000001',
master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.50 sec)

启动从服务器的角色
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.61.152	主库地址
Master_User: slave	同步用户
Master_Port: 3306		同步端口
Connect_Retry: 60 重试时间
Master_Log_File: mysql-bin.000001 日志文件
Read_Master_Log_Pos: 154 日志位置字符偏移量
Relay_Log_File: mysql_slave-relay-bin.000002 中继日志
Relay_Log_Pos: 320 中继日志记录到哪里了
Relay_Master_Log_File: mysql-bin.000001 日志文件
Slave_IO_Running: Yes 两个进程都正常
Slave_SQL_Running: Yes Yes就是读中继日志了
Replicate_Do_DB: 
Replicate_Ignore_DB: 
Replicate_Do_Table: 
Replicate_Ignore_Table: 
Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
Last_Errno: 0
Last_Error: 
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 454
Until_Condition: None
Until_Log_File: 
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File: 
Master_SSL_CA_Path: 
Master_SSL_Cert: 
Master_SSL_Cipher: 
Master_SSL_Key: 
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error: 
Last_SQL_Errno: 0
Last_SQL_Error: 
Replicate_Ignore_Server_Ids: 
Master_Server_Id: 1
Master_UUID: e7955f48-f699-11de-b03d-6cf049c2f465
Master_Info_File: /usr/local/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind: 
Last_IO_Error_Timestamp: 
Last_SQL_Error_Timestamp: 
Master_SSL_Crl: 
Master_SSL_Crlpath: 
Retrieved_Gtid_Set: 
Executed_Gtid_Set: 
Auto_Position: 0
1 row in set (0.00 sec)

4.7 Synchronisationstest

主服务器建库建表,主库执行
mysql> create database kkk;
mysql> use kkk
mysql> create table t1(id int);
mysql> insert into t1 values(10000);
mysql> flush logs;

从服务器查看效果
mysql> use kkk
mysql> select * from t1;
+-------+
| id |
+-------+
| 10000 |
+-------+
1 row in set (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.61.152
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql_slave-relay-bin.000004
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000002	#第2个日志了
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 627
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 33786cf9-e55c-11ec-8d84-000c29ada541
             Master_Info_File: /home/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

4.8 Datensicherung

# 值得注意的是:
AB复制并不意味着可以不用备份,因为如果master上删除了一个库,slave上会跟着删掉,所以备份还是需要的

使用mysqldump在从服务器上锁表备份,(选择执行下面参数)
mysql> flush tables with read lock;
[root@master ~]# mysqldump --all-databases > all.sql
[root@master ~]# mysql -e 'show master status' 
mysql> unlock tables;  //解锁表

5. Mycat-Lese-Schreib-Trennung

5.1 Hintergrund

随着互联网行业的蓬勃发展,应用程序的数据量也越来越大,我们仅仅通过单点数据库架构已经无法满足业务的需要,经常会出现查询缓慢,严重甚至宕机的情况。很多小伙伴可能会想,我们可以对 SQL 语句进行优化、MySQL 数据库优化、甚至采用主从高可用架构是不是就可以解决这个问题了呢?

答案是否定的,SQL 语句优化以及数据库层级的优化虽然可以加快 SQL 的查询速度,但是无法解决数据库的故障切换问题。那是不是主从高可用架构就可以解决这个问题呢,也不行,主从高可用架构虽然能解决数据库服务器的故障切换功能,但是无法解决数据库压力过大问题……

5.2 Einführung

Ein komplett quelloffener, großer Datenbank-Cluster für die Entwicklung von Unternehmensanwendungen
• Eine verbesserte Datenbank, die Transaktionen und ACID unterstützt und MySQL ersetzen kann
• Eine Datenbank auf Unternehmensebene, die als MySQL-Cluster betrachtet werden kann, um teure Oracle-Cluster zu ersetzen
• Ein Fusion-Speicher-Cache Neuer SQL Server für Technologie, NoSQL-Technologie, HDFS Big Data
• Eine neue Generation von Datenbankprodukten auf Unternehmensebene, die traditionelle Datenbanken und neue verteilte Data Warehouses kombinieren
• Ein neuartiges Datenbank-Middleware-Produkt

Die sogenannte Lese-Schreib-Trennung ist die erzwungene Trennung von Daten-Lese-Schreib-Operationen durch Code oder Datenbank-Middleware von Drittanbietern. Schreiboperationen werden auf alle Master-Server in der Master-Slave-Architektur (Multi-Master und Multi-Slave) verteilt (automatisches Failover kann erreicht werden), und Leseoperationen werden auf alle Slave-Server in der Master-Slave-Architektur und Lastenausgleich verteilt von Leseoperationen realisiert.

5.3 Zweck der Schreib-Lese-Trennung

实际工作中,数据库服务器的读操作操作明显要大于写操作,大概比例为 7:3。我们采用读写分离架构就是将读写业务分配到不同的服务器上,让服务器做特定的操作,不需要不断的切换工作模式,从而提高数据库服务器的工作效率。

5.3 mycat installieren

5.3.1 Übersicht über die Installationsumgebung

IP Knoten Anmerkung
192.168.61.152 Knoten 01 Meister
192.168.61.153 Knoten 02 Sklave
192.168.61.151 meine Katze Mindestkonfiguration: 8 Kerne, 16 GB Speicher, 100 GB Festplatte

5.3.2 jdk installieren

  • Laden Sie das jdk-Installationspaket hoch
  • jdk konfigurieren
1. 解压缩
[root@localhost ~]# hostnamectl set-hostname mycat
[root@localhost ~]# tar zxvf jdk-8u141-linux-x64.tar.gz -C /usr/local/

2. 配置环境变量
[root@mycat ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_141
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

[root@mycat ~]# source /etc/profile

3.配置域名
[root@mycat ~]# vim /etc/hosts	#添加
192.168.61.152 mysql_master
192.168.61.153 mysql_slave
192.168.61.151 mycat

4.测试jdk 安装是否成功
[root@mycat ~]# java -version

5.3.2 mycat bereitstellen

  • Benutzer erstellen
[root@mycat ~]# useradd -s /sbin/nologin -M mycat
  • Entpacken Sie das Installationspaket
[root@mycat ~]# tar zxvf Mycat-server-1.6.7.6-release-20210930213049-linux.tar.gz -C /home/
  • Autorisieren
[root@mycat ~]# chown -R mycat.mycat /home/mycat/
  • Umgebungsvariablen konfigurieren
.[root@mycat ~]# vim /etc/profile
export PATH=/home/mycat/bin:$PATH

Bildbeschreibung hier einfügen

[root@mycat ~]# source /etc/profile

[root@mycat mycat]# ll
总用量 12
drwxr-xr-x. 2 mycat mycat  190 6月   6 15:59 bin
drwxrwxrwx. 2 mycat mycat    6 4月  15 2020 catlet
drwxrwxrwx. 4 mycat mycat 4096 6月   6 15:59 conf
drwxr-xr-x. 2 mycat mycat 4096 6月   6 15:59 lib
drwxrwxrwx. 2 mycat mycat    6 9月  16 2021 logs
-rwxrwxrwx. 1 mycat mycat  227 9月  30 2021 version.txt
注释:
conf:java写的配置文件大多以xml为结尾
conf/schema.xml:虚拟数据库对应后端真实数据的ip和真正数据库的名字
conf/server.xml:mycat呈现给应用程序的虚拟库名、连接的用户名和密码
logs/wrapper.log:mycat的日志文件
  • mycat starten
[root@mycat ~]# /home/mycat/bin/mycat restart
Starting Mycat-server... 

Bildbeschreibung hier einfügen
8066-Port: Die Anwendung und der Entwickler schreiben Code, um eine Verbindung zum mycat8066-Port herzustellen

5.3.3 Konfigurieren Sie mycat, um eine Lese-Schreib-Trennung zu erreichen

  • Sicherung
[root@mycat mycat]# cd /home/mycat/
[root@mycat mycat]# cp conf/server.xml{,.bak}
[root@mycat mycat]# cp conf/schema.xml{,.bak}
  • Server.xml ändern
# 注:需要修改的地方标成紫色
# 修改底部管理员用户和只读用户信息及密码,配置schemas
[root@mycat ~]# vim /usr/local/mycat/conf/server.xml
<user name="mycatadmin" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">kkk,app</property>

</user>

<user name="mycatuser">
<property name="password">123456</property>
<property name="schemas">kkk,app</property>
<property name="readOnly">true</property>
</user>
# 退出并保存

Bildbeschreibung hier einfügen

  • Ändern Sie schema.xml
定义虚拟数据库,虚拟数据库关联数据节点,数据节点中定义真实数据库的名字;同时dataNode还需要关联数据主机,数据主机中分别定义了真正后端数据库的端口号和ip以及连接数据库的用户名和密码
# 替换为以下内容 # 其中192.168.61.152为写主机(主数据库)IP,192.168.61.153为读主机(从数据库)IP。

[root@mycat ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="">http://io.mycat/">

<schema name="kkk" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<schema name="app" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2">
</schema>

<dataNode name="dn1" dataHost="mycat" database="kkk" />
<dataNode name="dn2" dataHost="mycat" database="app" />
<dataHost name="mycat" maxCon="2048" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="mysql_master" url="192.168.61.152:3306" user="deploy" password="123456">
<readHost host="mysql_slave" url="192.168.61.153:3306" user="deploy" password="123456" />
</writeHost>
</dataHost>

</mycat:schema>

# 退出并保存

Bildbeschreibung hier einfügen

  • Einführung in den Algorithmus
balance 属性
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
2. balance="1", 全部的 readHost 与 stand by writeHost备用写主机参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 
互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
4. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
5. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType 属性
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后以切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
  • mycat neustarten
root@mycat ~]# /home/mycat/bin/mycat restart
[root@mycat ~]# netstat -antp | grep -E "8066|9066"

Bildbeschreibung hier einfügen

5.3.4 Lese-Schreib-Trennung testen

[root@mysql_master ~]# mysql -u mycatadmin -p -h 192.168.61.151 -P 8066
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6.7.6-release-20210930213049 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+----------+
| DATABASE |
+----------+
| app      |
| kkk      |
+----------+
2 rows in set (0.01 sec)
mysql> use app;
mysql> create table student1( id int,name varchar(50),sex enum('male','female'),age int); //创建表

mysql> insert into student1 values (1,'tom','male',23), (2,'jack','male',21),(3,'alice','female',19); //写入数据

mysql> select name,sex from student1; //查看数据
  • Protokollanalyse
在主服务器192.168.61.152上查看数据
[root@mysql_master ~]# tail -f  /home/mysql/data/mysql_master.log
2022-06-06T14:12:06.334119Z	   18 Query	insert into student1 values (1,'tom','male',23), (2,'jack','male',21),(3,'alice','female',19)

Bildbeschreibung hier einfügen

Ich denke du magst

Origin blog.csdn.net/weixin_42313749/article/details/126634107
Empfohlen
Rangfolge