MySQL数据库——主从复制优化及读写分离

主从复制优化

主服务器配置优化

vim /etc/my.cnf

expire_logs_days=7		#设置二进制日志文件过期时间,默认值为0,表示logs不过期
max_binlog_size=500M    #设置二进制日志限制大小,如果超出给定值,日志就会发生滚动,默认值是1GB
skip_slave_start=1		#阻止从库崩溃后自动启动复制,崩溃后再自动复制可能会导致数据不一致的


#"双1设置",数据写入最安全
innodb_flush_logs_at_trx_commit=1		#redo log(事务日志)的刷盘策略,每次事务提交时MySQL都会把事务
                                         日志缓存区的数据写入日志文件中,并且刷新到磁盘中,该模式为系统默认
sync_binlog=1							#在进行每1次事务提交(写入二进制日志)以后,Mysql将执行一次fsync的磁盘同步指令,将缓冲区数据刷新到磁盘
---------------------------------------------------------------
#"双1设置"适合数据安全性要求非常高,而且磁盘IO写能力足够支持的业务,比如订单、交易、充值、支付消费系统。
"双1模式"下,当磁盘IO无法满足业务需求时,比如11.11活动的压力。推荐一下性能较快的设置,并使用带蓄电池后
备电源,防止系统断电异常。
innodb_flush_logs_at_trx_commit=2		#每次事务提交时MySQL都会把日志缓存区的数据写入日志文件中,但是并
                                          不会同时刷新到磁盘上。该模式下,MySQL会每秒执行一次刷新磁盘操作
sync_binlog=500							#在进行500次事务提交以后,Mysql将执行一次fsync的磁盘同步指令,将缓冲区
                                          数据刷新到磁盘
---------------------------------------------------------------

redo log(事务日志)的刷盘策略

innodb_flush_logs_at_trx_commit=0/1/2 分别代表

  • 0:每秒一次,把log buffer写入os buffer,并调用fsync刷到磁盘

  • 1:每次提交事务时,把log buffer写入os buffer,并调用fsync刷到磁盘

  • 2:每次提交事务时,只是写入到os buffer,然后每秒一次调用fsync将日志刷新到磁盘
    在这里插入图片描述

从服务器配置优化

vim /etc/my.cnf

innodb_buffer_pool_size=2048M   	#用于缓存数据和索引的内存大小,让更多数据读写内存中完成,减少磁盘
                                     操作,可设置为服务器总可用内存的 70-80%
                                     
sync_binlog=0						#MySQL不做任何强制性的磁盘刷新指令,而是依赖操作系统来刷新数据到磁盘

innodb_flush_log_at_trx_commit=2	#每次事务log buffer会写入log file,但一秒一次刷新到磁盘

log-slave-updates=0					#slave 从 master 复制的数据会写入二进制日志文件里,从库做为其他从库
                                     的主库时设置为 1
                                     
relay_log_recovery=1				#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有
                                     处理,则自动放弃所有未执行的 relay-log, 并且重新从 master 上获取日志,
                                     这样就保证了 relay-log 的完整性。默认情况下该功能是关闭的,将 
                                     relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。

搭建MySQL读写分离

  1. Amoeba服务器配置
##安装 Java 环境##
因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。
cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u14-linux-x64
./jdk-6u14-linux-x64.bin
//按yes,按enter

mv jdk1.6.0_14/ /usr/local/jdk1.6

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile
java -version

##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
//如显示amoeba start|stop说明安装成功

##配置 Amoeba读写分离,两个 Slave 读负载均衡##
#先在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问
grant all on *.* to test@'192.168.80.%' identified by '123.com';

#再回到amoeba服务器配置amoeba服务:
cd /usr/local/amoeba/conf/

cp amoeba.xml amoeba.xml.bak
vim amoeba.xml									#修改amoeba配置文件
--30行--
<property name="user">amoeba</property>
--32行-- 
<property name="password">123456</property>
--115行--
<property name="defaultPool">master</property>
--117-去掉注释-
<property name="writePool">master</property>
<property name="readPool">slaves</property>

cp dbServers.xml dbServers.xml.bak
vim dbServers.xml								#修改数据库配置文件
--23行--注释掉  作用:默认进入test库 以防mysql中没有test库时,会报错
<!-- <property name="schema">test</property> -->
--26--修改
<property name="user">test</property>
--28-30--去掉注释
<property name="password">123.com</property>
--45--修改,设置主服务器的名Master
<dbServer name="master"  parent="abstractServer">
--48--修改,设置主服务器的地址
<property name="ipAddress">192.168.80.10</property>
--52--修改,设置从服务器的名slave1
<dbServer name="slave1"  parent="abstractServer">
--55--修改,设置从服务器1的地址
<property name="ipAddress">192.168.80.11</property>
--58--复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.80.12</property>
--65行--修改
<dbServer name="slaves" virtual="true">
--71行--修改
<property name="poolNames">slave1,slave2</property>


/usr/local/amoeba/bin/amoeba start&					#启动Amoeba软件,按ctrl+c 返回
netstat -anpt | grep java							#查看8066端口是否开启,默认端口为TCP 8066

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_60917414/article/details/131397578