MySQL - [04] 分布式部署&主从复制&读写分离
一、前言
Q1:为什么需要主从复制?
1、在业务复杂的系统中,有一条SQL语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务。使用主从复制,让主库负责写,从库负责读,这样即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
2、做数据的热备
3、架构的扩展。业务量越来越大,I/O 访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O范围的频率,提高单个机器的I/O性能。
Q2:什么是主从复制?
MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
Q3:主从复制原理
(1)master服务器将数据的改变记录二进制binlog文件,当master上的数据发生改变时,则将其改变写入二进制日志中;
(2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件。
(3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒。
也就是说:
- 从库会生成两个线程,一个I/O线程,一个SQL线程;
- I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
- 主库会生成一个log dump线程,用来给从库 I/O 线程传binlog;
- SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行。
注意:
1、master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。
2、slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读取binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
3、MySQL复制至少需要两个MySQL的服务,当然MySQL服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
4、MySQL复制最好确保master和salve服务器上的MySQL版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)
5、master和slave两节点间时间需同步
具体步骤:
1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user、password、port、ip),并且让从库知道,二进制日志的起点位置(file名position号);start slave
2、从库的IO线程和主句的dump线程建立连接。
3、从库根据change master to语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay会自动被清理purge
Step1:基础环境准备
虚拟机环境:VMware workstation
服务器信息:
| 主机名 | IP | 操作系统 |
| node01 | 192.168.1.131 | CentOS Linux release 7.9.2009 (Core) |
| node02 | 192.168.1.132 | CentOS Linux release 7.9.2009 (Core) |
| node03 | 192.168.1.133 | CentOS Linux release 7.9.2009 (Core) |
| node04 | 192.168.1.134 | CentOS Linux release 7.9.2009 (Core) |
防火墙:已关闭,并禁止开机自启
systemctl stop firewalld && systemctl disable firewalld
SELinux:已禁用
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
Step2:MySQL主从库角色分配
| 主机名 | IP | 角色 |
| node01 | 192.168.1.131 | 不进行操作 |
| node02 | 192.168.1.132 | 主库 |
| node03 | 192.168.1.133 | 从库 |
| node04 | 192.168.1.134 | 从库 |
Step3:安装MySQL
1、卸载CentOS 7.9默认安装的MariaDB
[root@node02 ~]# rpm -qa | grep mysql
[root@node02 ~]#
[root@node02 ~]#
[root@node02 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@node02 ~]#
[root@node02 ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@node02 ~]# rpm -qa | grep mariadb
2、官网下载mysql安装包,上传到node02节点(/root/0_0)并解压

