西安找工作哪个网站好,2017优秀网站设计案例,建设银行对账网站,珠海自适应网站设计目录
一#xff0c;理解什么是mysql主从复制
1#xff0c;mysql支持的复制类型
2#xff0c;mysql主从复制的工作流程
二#xff0c;配置mysql主从复制
三#xff0c;配置mysql主主复制
四#xff0c;mysql读写分离
1#xff0c;了解什么是mysql读写分离
2…目录
一理解什么是mysql主从复制
1mysql支持的复制类型
2mysql主从复制的工作流程
二配置mysql主从复制
三配置mysql主主复制
四mysql读写分离
1了解什么是mysql读写分离
2mysql读写分离的工作原理
3准备工作 4配置mysql读写分离 一理解什么是mysql主从复制
1mysql支持的复制类型
基于语句的复制
在主服务器上执行的sql语句在从服务器上执行同样的语句mysql默认采用基于语句的复制效率比较高。
基于行的复制
把改变的内容复制过去而不是把命令在从服务器上执行一遍。
基于二进制文件的复制
完全基于语句复制binlog日志文件中记录原始 SQL 语句默认模式。 2mysql主从复制的工作流程
在每个事务更新数据完成之前Master 将这些改变记录进二进制日志。写入二进制日志完成后Master 通知存储引擎提交事务。Slave 将 Master 的 Binary log 复制到其中继日志(Relay log)。首先Slave 开始一个工作线程--I/0 线程,I/0 线程在 Master 上打开一个普通的连接然后开始 Binlog dump process。Binlog dump process 从 Master 的二进制日志中读取事件如果已经跟上 Master它会睡眠并等待 Master 产生新的事件。I/0 线程将这些事件写入中继日志。SQL slave thread(SQl 从线程)处理该过程的最后一步。SQL 线程从中继日志读取事件并重放其中的事件而更新 Slave数据使其与 Master 中的数据保持一致。只要该线程与 I/0 线程保持一致中继日志通常会位于0S的缓存中所以中继日志的开销很小。复制过程有一个很重要的限制即复制在S1ave 上是串行化的也就是说 Master 上的并行更新操作不能在 Slave 上并行操作。 二配置mysql主从复制
1准备工作
dnf -y install ntpdate ##安装时间同步软件包
date ##查看时间是否同步systemctl stop firewalld ##关闭防火墙
setenforce 0 ##关闭linux内核##修改mysql配置文件添加以下内容(mysqld模块中添加)
[rootlocalhost local]# vim /etc/my.cnf
log-bin/usr/local/mysql/mysql-bin ##指定二进制文件位置
server-id1 ##设置mysql服务id
binlog-formatMIXED ##用于控制二进制日志的记录格式为混合模式systemclt restart mysqld ##重启mysql数据库
2登陆mysql进行操作
create user myslave% identified by pwd123; ##创建用户grant replication slave on *.* to myslave%; ##给复制权限
alter user myslave% identified with mysql_native_password by pwd123; ##为myslave设置密码为pwd123.flush privileges; ##更新用户信息mysql show master status; ##查看主服务区状态信息等会要用
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000001 | 342 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)3在从设备进行操作
[rootlocalhost local]# vim /etc/my.cnf
server-id2 ##在从服务器添加id(不能与主服务器重复)
systemclt restart mysqld ##重启mysql数据库##在从服务器进行操作
change master to master_host192.168.10.101,master_usermyslave,master_password123456,master_log_filemysql-bin.000003,master_log_pos1438;start slave; ##启动slave
show slave status\G ##查看主从状态Slave_IO_Running: Yes ##找到此部分为两个yes就成功了Slave_SQL_Running: Yes4验证
##在主服务器创建名为auth的数据库
mysql create database auth;##查看从服务器是否同步成功
mysql show databases;
--------------------
| Database |
--------------------
| auth |
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
5 rows in set (0.00 sec)
三配置mysql主主复制
1配置从服务器
##在从服务器添加
[rootbogon ~]# vim /etc/my.cnf
log-bin/usr/local/mysql/mysql-bin
binlog-formatMIXEDsystemclt restart mysqld ##重启mysql数据库create user myslave% identified by pwd123; ##创建用户
grant replication slave on *.* to myslave%; ##修改权限
alter user myslave% identified with mysql_native_password by pwd123; ##该密码
flush privileges; ##刷新show master status; ##查看状态信息
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000001 | 1149 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)stop slave; ##一定要关闭slave
2配置双主连接
##在101操作
change master to master_host192.168.10.102,master_usermyslave,master_ppasswordpwd123,master_log_filemysql-bin.000001,master_log_pos1149; ##查看102的状态
mysql show master status;
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000001 | 1149 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)##在102操作
change master to master_host192.168.10.101,master_usermyslave,master_passwordpwd123,master_log_filemysql-bin.000001,master_log_pos342; ##查看101的状态
mysql show master status;
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000001 | 342 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)四mysql读写分离
1了解什么是mysql读写分离
主从复制机制
主数据库Master负责处理所有写入操作如 INSERT、UPDATE、DELETE并将数据变更通过二进制日志Binlog实时同步到从数据库。从数据库Slave通过复制主库的 Binlog 来保持数据与主库一致专门处理读取操作如 SELECT。同步方式支持异步复制主库无需等待从库确认、半同步复制主库等待至少一个从库确认和全同步复制所有从库确认后才提交需根据业务一致性需求选择。
读写路由规则
写操作定向到主库执行。读操作负载均衡到多个从库执行分摊主库压力。
主要优势
提升系统性能读写操作分离后主库专注于写入从库分担读压力避免单一节点资源竞争尤其适合读多写少的场景。高可用性与容灾当主库故障时可通过切换如自动故障转移工具 Orchestrator、MHA将某个从库提升为主库减少服务中断时间从库可作为备份节点或用于数据分析、报表生成等离线任务不影响主库性能。减轻主库压力避免大量读操作阻塞写入操作提升主库写入效率如高并发场景下的订单创建、用户注册。 2mysql读写分离的工作原理
1基于中间代理层实现
MyCAT 是一款开源的分布式关系型数据库中间件主要用于解决大规模数据存储和高效查询的需求。它支持分布式 SQL 查询兼容 MySQL通信协议能够通过数据分片提高数据查询处理能力。MyCAT的前端用户可以将其视为一个数据库代理使用 MySQL 客户端工具和命令行访问而后端则可以通过 MySQL 原生协议与多个 MySQL服务器通信或者使用 JDBC协议与大多数主流数据库服务器通信
MyCat 通过SQL 拦截、解析和路由将写请求定向到主库读请求负载均衡到从库同时结合主从复制监控和故障切换机制实现了高性能、高可用的读写分离架构。其核心价值在于对应用透明使开发者无需关心数据库集群细节专注于业务逻辑。 3准备工作
需要五台虚拟机(前提必须做好主从复制)
192.168.10.101mysql主服务器192.168.10.102mysql从服务器192.168.10.103mysql从服务器192.168.10.104mycat服务器192.168.10.105客户端 4配置mysql读写分离 在mycat服务进行操作
##准备好mycat的四个安装组件
[rootdaili src]# ls
debug mycat2-1.21-release-jar-with-dependencies.jar
jdk-8u171-linux-x64.rpm mycat2-install-template-1.20.zip
kernels mysql-connector-java-8.0.18.jar
[rootdaili src]# rpm -ivh jdk-8u171-linux-x64.rpm ##在mycat服务器进行操作
rpm -ivh jdk-8u171-linux-x64.rpm ##使用rpm安装jdkunzip mycat2-install-template-1.20.zip -d /usr/local/ ##解压mycat的安装包解压到/usr/local
中ln -s /usr/local/mycat/bin/* /usr/local/bin ##别忘了制作软链接cd /usr/local/mycat/bin
[rootdaili bin]# chmod x * ##最后授予可执行的权限[rootdaili bin]# mycat -h ##使用此命令测试mycat是否安装成功
Usage: /usr/local/bin/mycat { console | start | stop | restart | status | dump }在主从服务器进行操作
##在主服务器进行操作(不需要在从服务器进行操纵因为已经做过主从复制从服务器已经复制过)
create user mycat% identified by pwd123; ##创建mycat用户用于连接grant all on *.* to mycat%; ##对mycat用户进行授权alter user mycat% identified with mysql_native_password by pwd123; ##对mycat用户账号进行配置变更明确指定该用户的密码为加密方式。flush privileges; ##刷新权限##在从服务器查看mycat用户
select * from mysql.user\G Host: %User: mycatSelect_priv: YInsert_priv: YUpdate_priv: Y
......./省略部分内容
在mycat服务器进行操作
vim mycat/conf/datasources/prototypeDs.datasource.json password:pwd123, ##密码改为pwd123url:jdbc:mysql://192.168.10.101:3306/mysql? ##ip改为主服务192.168.10.101 useUnicodetrueserverTimezoneAsia/ShanghaicharacterEncodingUTF-8,user:mycat, ##账户修改为mycat[rootdaili local]# cat /usr/local/mycat/conf/users/root.user.json ##查看登陆mycat用到的账号和密码
{dialect:mysql,ip:null,password:123456,transactionType:xa,username:root
}[rootdaili conf]# pwd
/usr/local/mycat/conf[rootdaili conf]# vim server.jsondefaultLoadBalance:BalanceRoudRobin, ##改为轮询算法(3行)mycat restart ##重启mycat
在105客户端进行登陆
[rootlocalhost ~]# dnf -y install mysql ##使用dnf方法安装mysql[rootlocalhost ~]# mysql -uroot -p123456 -P8066 -h192.168.10.104 ##进行登陆-P一定要为大写
mysql
改进读写分离
##增加主库master name:master ##name后面名字用户自定义
mysql/* mycat:createDataSource{ name:master,url:jdbc:mysql://192.168.10.101:3306/?useSSLfalsecharacterEncodingUTF-8useJDBCCompliantTimezoneShifttrue,instanceType:WRITE,user:mycat,password:pwd123} */;##增加从库slave1和slave2 ##name后面名字用户自定义
mysql/* mycat:createDataSource{ name:slave1,url:jdbc:mysql://192.168.10.102:3306/?useSSLfalsecharacterEncodingUTF-8useJDBCCompliantTimezoneShifttrue,instanceType:READ,user:mycat,password:pwd123} */;##name后面名字用户自定义
mysql/* mycat:createDataSource{ name:slave2,url:jdbc:mysql://192.168.10.103:3306/?useSSLfalsecharacterEncodingUTF-8useJDBCCompliantTimezoneShifttrue,instanceType:READ,user:mycat,password:pwd123} */;##创建Mycat集群
mysql/*! mycat:createCluster{name:cls01,masters:[master],replicas:[slave1,slave2]} */;masters:[master] ##名字是在增加主库进行创建的
replicas:[slave1,slave2]} */; ##增加从库进行创建的
进行验证
##在105客户端进行查看
mysql create database a123;
Query OK, 0 rows affected (0.04 sec)mysql show databases;
--------------------
| Database |
--------------------
| a123 ##在主从服务器分别查看
mysql show databases;
--------------------
| Database |
--------------------
| a123 ##在主服务器进行创建数据库
mysql create database aaa456;
Query OK, 1 row affected (0.01 sec)##在105客户端登陆查看
mysql show databases;
--------------------
| Database |
--------------------
| aaa456