mysql主从复制与读写分离
在实际生产环境中,如果对myql数据库的读和写都在一台数据库上,无论是在安全性、高可用性还是高并发性等各个方面都是不能满足实际需求的。
主从复制:一台mysql主服务器带两台mysql从服务器做了数据复制,前端应用在进行写操作时,对主服务器进行操作,在进行服务器读操作时,对两台从服务器进行操作,这样就减轻了对主服务器的压力。
搭建mysql主从复制
准备三台安装mysql数据库的服务器(同一网段)。
建立时间同步环境,在主节点上搭建时间同步服务器,并写成计划任务,保证三台主机时间点相同。
安装NTP服务
[root@localhost ~]# yum install ntp -y
[root@localhost ~]# vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8 在配置文件中添加这两行
[root@localhost ~]# systemctl start ntpd 启动
[root@localhost ~]# systemctl enable ntpd 设置为开机启动
在总结点上进行时间同步:
[root@localhost ~]# yum install ntpdate
ntpdate 192.168.88.132 做成计划任务
先查看当前目录which ntpddate
crontab -e
*/5 * * * * /usr/sbin/ntpdate 192.168.88.132 注:时间服务器计划任务两台时间服务器都做。
在每台服务器上关闭防火墙
可以给MySQL设置密码
mysqladmin -u root password ‘pwd123’,后面mysql可以根据这个密码登录
配置主从复制
先启用二进制日志功能
打开它的主配置文件
[root@localhost ~]# vim /etc/my.cnf
server-id=11 每个主机的ID标识
log_bin=master-bin 开启二进制文件功能,一会产生的二进制文件名字为master
log-slave-update=ture 允许从端服务器进行更新
重新启动mysql
systemctl restart mysql
[root@localhost ~]# netstat -tunlp |grep mysqld 查看是否已经启动,端口号3306
tcp6 0 0 :::3306 ::? LISTEN 14421/mysqld
[root@localhost ~]# ls /usr/local/mysql/data/ 产生了二进制文件
auto.cnf ib_logfile1 master-bin.index xuexi
db_test localhost.localdomain.err mysql
ibdata1 localhost.localdomain.pid performance_schema
ib_logfile0 master-bin.000001 test
在mysql数据库中进行授权:
登录mysql mysql -u -root -p
grant replication slave on * . * to ‘myslave’@‘192.168.88.%’ identified by ‘123456’;
flush privileges;
查看一下当前的偏移量
show master status;
偏移量代表同步点
主服务器配置完成
在从端:
[root@localhost ~]# vim /etc/my.cnf
server_id = 33
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
第二个从端同样在配置文件中添加此内容
两台从端mysql服务器重新启动:
[root@localhost ~]# systemctl restart mysqld.service
注:在克隆主机中**
[root@localhost ~]# vim /usr/local/mysql/data/auto.cnf 里面的uuid内容是相同的,主从同步会不成功。
所以在克隆主机中,里面的uuid需要改变
全部修改完配置文件后,从端进入mysql服务器
change master to master_host=‘192.168.88.132’,master_user=‘myslave’,master_password=‘123456’,master_log_file=‘master-bin.000001’,master_log_pos=411;
start slave;开启服务 stop slave;关闭服务
show slave status\G 查看两个线程是否开启
主从复制配置完成,现在在主服务器创建库,在从服务器种可以查到。OK!
搭建mysql读写分离
首先另开起一台服务器,安装amoeba用于做mysql前端代理层,负载均衡内部数据库
chmod +x jdk-6ul4-linux-x64.bin
./jdk-6ui4-linux-x64.bin 编译,根据提示按enter键即可
mv jdk1.6.0_14/ /usr/local/jdk1.6 为后面操作方便修改文件名称
[root@localhost ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH= C L A S S P A T H : CLASSPATH: CLASSPATH:JAVA_HOME/lib: J A V A H O M E / j r e / l i b e x p o r t P A T H = JAVA_HOME/jre/lib export PATH= JAVAHOME/jre/libexportPATH=JAVA_HOME/lib: J A V A H O M E / j r e / b i n : JAVA_HOME/jre/bin: JAVAHOME/jre/bin:PATH: H O M E / b i n e x p o r t A M O E B A H O M E = / u s r / l o c a l / a m o e b a / e x p o r t P A T H = HOME/bin export AMOEBA_HOME=/usr/local/amoeba/ export PATH= HOME/binexportAMOEBAHOME=/usr/local/amoeba/exportPATH=PATH:$AMOEBA_HOME/bin
在配置文件中加入上述内容,为了让系统找jdk的时候先找1.6。
修改完启动文件 source /etc/profile
java -version
java环境已经配置完成
安装并配置Amoeba软件
mkdir /usr/local/amoeba
tar … -C /usr/local/amoeba
chmod -R 755 /usr/local/amoeba
/usr/local/amoeba/bin/amoeba
amoeba start | stop 现实此内容说明amoeba安装成功
配置amoeba读写分离,两个slave读负载均衡
master , slave1 , slave2 中开放权限给amoeba 访问
grant all on * . * to test@ ‘192.168.88.%’ identified by ‘123.com’ 在三台数据库中各执行一次。
配置amoeba.xml配置文件
cd /usr/local/amoeba
vim conf/amoeba.xml
编辑dbServers.xml配置文件
配置无误后,可以启动amoeba 软件其默认端口为tcp 8066。
bin/amoeba start&启动
netstat -tunlp |grep java查看java环境端口号
在client 主机上测试:yum install mysql -y 安装mysql
可以通过访问代理:mysql -u amoeba -p123456 -h 192.168.