主从复制
原理
在企业中,成熟的业务通常数据量比较大,单台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的账户名和密码登录服务器,测试读写分离