mysql主从复制,读写分离

主从复制

原理

在企业中,成熟的业务通常数据量比较大,单台mysql在安全性,搞可用性和搞并发方便抵押无法满足需求,所以要配置多台从数据库服务器以实现读写分离。
高可用:指的是冗余备份,性能指标(五大负载+内核优化方向)
安全性指标:网卡部分安全性,通讯加密,用户登录,管理权限安全性。
三种方式:
纵向扩展:强化自己服务器(五大负载,内核优化)+数据库的优化,索引,存储过程,select查询等
横向扩展:增加服务器数量
借助内存/缓存数据库:redis,来帮助mysql缓存一个高热数据,较少mysql压力
可以考虑是都需要做一些架构,服务上改动。

mysql主从复制原理
mysql的复制类型:
第一,基于语句的复制
第二,基于行的复制
第三;混合类型的复制
mysql主从复制使用的机制
全同步 ,半同步,异步(默认)
主从复制原理核心在于2个日志文件,3个线程
2个日志文件:二进制和中继
3个线程:maser上的dump线程 ,slave上的io线程和sql线程
目的:slave上的中继日志趋近实时同步master上的二进制
dump线程会监控二进制的更新,如果有更新会通知slave的io
slave上的io线程-----》master上申请同步二进制更新内容
dump线程会把同步的sql日志内容给与slave服务器,slave的io线程就会写入知己的中继日志
slave sql线程把日志中的更新语句同步执行到数据库内部,达到和master数据库趋近一致

主从复制实验

三台服务器,一台主,两台从服务器

第一步,安装那ntp做时间同步

在主服务器上
在这里插入图片描述
同步阿里云
[root@www ~]# yum -y install ntpdate ntp
[root@www ~]# ntpdate ntp.aliyun.com
从服务器时间同步到主服务器上,并且设置定时任务,每隔10分钟同步一次
关闭防火墙,核心防护
在这里插入图片描述
[root@www ~]# crontab -e
*/10 * * * * /usr/sbin/ntpdate 192.168.17.50

第二步,分别安装mysql

[root@localhost opt]# yum -y install gcc gcc-c++ make pcre-devel expat-devel perlncurses-devel autoconf cmake
useradd -s /sbin/nologin mysql
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake autoconf

tar xzvf mysql-5.6.26.tar.gz -C /opt
cd mysql-5.6.26

cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
-DSYSCONFIDIR=/etc
-DMYSQL_DATADIR=/home/mysql/
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock

make && make install

管理mysql

[root@localhost mysql-5.6.26]# chown -R mysql.mysql /usr/local/mysql
[root@localhost mysql-5.6.26]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@localhost mysql-5.6.26]# source /etc/profile
[root@localhost mysql-5.6.26]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.6.26]# chmod 755 /etc/init.d/mysqld       
[root@localhost mysql-5.6.26]# chkconfig --add /etc/init.d/mysqld
[root@localhost mysql-5.6.26]# chkconfig  mysqld --level 35 on
[root@localhost mysql-5.6.26]# cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y

cp support-files/my-default.cnf /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 35 on
systemctl enbale mysqld

初始化数据库

/usr/local/mysql/scripts/mysql_install_db
–user=mysql
–ldata=/var/lib/mysql
–basedir=/usr/local/mysql
–datadir=/home/mysql

vim /etc/init.d/mysqld

在这里插入图片描述

log_bin=master-bin
log_slave=updates=ture
server_id=11