# 在root目录下创建一个中转站的目录0_0(根据个人习惯)
[root@node02 0_0]# pwd
/root/0_0
[root@node02 0_0]# ll
总用量 823256
-rw-r--r-- 1 root root 843008000 1月 10 00:00 mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
[root@node02 0_0]#
[root@node02 0_0]#
[root@node02 0_0]#
[root@node02 0_0]# tar -xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
mysql-community-client-8.0.28-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
mysql-community-common-8.0.28-1.el7.x86_64.rpm
mysql-community-devel-8.0.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.28-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
mysql-community-libs-8.0.28-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm
mysql-community-server-8.0.28-1.el7.x86_64.rpm
mysql-community-test-8.0.28-1.el7.x86_64.rpm
[root@node02 0_0]#
[root@node02 0_0]#
[root@node02 0_0]# ll -l
总用量 1646504
-rw-r--r-- 1 root root 843008000 1月 10 00:00 mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
-rw-r--r-- 1 7155 31415 55199948 12月 18 2021 mysql-community-client-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 5933684 12月 18 2021 mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 645388 12月 18 2021 mysql-community-common-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 7763684 12月 18 2021 mysql-community-devel-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 23637584 12月 18 2021 mysql-community-embedded-compat-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 2215928 12月 18 2021 mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 4935572 12月 18 2021 mysql-community-libs-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 1265072 12月 18 2021 mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 473116268 12月 18 2021 mysql-community-server-8.0.28-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 268279684 12月 18 2021 mysql-community-test-8.0.28-1.el7.x86_64.rpm
3、按照以下顺序安装
[root@node02 0_0]# rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-common-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-common-8.0.28-1.e################################# [100%]
[root@node02 0_0]# rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-client-plugins-8.################################# [100%]
[root@node02 0_0]#
[root@node02 0_0]# rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-libs-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-libs-8.0.28-1.el7################################# [100%]
[root@node02 0_0]# rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-client-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-client-8.0.28-1.e################################# [100%]
[root@node02 0_0]#
[root@node02 0_0]# rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-icu-data-files-8.################################# [100%]
[root@node02 0_0]# rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-server-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-server-8.0.28-1.e################################# [100%]
[root@node02 0_0]#
在这一步可能会遇到以下问题
# 发现缺少类库文件
[root@node03 0_0]# rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-server-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
错误:依赖检测失败:
libaio.so.1()(64bit) 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
libaio.so.1(LIBAIO_0.1)(64bit) 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
libaio.so.1(LIBAIO_0.4)(64bit) 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
# 可以通过yum provides libaio.so* 查询是哪个包提供该文件
[root@node03 0_0]# yum provides libaio.so*
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: mirrors.ustc.edu.cn
libaio-0.3.109-13.el7.i686 : Linux-native asynchronous I/O access library
源 :base
匹配来源:
提供 :libaio.so.1(LIBAIO_0.4)
提供 :libaio.so.1.0.0
提供 :libaio.so.1.0.0(LIBAIO_0.1)
提供 :libaio.so.1(LIBAIO_0.1)
提供 :libaio.so.1
提供 :libaio.so.1.0.0(LIBAIO_0.4) libaio-0.3.109-13.el7.x86_64 : Linux-native asynchronous I/O access library
源 :base
匹配来源:
提供 :libaio.so.1.0.0(LIBAIO_0.1)(64bit)
提供 :libaio.so.1(LIBAIO_0.4)(64bit)
提供 :libaio.so.1.0.0(LIBAIO_0.4)(64bit)
提供 :libaio.so.1.0.0()(64bit)
提供 :libaio.so.1(LIBAIO_0.1)(64bit)
提供 :libaio.so.1()(64bit) libaio-0.3.109-13.el7.x86_64 : Linux-native asynchronous I/O access library
源 :@base
匹配来源:
提供 :libaio.so.1.0.0(LIBAIO_0.1)(64bit)
提供 :libaio.so.1(LIBAIO_0.4)(64bit)
提供 :libaio.so.1.0.0(LIBAIO_0.4)(64bit)
提供 :libaio.so.1.0.0()(64bit)
提供 :libaio.so.1(LIBAIO_0.1)(64bit)
提供 :libaio.so.1()(64bit)
# 然后可以执行yum list 过滤出相关的包
[root@node03 0_0]# yum list | grep libaio
libaio.i686 0.3.109-13.el7 base
libaio.x86_64 0.3.109-13.el7 base
libaio-devel.i686 0.3.109-13.el7 base
libaio-devel.x86_64 0.3.109-13.el7 base
[root@node03 0_0]#
# 检查这个包是否已经安装(肯定没安装)
[root@node03 0_0]# yum list installed | grep libaio
[root@node03 0_0]#
# 根据操作系统安装对应的包
[root@node03 0_0]# yum -y install libaio.x86_64
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 libaio.x86_64.0.0.3.109-13.el7 将被 安装
--> 解决依赖关系完成 依赖关系解决 ===========================================================================================================================================================================================================
Package 架构 版本 源 大小
===========================================================================================================================================================================================================
正在安装:
libaio x86_64 0.3.109-13.el7 base 24 k 事务概要
===========================================================================================================================================================================================================
安装 1 软件包 总下载量:24 k
安装大小:38 k
Downloading packages:
libaio-0.3.109-13.el7.x86_64.rpm | 24 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告:RPM 数据库已被非 yum 程序修改。
** 发现 2 个已存在的 RPM 数据库问题, 'yum check' 输出如下:
2:postfix-2.10.1-9.el7.x86_64 有缺少的需求 libmysqlclient.so.18()(64bit)
2:postfix-2.10.1-9.el7.x86_64 有缺少的需求 libmysqlclient.so.18(libmysqlclient_18)(64bit)
正在安装 : libaio-0.3.109-13.el7.x86_64 1/1
验证中 : libaio-0.3.109-13.el7.x86_64 1/1 已安装:
libaio.x86_64 0:0.3.109-13.el7 完毕!
4、根据需要修改安装目录权限,将安装目录的拥有者改为mysql,如果系统没有,需要添加mysql用户及分组
只是用mysql运行程序,禁止mysql登录,增加安全性
另外需要注意,在上一步安装rpm之后,/var/lib/mysql目录下应该是有相关文件生成,可以提前检查一下。
如果/var/lib/mysql下的文件的属组未修改为 mysql:mysql,那么mysqld服务是起不来的。
[root@node02 0_0]# id mysql
id: mysql: no such user
[root@node02 0_0]# groupadd mysql
[root@node02 0_0]# useradd mysql -s /usr/sbin/nologin -g mysql
[root@node02 0_0]# id mysql
uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)
[root@node02 0_0]# chown -R mysql:mysql /var/lib/mysql
4、初始化数据库
[root@node02 0_0]# mysqld --initialize --console
[root@node02 0_0]#
5、启动mysql服务,并查看初始化密码
[root@node02 0_0]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
[root@node02 0_0]#
[root@node02 0_0]#
[root@node02 0_0]#
[root@node02 0_0]#
[root@node02 0_0]# systemctl start mysqld
[root@node02 0_0]#
[root@node02 0_0]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2024-01-10 00:08:09 CST; 3s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3204 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3228 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/mysqld.service
└─3228 /usr/sbin/mysqld
1月 10 00:08:08 node02 systemd[1]: Starting MySQL Server...
1月 10 00:08:09 node02 systemd[1]: Started MySQL Server.
[root@node02 0_0]#
[root@node02 0_0]# cat /var/log/mysqld.log | grep localhost
2024-01-09T16:04:24.123912Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: #s?deDDo(1sW
[root@node02 0_0]# mysql -uroot -p#s?deDDo(1sW
-bash: 未预期的符号 `(' 附近有语法错误
[root@node02 0_0]# mysql -uroot -p'#s?deDDo(1sW'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.28
Copyright (c) 2000, 2022, 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>
6、修改root密码
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@node02 0_0]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, 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>
7、在node03、node04也部署上mysql
8、设置字符集为utf-8(配置/etc/my.cnf)(根据需要设置)
# 在[mysqld]部分添加
character-set-server=utf8mb4
# 在文件末尾新增[client]段,并在[client]段添加
default-character-set=utf8mb4
9、修改远程访问权限
mysql> grant all on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
Step4:主从复制
前提条件:在node03、node04也进行mysql的安装
(1)一主一从
(2)主主复制
(3)一主多从
(4)多主一从
(5)联级复制(灾备)
(1)一主一从
1、在主节点(node02)服务器进行如下配置
vi /etc/my.cnf
# ---------------------------------[/etc/my.cnf]-----------------------------------
[mysqld]
# 在mysqld模块中添加如下配置信息
log-bin=master-bin # 二进制文件名称
binlog-format=ROW # 二进制日志格式,有row、statement、mixed三种格式
# row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍
# statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。
# mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
server-id=1 # 要求各个服务器的id必须不一样
binlog-do-db=msb # 同步的数据库名称
# ---------------------------------[/etc/my.cnf]-----------------------------------
2、修改/etc/my.cnf之后需要重启服务
systemctl restart mysqld
3、在主库创建用于主从复制的用户slave,并查看主库的file名称和position(在主库执行)
mysql> create user 'slave'@'%' identified with mysql_native_password by 'Admin#2023';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000005 | 1041 | msb | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4、修改从服务器的配置文件,修改后重启mysqld服务(在从库执行)
vi /etc/my.cnf
# ---------------------------------[/etc/my.cnf]-----------------------------------
[mysqld]
log-bin=master-bin
binlog-format=ROW
server-id=2
# ---------------------------------[/etc/my.cnf]-----------------------------------
5、在从服务器修改master,并启动slave,查看slave的Slave_IO_Running和Slave_SQL_Running的状态是否是Yes(在从库执行)
mysql> change master to master_host='192.168.1.132',master_port=3306,master_user='slave',master_password='Admin#2023',master_log_file='master-bin.000005',master_log_pos=1041;
Query OK, 0 rows affected, 9 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 192.168.1.132
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000005
Read_Master_Log_Pos: 1041
Relay_Log_File: node03-relay-bin.000002
Relay_Log_Pos: 327
Relay_Master_Log_File: master-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
6、在主库msb数据库下新增一个表aa,并insert几条数据,查看从库msb下变化
[node02]
mysql> use msb;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql>
mysql>
mysql> create table aa(id int,name varchar(255));
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+---------------+
| Tables_in_msb |
+---------------+
| aa |
+---------------+
1 row in set (0.00 sec)
mysql> insert into aa values (1,'路飞');
Query OK, 1 row affected (0.00 sec)
mysql> insert into aa values (2,'索隆');
Query OK, 1 row affected (0.00 sec)
[node03]
mysql> show tables from msb;
Empty set (0.00 sec)
mysql> show tables from msb;
+---------------+
| Tables_in_msb |
+---------------+
| aa |
+---------------+
1 row in set (0.00 sec)
mysql>
mysql>
mysql> select * from aa;
ERROR 1046 (3D000): No database selected
mysql> select * from msb.aa;
Empty set (0.00 sec)
mysql>
mysql>
mysql>
mysql> select * from msb.aa;
Empty set (0.00 sec)
mysql> select * from msb.aa;
+------+--------+
| id | name |
+------+--------+
| 1 | 路飞 |
| 2 | 索隆 |
+------+--------+
2 rows in set (0.00 sec)
一主一从配置完毕
如果同步出错,则停止同步,重置后再次开启同步。
(2)主主复制
(3)一主多从
(4)多主一从
(5)联级复制(灾备)
未完待续......
MySQL - [04] 分布式部署&主从复制&读写分离的更多相关文章
- Mysql多实例安装+主从复制+读写分离 -学习笔记
Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...
- MySQL 主从复制&读写分离 简介
1. 读写分离&读写分离 简介 主从同步延迟 分配机制 解决单点故障 总结 2. 主从复制&读写分离 搭建 搭建主从复制(双主) 搭建读写分离 1. 读写分离&读写分离 简介 ...
- mysql主从复制-读写分离
mysql主从复制+读写分离 环境:mysql主:193.168.1.1mysql从:193.168.1.2amoeba代理:193.168.1.3########################## ...
- Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- 黄聪:Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- redis 主从复制+读写分离+哨兵
1.redis读写分离应用场景 当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能.redis ...
- Mycat实现mysql主从复制(读写分离)
数据库性能瓶颈主要原因: 随着用户数的增多,带来的是数据库连接的大幅度增长 随着业务体量的增长,表数据量(空间存储的问题)的大幅增长,其中涉及到索引的优化,mysql默认的索引是硬盘级别的,BTREE ...
- mysql主从复制-读写分离-原理
Mysql主从复制和读写分离 在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是不能满足实际需求的.因此,一般通过主从复制 ...
- Mysql主从复制读写分离
一.前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来 ...
- mysql主从复制+读写分离 菜鸟入门
MYsql主从复制 1.mysql主从复制原理: Master将数据变化记录到二进制日志中[binary log] Slave将master的二进制日志[binary log]拷贝到自己的中继日志[r ...
随机推荐
- ng-alain: 配置开发环境
配置 ng-alain 开发环境 安装 1. Yarn 官方文档实际上是基于 Yarn 1 的,请从 Yarn 1 开始.在创建项目之后,可以升级到 Yarn 3. 注意:直接通过 npm 安装 ya ...
- 一文学会powshell使用及功能
声明! 原文来自微信公众号泷羽Sec-track 认识powsehll PowerShell(通常称作PowerShell或Windows PowerShell)是由微软开发的一种任务自动化和配置管理 ...
- 聊一聊 C#线程池 的线程动态注入 (中)
一:背景 1. 讲故事 上一篇我们用 Thread.Sleep 的方式演示了线程池饥饿场景下的动态线程注入,可以观察到大概 1s 产生 1~2 个新线程,很显然这样的增长速度扛不住上游请求对线程池的D ...
- .NET Core:架构、特性和优势详解
.NET Core:架构.特性和优势详解 在软件开发领域,保持领先地位至关重要.随着技术以指数级的速度发展,开发人员不断寻求高效.可扩展且多功能的解决方案来应对现代挑战..NET Core 就是这样一 ...
- Solution Set -「DS 专题」兔年的兔子写 DS 会有小常数吗?
目录 Day 1 「Ynoi 2009」「洛谷 P6109」rprmq1 ^ 「Ynoi Easy Round 2021」「洛谷 P8512」TEST_152 「Ynoi 2005」「洛谷 P7907 ...
- SpringBoot(八) - 统一数据返回,统一分页工具,统一异常处理 (生成随机数,正则校验)
1.统一数据返回 使用逆向工程来进行测试,实体,mapper等省略: 1.1 直接使用 RequestResoult 1.1.1 RequestResoult 请求结果返回实体 //统一返回 实体 类 ...
- 第六章 (Nginx+Lua)Web开发实战HTTP服务
此处我说的HTTP服务主要指如访问京东网站时我们看到的热门搜索.用户登录.实时价格.实时库存.服务支持.广告语等这种非Web页面,而是在Web页面中异步加载的相关数据.这些服务有个特点即访问量巨大.逻 ...
- Maven详操作指南
学习目标1. Maven 的环境搭建2. Pom.xml 文件的使用3. Maven 指令的使用4. Idea 创建 Maven 项目使用 Maven 改变传统项目构建为什么使用Maven,解决了哪些 ...
- Billyboss pg walkthough Intermediate window
nmap ┌──(root㉿kali)-[/home/ftpuserr/nc.exe] └─# nmap -p- -A -sS 192.168.219.61 Starting Nmap 7.94SVN ...
- 解决StringBuilder readline阻塞问题
readline之所以会阻塞socket流没有结束符 阻塞场景:read() 没有读取到任何数据 readLine() 没有读取到结束符或者换行符 可以用ready判断通道中数据是否读完,读完返回fa ...