- 当业务的数据量比较大时,单台mysql数据库在安全性,高可用和高并发方面读无法满足实际的需要,配置多台从数据库服务器以实现读写分离
一、mysql主从复制
-
类型:
基于语句的复制
基于行的复制
混合类型的复制 -
复制过程
二、读写分离
- 原理
只在主服务器上写,只在从服务器上读取
主数据库处理事务性查询,从服务器处理select查询
三、实验
前期准备
服务器版本:CentOS7.6
主服务器master : 192.168.130.10
从服务器slave1 : 192.168.130.20
从服务器slave2 : 192.168.130.30
amoeba(做读写分离) : 192.168.130.40
客户端:192.168.130.50
全部关闭防火墙和核心防护功能
- 主从复制
1、每台服务器上安装mysql数据库5.7版本,修改主机名
2、mysql配置文件修改
主服务器
[root@master ~]# vim /etc/my.cnf
[mysqld] ##mysqld字段添加一下三行语句
......
server-id=11 ##服务器id号
log-bin=master-bin ##主服务器日志文件开启
log-slave-updates=true ##从服务器更新二进制日志
[root@master ~]# systemctl restart mysqld ##重启数据库
[root@master ~]# mysql -uroot -p123456 ##登录
......
mysql> grant replication slave on *.* to 'myslave'@'192.168.130.%' identified by '123456'; ##添加权限用户,做主从复制
Query OK, 0 rows affected, 1 warning (0.01 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 | 604 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
从服务器配置(两台id号不同,其他相同配置)
[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
......
server-id=22
relay-log=relay-log-bin ##从服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index ##定义relay-log 的位置和名称
[root@slave1 ~]# systemctl restart mysqld
[root@slave1 ~]# mysql -uroot -p123456
mysql> change master to master_host='192.168.130.10',master_user='myslave',master_password='123456',master_log_pos=604; ##pos是位置,基于此位置进行复制
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
- 验证:
- 读写分离试验
[root@localhost local]# cp jdk-6u14-linux-x64.bin /usr/local/
[root@localhost local]# chmod 755 jdk-6u14-linux-x64.bin
[root@localhost local]# ./jdk-6u14-linux-x64.bin
[root@localhost local]# mv jdk-6u14-linux-x64.bin jdk1.6
一直空格
yes
vim /etc/profie
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile
mkdir /usr/local/amoeba
tar zxf amoeba-mysql-binary-.... -C /usr/local/amoeba
chmod -R 755 /usr/local/amoeba
/usr/local/amoeba/bin/amoeba #查看安装是否成功
在三台mysql上添加权限开放给amoeba访问
amoeba服务器配置(修改两个配置文件)
[root@localhost local]# vim /usr/local/amoeba/conf/amoeba.xml
30 <property name="user">amoeba</property>
31
32 <property name="password">123456</property>
[root@localhost local]# vim /usr/local/amoeba/conf/dbServers.xml
23 <property name="schema">mysql</property>
##注意:此行把原来的test修改为mysql 只针对mysql5.7版本,5.6版本mysql安装完成后,
会自动创建一个test库,所以此处原来是test,因为5.7版本没有默认的test数据库,所有改为mysql
/usr/local/amoeba/bin/amoeba start& ##后台开启
netstat -anot | grep java
完成配置
接下来创建数据库和表进行测试完成即可