两台从服务器操作稍有不同
[root@Slave1 ~]# vim /etc/my.cnf
在 [mysqld] 下添加:
server-id=2 # Slave2 将 2 改为 3 即可
relay-log=relay-log-bin # 将主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index # 定义 relay-log 的位置和名称
[root@Slave1 ~]# /etc/init.d/mysqld restart # 重启 MySQL 服务
[root@Slave1 ~]# mysql -u root -p123
mysql> change master to
master_host=‘192.168.1.1’,
master_user=‘myslave’,
master_password=‘123’,
master_log_file=‘master-bin.000001’,
master_log_pos=400;
mysql> start slave; # 启用从服务器同步功能
mysql> show slave status\G; # 查看从服务器状态
易错点
当在主 MySQL 开启日志,并在从 MySQL 开启日志后,进行同步时;明明没有报错但还是同步失败
- 原因是从在向主同步时,File 的及 Position 的值给的不对。
解决方案:
- 先关闭 Slave,在重新向主服务器同步一下,将对的值写入即可。
4)验证数据库是否同步
- 在主 MySQL 创建库。
mysql> create database ceshi;
mysql> show databases;
2. 分别在两个从服务器进行查看,同步过来说明主从复制成功。
mysql> show databases;
==============================================================================
为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。
在开发工作中,有时候会遇见某个 SQL 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性查询,而从数据库处理 Select 查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从数据库。
目前较为常见的 MySQL 读写分离分为两种:
- 基于程序代码内部实现:
在代码中根据
select
insert
进行路由分类,这类方法也是目前生产环境应用最广泛的。优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支;缺点是需要开发人员来实现,运维人员无从下手。
- 基于中间代理层实现:
代理一般位于客户端和服务器之间,代理服务器接到客户端的请求后通过判断后转发到后端数据库,有两个代表性程序。
-
MySQL-Proxy:MySQL-Proxy 为 MySQL 开源项目,通过其自带的 lua 脚本进行 SQL 判断,虽然是 MySQL 官方产品,但是 MySQL 官方并不建议将 MySQL-Proxy 用到生产环境。
-
Amoeba(变形虫):由陈思儒开发,其曾就职于阿里巴巴。该程序用 Java 语言进行开发,阿里巴巴将其用于生产环境。它不支持事务和存储过程。
1)在 Amoeba 上部署 Java 环境
[root@Amoeba ~]# ls
amoeba-mysql-binary-2.2.0.tar.gz anaconda-ks.cfg jdk-6u14-linux-x64.bin
[root@Amoeba ~]# chmod +x jdk-6u14-linux-x64.bin # 添加可执行权限
[root@Amoeba ~]# ./jdk-6u14-linux-x64.bin
一直按空格. 等显示输入 yes 或 no 时输入-------- yes
[root@Amoeba ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6
[root@Amoeba ~]# cat <> /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:$JAVA_HOME/jre/lib
export PATH= J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JAVA_HOME/jre/bin/: P A T H : PATH: PATH:HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH= P A T H : PATH: PATH:AMOEBA_HOME/bin
END
[root@Amoeba ~]# source /etc/profile # 使其生效
[root@Amoeba ~]# java -version # 查看 Java 版本
2)编译安装 Amoeba 软件
[root@Amoeba ~]# mkdir /usr/local/amoeba #为 Amoeba 创建目录
[root@Amoeba ~]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@Amoeba ~]# chmod -R 755 /usr/local/amoeba/
[root@Amoeba ~]# /usr/local/amoeba/bin/amoeba
显示:amoeba start | stop 表示正确
3)配置 Amoeba 读写分离,两个 Slave 读负载均衡
- 数据授权给 Amoeba 读写权限,因为刚刚做了主从复制,所以直接在主 MySQL 做就行。
mysql> grant all on . to ‘zhangsan’@‘192.168.1.%’ identified by ‘123.com’;
mysql> show grants for ‘ly’@‘192.168.1.%’;
- 修改 Amoeba 配置文件。
[root@Amoeba ~]# vim /usr/local/amoeba/conf/amoeba.xml
- 编辑
dbServers.xml
配置文件。
[root@Amoeba ~]# vim /usr/local/amoeba/conf/dbServers.xml
- 启动 Amoeba 软件,端口为 8066。
[root@Amoeba ~]# /usr/local/amoeba/bin/amoeba start &
[root@Amoeba ~]# netstat -anpt | grep java
4)验证读写分离
- 验证主从复制。
在客户端上操作:
[root@Client ~]# yum -y install mysql # 直接使用 yum 安装 MySQL 就行
[root@Client ~]# mysql -u amoeba -p123456 -h 192.168.1.140 -P8066 # 远程登陆 amoeba 的数据库
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
术停滞不前!**
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-GZ7q9CrW-1710781309572)]
[外链图片转存中…(img-DruXWKYb-1710781309573)]
[外链图片转存中…(img-pM8kzg6P-1710781309573)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-qipedBhc-1710781309574)]