2)在两台 Slave 上向 Master 同步时间
[root@Slave1 ~]# yum -y install ntpdate
[root@Slave1 ~]# /usr/sbin/ntpdate 192.168.1.1
2)主服务器配置
[root@Master ~]# vim /etc/my.cnf # 修改 MySQL 主配置文件
在 [mysqld] 下面添加:
server-id=1
log-bin=master-bin # 主服务器日志文件
log-slave-updates=true # 从服务器更新二进制文件
[root@Master ~]# /etc/init.d/mysqld restart # 重启 MySQL 数据库
- 注意:如果 MySQL 重启较慢,可以使用
kill
终止掉 MySQL 进程号,再启用。
登陆 MySQL 给从服务器权限
[root@Master ~]# mysql -u root -p123
mysql> grant replication slave on . to ‘myslave’@‘%’ identified by ‘123’;
mysql> flush privileges; # 刷新权限
mysql> show master status; # 查看 Master 状态
3)从服务器配置
两台从服务器操作稍有不同
[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 的数据库
MySQL [(none)]> create database zhangsan;
MySQL [(none)]> create table zhangsan.test (id int(10),name varchar(10),address varchar(20));
在从 MySQL 上查看结果:
[root@Slave1 ~]# mysql -u root -p123
mysql> use zhangsan
mysql> show tables;
- 分别关闭 Slave1,2 的复制功能。
mysql> stop slave;
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
漫长且无助。**
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-6Cj8O62e-1715621559005)]
[外链图片转存中…(img-d9iVhJjL-1715621559006)]
[外链图片转存中…(img-WOhaUjiF-1715621559007)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!