[root@www mysql-5.6.26]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.26-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

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> grant replication slave on *.* to 'myslave'@'192.168.17.%' identified by '123456';
Query OK, 0 rows affected (0.00 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.000001 |      411 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

log-bin=mysql-bin
server_id=22
relay_log-index=slave-relay-bin.index

change master to master_host=‘192.168.17.50’,master_user=‘myslave’,master_password=‘123456’,master_log_file=‘master-bin.000001’,master_log_pos=411;

mysql> change master to master_host='192.168.17.50',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=411;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述
在这里插入图片描述
总结:
mysql主从服务器,
第一步:首先在三个服务器上安装mysql,并设置开机启动,管理等
第二步:设置时间同步ntp,关闭防火墙,核心防护等,主服务器从不到阿里云,从服务器同步到服务器。
第三步:配置主从同步。在主配置文件上配置log_bin=master-bin,log_slave=updates=truw
server_id=11
同时在mysql数据库中,授权给slave,并杀心权限
第四步:在从服务器上配置主配置文件
log-bin=mysql-bin
server_id=22
relay_log-index=slave-relay-bin.index
在数据库中change指定主服务器和名字,密码,bin文件,和pos点。然后开启start slave。

读写分离

原理

只在主服务器上写,在从服务器撒花姑娘读
在这里插入图片描述

搭建

第一步安装amoeba
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local
./jdk-6u14-linux-x64.bin
mv jdk1.6.0_14/ jdk1.6 ‘//重命名一下’
第二步,设置环境变量
vi /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 K = / 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_HOMEK=/usr/local/amoeba export PATH= HOME/binexportAMOEBAHOMEK=/usr/local/amoebaexportPATH=PATH:$AMOEBA_HOME/bin

source /etc/profile

第三步,安装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

第四步,配置读写分离,负载均衡
在三台服务器上授权

mysql> grant all on . to test@‘192.168.17.%’ identified by ‘123.com’;
Query OK, 0 rows affected, 1 warning (0.00 sec)
第五步,在amoeba服务器上修改amoeba.xml配置文件,修改读写分离

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

第六步,修改dbServers.xml文件

<property name="schema">mysql</property>	'//23行test修改为mysql'

'//设置amoeba访问mysql数据库的用户和密码'
<property name="user">test</property>	'//26行修改用户名'
    
<!--  mysql password-->	'//28行-30行取消注释'
<property name="password">123.com</property>	'//29行修改密码'

<dbServer name="master"  parent="abstractServer">	'//45行主mysql服务器名称修改为master'
 <property name="ipAddress">192.168.17.10</property>	'48行//修改主服务器IP'

<dbServer name="slave1"  parent="abstractServer">	'//52行修改从服务器名称'
<property name="ipAddress">192.168.17.30</property>	'//55行修改从服务器IP'
    '//第一个从服务器段后插入第二个从服务器配置'
<dbServer name="slave2"  parent="abstractServer">
        <factoryConfig>
                <!-- mysql ip -->
	    <propertyname="ipAddress">192.168.17.50</property>
      </factoryConfig>
</dbServer>
'//修改数据库从服务器池'
<dbServer name="slaves" virtual="true">	'//66行修改服务器吃名称为slaves'
<property name="poolNames">slave1,slave2</property>	'

第七步;启动amoeba
/usr/local/amoeba/bin/amoeba start &
查看启动情况
在这里插入图片描述
第八步,验证
在客户端192,168.17.40上安装mariadb
yum install mariadb -y
登录数据库,验证
在这里插入图片描述

总结

主从复制:
1,什么是主从复制,是什么作用,为什么要做主从复制
在生产环境中,业务量比较大,单台mysql在安全性,搞可用性等方便都无法满足需求,一但出了问题,会造成无法挽回的后果,所以需要设置主从同步,主从同时是通过二进制日志和中继日志,使得两天以上的服务器在数据上实现同步
2,主从复制的过程
首先是dump线程,进行监听master服务器额二进制日志,当二进制日志有变化的时候会通知io进行,slave服务器的io进程想master请求更新自己的中继日志,将二进制日志更新的内容复制到自己的中继日志中,然后再通过sql线程,将更新的中继日志内容同步执行到自己的数据库中。
3,如何做主从同步
第一步,同步时间,所有的集群都要做时间同步,关闭防火墙,三台服务器安装mysql
第二步;通过主配置文件my.cnf配置同步,在master上配置开启为二进制文件,开启日志同步么设置id号,在从服务器上开启二进制日志,设置id,用中继日志同步主的二进制日志,定义relay-log的位置。
第三步,在master上提权,基于slave权限,查看mater的状态,确定二进制日志文件名和pos点
第四步,在slave上change master,指定用户名和密码,还有file名,pos点的位置,指定到master上。查看slave的状态,是否配置成功

读写分离:
1,读写分离是什么
读写分离是把mysql数据库的读和写分开,在mater上写,在slave上读,从而减轻单台服务器的压力,提高查询的效率
2,什么时候用
当程序使用数据库比较多,更新少的时候,使用,分担数据库的压力,提高性能
3,如何配置
第一步,配置3台mysql服务器,在上面做主从同步,配置时间同步
第二步,在amoeba服务器撒花姑娘安装jdk,配置jdk的环境变量,他是Java的组件2
第三步,安装amoeba,在mysql服务器上开放权限给amoeba,提权
第四步,配置amoeba的配置文件,amoeba.xml,配置账号,密码,地址池,等信息
第五步,配置dbservers.xml文件,修改访问mysql的账户和密码,修改mater地址池,和slave地址池
最后启动amoeba
在客户端中下载mariadb,用amoeba的账户名和密码登录服务器,测试读写分离

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值