html5网站演示,php做购物网站详情页的代码,北京公司注册最新政策,宁波市住房和城乡建设厅网站主从复制
主从复制的含义
主从复制#xff1a;在一个mysql的集群当中#xff0c;至少3台#xff0c;即主1台#xff0c;从2台。
当有数据写入时#xff0c;主负责写入本库#xff0c;然后把数据同步到从服务器。
一定是在主服务器写入数据#xff0c;从服务器的写入…主从复制
主从复制的含义
主从复制在一个mysql的集群当中至少3台即主1台从2台。
当有数据写入时主负责写入本库然后把数据同步到从服务器。
一定是在主服务器写入数据从服务器的写入数据不会同步到集群。 主从复制的模式
1、异步复制mysql的默认复制方式主在执行完客户端提交的数据之后结果会立即返回给客
户端主库不关心数据是否被从库接受和处理的。主库如果崩溃主库的未提交数据可能不能同步
到从库可能导致数据的不完整可以使用MHA进行故障切换。
2、全同步复制主库执行完客户端提交的数据从库也处理完了该数据才会提交给客户端。需
要等到所有的库都完成写入才能进行下一步操作。
3、半同步复制介乎于全同步模式和异步模式之间主库接受到写入操作会等待至少一个从库
完成了写入之后才能返回给客户端。 主从复制当中的延迟问题
1、网络延迟数据库尽量部署在同一地域的同一数据中心之间的相同的内网局域网。
2、硬件原因磁盘的I/O性能CPU的核心数加大内存。尽量使用物理主机来部署数据库。
3、架构方面我在配置好主从模式之后尽量的保证所有的写入都是从主库完成。
4、mysql的配置mysql的双一设置配置/etc/my.cnf 1、innodb_flush_log_at_trx_commit1
1每次提交事务时都会刷新事务的日志确保事务的持久性提高了数据的安全性但会降低了性能。0事务提交时不刷新日志而是每秒进行一次刷新性能提高了安全相对低。2事务提交时事物的日志写入操作系统的内存不进行物理刷新不保存到硬盘。 2、sync_binlog1
1每次提交事务时二进制日志都会刷新到磁盘确保日志的持久性。0每次提交事务时二进制日志写入操作系统的内存不进行物理刷新。N每提交N次事务就进行刷新。 补充 1、log-slave-updates0
不将从库的更新写入二进制日志避免在主从复制陷入死循环。 2、innodb_buffer_pool_size
存储引擎的缓冲池的大小增大空间可以提高整个数据库的性能。这个空间时占用内存的大小的设置是内存的一半、或者3分之一。 主从复制实验
我们建立一个主从复制架构如下
主mysql1192.168.254.31
从1mysql2192.168.254.32
从2mysql3192.168.254.33
nginx1amoba jdk1.6
nginx2客户端 1、配置主服务器的配置文件vim /etc/my.cnf添加如下内容并重启mysql服务 log-binmaster-bin #开启二进制日志log-slave-updatestrue #让从库可以从主库当中获取二进制日志的更新写入到自己的日 志当中 2、配置两台从服务器的配置文件vim /etc/my.cnf添加如下内容并重启mysql服务 主从服务器之间的server-id不能重复relay-logrelay-log-bin #指定了从服务器上中继日志的文件relay-log-indexslave-relay-bin.index #中继日志索引文件的名称relay_log_recovery 1 #指定了从服务器在启动时是否执行中继日志的恢 复操作保持数据的一致。 3、在主服务器上创建用户用于主从之间通信 CREATE USER myslave192.168.254.% IDENTIFIED WITH mysql_native_password BY 123456; #创建用户GRANT REPLICATION SLAVE ON *.* TO myslave192.168.254.% ; #赋权FLUSH PRIVILEGES; #刷新权限 4、获取主服务器二进制文件名和位置 5、开启从服务器同步建立与主服务器的同步关系
CHANGE master to master_host192.168.254.31,master_usermyslave,master_passwoword123456,master_log_filemaster-bin.000001,master_log_pos857;
注意从服务器同步到主服务器的二进制日志文件和位置要一致 6、开启slave并查看同步状态 Slave_IQ_RunningYES #和主库之间的读写的通信Slave_SQL_RunningYES #从库之间的sql进程
Slave_SQL_Running是no的原因
网络不通防火墙my.cnf的配置文件有问题文件名不对位置不对
解决步骤
stop slave;reset slave;重新获取主服务器二进制文件名和位置并开启从服务器同步start slave;show slave status\G; 7、终端测试是否同步
在主服务器的mysql终端创建库和表检查是否在2台从服务器上同步 主从复制的工作过程
1、master节点开启二进制日志master上的数据发生改变时数据会写入二进制日志。
2、从节点会在一定时间的间隔内对主库的二进制日志进行探测是否发生变化有变化开启一个I/O的线程请求主库二进制日志的时间。
3、主库为每一个从库的I/O线程开启一个dump线程用来向从库发生二进制日志的时间从库保存到之间的中继日志从库再启动sql的线程读取中继日志中的二进制日志保存到本地。然后获取内容写入到自己的库中。 读写分离
读写分离是建立在主从复制的基础之上
读写分离的方法
1、mysql-proxy
2、atlas360内部自己研发的工具基于AMOEBA不对外公开的
3、Amoeba 读写分离实验
读写分离实验建立在主从复制的基础之上根据上面主从复制的实验我们继续先在服务端
nginx1准备Amoeba源码包和相关的java版本文件因为我们的Amoeba-2.2.0版本需要
java1.6.0_14的版本。 1、准备Amoeba源码包和相关的jdk.bin文件 将jdk文件复制到/usr/local/目录下赋予他777权限并 ./jdk-6u14-linux-x64.bin 执行他执行完之后会自动生成文件 jdk1.6.0_14。 jdk1.6.0_14修改名字成jdk1.6因为我们打算在配置全局变量文件里定死了他的路径如下图。 2、配置关于jdk全局变量vim /etc/profile添加如下几行内容 保存退出后 source /etc/profile使之立刻生效
生效之后查看下java版本是不是1.6.0_14的版本 3、解压并安装amoeba
首先我们在/usr/local/目录下创建目录amoeba也是因为我们在全局配置文件里提前声明了路径。
然后我们直接解压amoeba源码包到/usr/local/amoeba/里如下 解压完之后给amoeba目录赋权755chmod -R 755 /usr/local/amoeba/
直接执行文件/usr/local/amoeba/bin/amoeba显示start | stop表示我们读写分离的软件安装成功了 4、登录主从mysql三台服务器都创建一个用户amoeba用来远程连接amoeba 5、在服务端nginx1修改amoeba主配置文件 先修改主配置文件amoeba.xml具体修改如下 #设定用户 #设定默认库和读写库 6、修改amoeba的数据库配置文件dbServers.xml具体修改如下 #注释掉test库默认是使用test库测试由于我们没做test库所以注释掉就行 #设定用户 #设定主库和从库服务器名和IP地址 7、启动amoeba并查看断开起没起 8、回到三台主从服务器都要修改MySQL主配置添加如下 #打开MySQL服务器活动的日志记录
然后重启mysqld服务并打开mysql_general.log日志这时候三台主从服务器显示已经连上我们
nginx1的amoeba 9、在客户端nginx2上验证
先安装个amoeba的apt版验证即可apt -y install mariadb-server
启动systemctl restart mariadb.service
限制我们可以通过nginx1的amoeba访问mysql 这时候我们在客户端nginx2上操作数据库读取数据都会在两台从服务器上轮询读取写入会在主
服务器上进行然后自动主从复制到两台从服务器上。