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 ...
随机推荐
- 基于.NET8+Vue3开发的权限管理&个人博客系统
前言 今天大姚给大家分享一个基于.NET8+Vue3开发的权限管理&个人博客系统:Easy.Admin. 项目介绍 Easy.Admin是一个基于.NET8+Vue3+TypeScript开发 ...
- [双体系练习]Java基础易错点
toCharArray()和split()的区别. toCharArray() 这个方法将一个字符串转换成一个字符数组.每个字符都会成为数组中的一个元素. 返回值:一个包含字符串中所有字符的char数 ...
- 【分享】记一次项目迁移(docker java | docker python)
项目:前端Vue3,后端Python+Java,数据库Redis+MySQL 原先部署在centos7里面的,使用的宝塔面板部署的,还算方便. 但是服务器要到期了,要将项目迁移到另外一台服务器. 另外 ...
- 【UI框架】ANtDesignVue中的Content超过一页显示问题
假设content部分是绿色 当内容超出一页之后,滑下去,后面的都没有底色. 如果footer有内容,content的内容甚至会和footer内容重叠在一起,同时,footer的内容随着下滑,位置就不 ...
- Composer: Command Not Found
I am using CentOS and had same problem. I changed /usr/local/bin/composer to /usr/bin/composer and i ...
- 将现有的系统环境文件打包成Docker镜像文件
一.现有A系统Centos7操作: 备注:A系统里最好不安装Docker,否则会报错 卸载不必要软件包 yum remove -y iwl* *firmware* --exclude=kernel-f ...
- Opencv 中 Mat中元素的值读取方法总结
1.利用 at 函数读取 (1)单通道图像读取方式 Mat img1 = imread(filename,IMREAD_GRAYSCALE); for( size_t nrow = 0; nrow & ...
- vue辅助函数mapState和mapGetter前面三个点到底是什么意思:对象展开运算符
import store from "./store" computed: { useName: function() { return store.state.userName ...
- v-for和v-if一起使用时的坑:The 'XXX' expression inside 'v-for' directive should be replaced with a computed property that returns filtered array instead. You should not mix 'v-for' with 'v-if'
目的:Vue - ElementUI中循环渲染表格,控制字段的显示与隐藏 v-if与v-for同时使用. 在Vue中使用v-for循环一个数组/对象时,如果再使用v-if,那么会提示使用计算属性(能正 ...
- Matlab R2009b 版 license 到期问题
打开2009b Matlab,反复提示需要激活,是lisense到期了,到期时间2017年11月11日.解决方法: 将以下内容替换 Matlab 安装路径下 license/*.lic 文件中的所有内 ...