文档章节

CentOS系统 Amoeba+MySql主从读写分离配置

architect刘源源
 architect刘源源
发布于 2018/12/20 15:27
字数 3777
阅读 24
收藏 2

一、安装mysql的三种方式

安装 Percona 分支版本的 MySQL。性能超越标准的 MySQL。

上传解压
首先安装 cmake
yum –y install cmake //也需要安装 gcc-c++,openssl openssl-devel。
前面已经安装。
cd /usr/local/src/
mkdir mysql
cd mysql /
rz 上传安装包
tar -xvf Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar
rpm -ivh Percona-Server-56-debuginfo-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-shared-56-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-client-56-5.6.24-rel72.2.el6.x86_64.rpm
rpm –ivh Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm
安装顺序:rpm 包很多,只需安装 debuginfo 、shared、client、server

安装目录
配置文件路径 /etc/my.cnf
注意:安装完成后,会将配置文件放在 etc 目录下
vi /etc/my.cnf
数据文件路径:/var/lib/mysql
5.3.3 启动服务
service mysql start //自动安装到它自己制定的目录下,注册服务为 mysql
service mysql status
service mysql stop
配置开机启动:
chkconfig --list //展现开机的服务
5.3.4 修改 root 密码
默认没有密码不安全:
mysqladmin –u root password "root"
Warning 警告提示,忽略即可。
登录:
mysql –uroot –proot
已经有密码进行修改
mysql> use mysql;
mysql> update user set password=PASSWORD('root') where user='root';
mysql> flush privileges;
5.3.5 验证是否成功安装
use mysql //打开 mysql 数据库
show tables //查看 mysql 数据库下的表
注意:Percona 安装和 mysql 正式版的安装,在依赖上有区别。
5.3.6 打开 3306 端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save #修改生效
/etc/init.d/iptables status #查看配置
5.3.7 执行数据库的脚本
创建库和数据库表及数据
mysql>use jtdb;
mysql>set names utf8; #防止乱码
mysql>source jtdb.sql;
5.3.8 拓展:如何快速导入大数据库备份文件
导入 sql 文件非常慢的问题
查看目标数据库的参数
#客户端/服务器之间通信的缓冲区的最大大小
show variables like 'max_allowed_packet';
#TCP/IP 和套接字通信缓冲区大小,创建长度达 net_buffer_length 行
show variables like 'net_buffer_length';
导出 sql 文件时指定参数
mysqldump -uroot -p 数 据 库 名 -e --max_allowed_packet=4194304
--net_buffer_length=16384 > sql 文件路径
导入 sql 文件
use 目标数据库
source /usr/local/src/lotteryanalysis.sql
5.3.9 查看有多少表,每张表有多少记录
mysql 5.6 中的 information schema,就是存储了很多数据库的元数据,其实很多可
以用来做数据库的性能查询用。
USE information_schema;
SELECT table_name,table_rows FROM TABLES
WHERE TABLE_SCHEMA = 'jtdb'
ORDER BY table_rows DESC;
注意: 1 mysql 内部原因,统计不准确
5.3.10 开启 MYSQL 远程访问权限
语法:
grant [权限] on [数据库名].[表名] to ['用户名']@['web 服务器的 ip 地址']
identified by ['密码'];
grant all on *.* to 'root'@'%' identified by 'root';
或者指定 IP 地址
grant all on *.* to 'root'@'192.168.1.103' identified by 'root';
1
5.3.11 安装第二台 MYSQL 服务器
上 传 Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar 到
/usr/local/src/mysql 解压后形成 7 个 rpm 包。
复制第一台的虚拟机,按上面配置后,开放端口,配置远程访问权限。
4 5.4 常见问题
5.4.1 PID file could not be found
mysql 无法启动 ERROR! MySQL is running but PID file could not be found ?
Can't connect to local MySQL server through socket
'/var/lib/mysql/mysql.sock'
解决办法:
ps aux | grep mysql
kill -9 pid1 pid2 #pid1,pid2 为具体的查询出来的端口
service mysql start 或者 /etc/init.d/mysql start
5.4.2 提示 uuid 重复
由于 data 拷贝是全目录拷贝,将/var/lib/mysql/auto.cnf 也拷贝,它里面记录了
对数据库的一个 uuid 标识,随便产生个新的 uuid,替换掉新目录中的 auto.cnf 中的 uuid
串即可。
可以用 select uuid()来产生新值,手工黏贴到 auto.cnf 文件中。
5.4.3 The server quit without updating PID file
Starting MySQL...The server quit without updating PID file
(/usr/local/mysql/data/snsgou.pid)
问题可能的原因有多种,具体什么原因最好的办法是先查看下错误日志:
1、可能是/usr/local/mysql/data/mysql.pid 文件没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755
/usr/local/mysql/data” 然后重新启动 mysqld!
2、可能进程里已经存在 mysql 进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有 mysqld 进程,如果有使用“kill
-9 进程号”杀死,然后重新启动 mysqld!
3、可能是第二次在机器上安装 mysql,有残余数据影响了服务的启动。
解决方法:去 mysql 的数据目录/data 看看,如果存在 mysql-bin.index,就赶快把
它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的 !
4、mysql 在启动时没有指定配置文件时会使用/etc/my.cnf 配置文件,请打开这个文
件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
5、skip-federated 字段问题
解决方法:检查一下/etc/my.cnf 文件中有没有没被注释掉的 skip-federated 字段,
如果有就立即注释掉吧。
6、错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予 mysql 所有者及权限
7、selinux 惹的祸,如果是 centos 系统,默认会开启 selinux
解决方法:关闭它,打开/etc/selinux/config,把 SELINUX=enforcing 改为
SELINUX=disabled 后存盘退出重启机器试试。
5 5.5 主从复制 x Linux 版本
5.5.1 配置主服务器
编辑主 master 服务器配置文件/etc/my.cnf
在[mysqld]节点下加入两句话
server-id=1
log-bin=mysql-bin #启用二进制日志;
重启服务:service mysql restart
登录 mysql:mysql –uroot -proot
mysql>flush tables with read lock; #数据库锁表,不让写数据
mysql>show master status; #查看 MASTER 状态(这两个值 File 和 Position)
mysql>unlock tables; #从启动好后,记得要解除锁定
5.5.2 配置从服务器
修改/etc/my.cnf 增加一行
server-id=2
重启服务
service mysql restart
通过 mysql 命令配置同步日志的指向:
change master to master_host='192.168.170.43', master_port=3306,
master_user='root',master_password='root',
master_log_file='mysql-bin.000007',
master_log_pos=609;
master_host 主服务器的 IP 地址
master_port 主服务器的 PORT 端口
master_log_file 和主服务器 show master status 中的 File 字段值相同
master_log_pos 和主服务器 show master status 中的 Position 字段值相同
5.5.3 启动从服务
start slave; #stop slave;停止服务,出错时先停止,再重新配置
show slave status\G; #查看 SLAVE 状态,\G 结果纵向显示。必须大写
service mysql restart #重启服务
注意:如果出错,可以看后面的错误信息。观察 Slave_SQL_Running_State 字段,
它会记录详细的错误信息。如果正常,上面两个线程执行都应该是 YES。这样当主库创建数
据库、创建表、插入数据时,从库都会立刻同步,这样就实现了主从复制。
5.5.4 扩展:同步日志
binlog 基本定义:二进制日志,记录对数据发生或潜在发生更改的 SQL 语句,并以二
进制的形式保存到磁盘中。
作用:可以用来查看数据库的变更历史(具体的时间点所有的 SQL 操作)、数据库增量
备份和恢复(增量备份和局域时间点的恢复)、MySQL 的复制(主主数据库的复制、主从数
据库的复制)
二进制日志的信息:
1)文件位置:默认存放位置为数据库文件所在目录下 /var/lib/mysql
2)文件的命名方式:名称为 hostname-bin.xxxxx (重启 mysql 一次将会自动生成
一个新的 binlog)
3)状态的查看
mysql> show variables like '%log_bin%';
保存日志的格式是二进制不能直接查看,必须借助命令行工具才能阅读。mysql 自带了
mysqlbinlog 工具,一般放置在 mysql 安装目录下的 bin 目录下执行
mysqlbinlog mysql-bin.000001
后面那个参数是日志文件,日志文件一般放在 mysql 的数据库存储文件目录下,以配
置文件 log-bin 的值为文件名,一串 000001 这样的数字为扩展名。
拓展:从库只读主从复制还可以进行吗?
6 5.6 一主两从
5.6.1 一主多从
这种方案好处是对主的影响最小,但缺点是越往后的同步的时间越久。
注意:这两种方式的同步都会有时间差,在非常大的并发下,同步的时间差就会暴漏出
来,导致可能查询的数据读到脏数据。
所以最终解决方案应该是分布式。
5.6.2 主从从链条
这种结构不行。第二个从配置为第一个从的子节点。目的是,主修改数据,从 1 数据随
主修改,从 2 数据随从 1 修改。但实际中是实现不了的。现象为主修改,从 1 修改,从 2
不变。从 1 修改,从 2 才修改。
5.6.3 分布式数据库系统的优点
降低费用。分布式数据库在地理上可以式分布的。其系统的结构符合这种分布的要求。
允许用户在自己的本地录用、查询、维护等操作,实行局部控制,降低通信代价,避免集中
式需要更高要求的硬件设备。而且分布式数据库在单台机器上面数据量较少,其响应速度明
显提升。
提高系统整体可用性。避免了因为单台数据库的故障而造成全部瘫痪的后果。
易于扩展处理能力和系统规模。分布式数据库系统的结构可以很容易地扩展系统,在分
布式数据库中增加一个新的节点,不影响现有系统的正常运行。这种方式比扩大集中式系统
要灵活经济。在集中式系统中扩大系统和系统升级,由于有硬件不兼容和软件改变困难等缺
点,升级的代价常常是昂贵和不可行的。
微信开源 PhxSQL
PhxSQL 是一个兼容 MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL 以
单 Master 多 Slave 方式部署,在集群内超过一半机器存活的情况下,可自身实现自动
Master 切换,且保证数据一致性。PhxSQL 基于 Percona 5.6 开发。Percona 是 MySQL
的一个分支,功能和实现与 MySQL 基本一致。
5.6.4 配置步骤
1) 主从复制时,只需把从 slave01 复制一下即可,变成从 slave02。无需修改
server-id,无需修改 auto.cnf。
2) 修改配置文件
a)dbServer.xml
增加一个 dbServer 节点:
<dbServer name="slave02" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.19.41</property>
</factoryConfig>
</dbServer>
修改 multiPool 配置
<dbServer name="multiPool" virtual="true">
<poolConfig
class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED ,
3=HA-->
<property name="loadbalance">1</property>
<!-- Separated by commas,such as: server1,server2,server1
-->
<property
name="poolNames">slave02,slave01,master</property>
</poolConfig>
</dbServer>
注意:如果让 master 也负责读,就配置;如果 master 只负责写就从这里删除。
b)amoeba.xml
如果只是一个从就直接写从的名称也可以
<property name="readPool">slave01</property>
如果要配置多个从,就必须写 multiPool。引用 dbServer.xml 中配置的这个节点名

<property name="readPool">multiPool</property>

1、rpm安装
2、源码安装
3、通用二进制源码安装

环境准备

192.168.5.10    master1

192.158.5.20    slave1

二、配置master服务器,192.168.5.10
1、
第一步:登陆mysql,给root账号添加密码                //参考命令:SETPASSWORD = PASSWORD('pasword');
第二步:查看mysql版本号                     //参考命令:select version();
第三步:添加Slave到本机同步的远程账号               //参考命令:GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.5.10' IDENTIFIED BY 'SLAVE';
第四部:查看当前mysql的所有用户                 //参考命令:select user,host,password from mysql.user;
第五步:删除账号密码都为空的localhost账号             //参考命令:drop user ''@'localhost';
第六部:删除账号密码都为空的iz25ogxahfrz账号         //参考命令:drop user ''@'iz25ogxahfrz';
第七步:退出mysql                           //参考命令:\q

2、编辑my.cnf配置文件                                                       //参考命令:vim my.cnf

3、
第一步:重启mysql服务                                                        //参考命令:service mysql restart
第二步:以root用户+密码登陆mysql                                      //参考命令:mysql -uroot -ppassword
第三步:查看master的ID号                                                  //参考命令:SHOW VARIABLES LIKE 'service_id';
第四部:查看当前master的File+pos信息,并记录下来             //参考命令:show master status;

三、配置Slave服务器,192.168.5.20
1、
第一步:登陆mysql,给root账号添加密码                                  //参考命令:SETPASSWORD = PASSWORD('pasword');
第二步:查看mysql版本号                                                       //参考命令:select version();
第三步:查看当前mysql的所有用户                                           //参考命令:select user,host,password from mysql.user;
第四步:删除账号密码都为空的localhost账号                             //参考命令:drop user ''@'localhost';
第五部:删除账号密码都为空的iz25i0yer0yz账号                       //参考命令:drop user ''@'iz25i0yer0yz';
第六步:退出mysql                                                               //参考命令:\q

2、编辑slave服务器my.cnf配置文件                                      //参考命令:vim my.cnf

3、
第一步:重启mysql服务                                                       //参考命令:service mysql restart
第二步:查看slave服务器的ID号               //参考命令:SHOW VARIABLES LIKE 'service_id';
第三步:查看slave同步状态                 //参考命令:show slave status\G
第四部:关闭slave服务器,防止增删改查。          //参考命令:stop slave;
第五步:配置slave如何同步master的数据             //参考命令:change master to master_host='192.168.5.10', master_user='slave', master_password='slave', master_port=3306, master_log_file='master_bin.000001', master_log_pos=120;
第六部:打开slave服务器的各项功能             //参考命令:start slave;

4、查看slave的同步状态                   //参考命令:show slave status\G

mysql主从配置完毕

 

 四、安装Amoeba:依赖JAVA环境

JAVA安装
1、安装

2、给amoeba授权一个mysql远程账户
mysql> GRANT ALL PRIVILEGES ON *.* TO 'amoeba'@'192.168.5.30' IDENTIFIED BY 'amoeba' WITH GRANT OPTION;

五、安装Amoeba:


六、配置:
1、配置Amoeba下的dbServers.xml

2、配置Amoeba下的amoeba.xml

 

七、启动Amoeba:
1、【最好是先用当前方式启动,能够看到启动是否有错误,排查完错误后在后台启动】
网上查了一些资料:JDK7启动对xss参数有最小值要求,必须大于228才能启动JVM
解决:
设置 -Xss256k 即可解决

1 #JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
2 JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"

# vim /usr/local/amoeba/jvm.properties


2、再次启动:又报错误,请细看


3、上图所示:我没有用正常的关闭方式关闭Amoeba服务导致的错误
然后KILL进程之后竟然不抱错误了
所以这次长教训了
关闭Amoeba:
# /usr/local/amoeba/bin/shutdown
后台启动并把输出日志保存到/var/log/amoeba.log
# /usr/local/amoeba/bin/launcher > /var/log/amoeba.log 2>&1 &


八、登陆测试:
1、由于30机器上并没有安装mysql,所以找一台装有mysql的机器进行测试
mysql -uamoeba -p123456 -h192.168.0.251 -P8066 //指定端口的-P是大写的,不=同于其它。一定要注意大小写


2、登陆成功,请自由测试。
测试方法: (1)amoeba创建库然后分别登陆master、slave查看是否有刚创建的库
(2)stop master的mysql,再slave上创建库,不能则表示成功
(3)网上有更好的测试方法,不在一一列举。请自行查找。

© 著作权归作者所有

上一篇: jsp之${CTX}理解
下一篇: MiniUi tab页
architect刘源源

architect刘源源

粉丝 164
博文 518
码字总数 922877
作品 0
浦东
程序员
私信 提问
MMM+Amoeba搭建MySQL高可用负载均衡群集

MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。MySQL的读写分离就是只在主服务器上写,只在从服务器上读...

cchenyz
2018/07/22
0
0
MySQL高可用读写分离集群视频课程 MyCat教程

课程大纲: 第1节MySQL源码编译安装(CentOS-6.6+MySQL-5.6)38分钟 第2节MySQL主从复制的配置(CentOS-6.6+MySQL-5.6)58分钟 第3节MyCat在MySQL主从复制基础上实现读写分离-0130分钟 第4节M...

15543647553
2018/05/13
0
0
Centos6.8 搭建 Mysql 主从复制

实例环境:   MySQL-Master:Centos-6.8:192.168.153.130   MySQL-Slave:Centos-6.8:192.168.153.131 1、两台服务器安装mysql yum -y install mysql mysql-server 2、打开mysqld服务并设......

chinawxl
2017/12/16
0
0
MySQL的主从复制与读写分离技术实例(二)读写分离

系统版本:CentOS 6.5 MySQL版本:mysql-5.5.38 Amoeba版本:amoeba-mysql-binary-2.2.0 JDK版本:jdk-6u14-linux-x64.bin 案例拓扑图: 案例环境: 搭建MySQL的读写分离 一、搭建MySQL读写分...

睿睿学IT
2016/02/29
0
0
mysql-proxy 实现读写分离

mysql-proxy 实现读写分离 需要先配置主从同步:五个步骤完成MySQL主从复制 下载mysql-proxy 实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装 下载:https://downl...

运维的名义
2018/02/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用navicat连接mysql8.0出现1251异常提示

如标题所示,出现如下图场景: 解决方案: 使用管理员权限打开cmd执行以下命令: use mysql alter user 'root'@'localhost' modified with mysql_native_password by 'root' flush privileg......

貔貅叔
18分钟前
0
0
原子操作组合与线程安全

除了操作原子性之外,还有一个比较容易引起线程不安全的原因:安全方法组合。使用多个线程安全的方法组合成一个方法,也有可能导致线程不安全的情况出现。 以ConcurrentHashMap类为例,Concu...

八音弦
18分钟前
2
0
耦合的形式(对以往思路的纠正)

耦合的形式 不透明耦合(或者叫浑浊耦合) 部件A直接驱动部件C,C对A不透明 透明耦合 部件A驱动代理B,代理B驱动部件C,C对A透明 纠正 曾经我将耦合的形式区分为:不透明耦合,单边透明耦合,...

wanxiangming
19分钟前
1
0
bash:yum:command not found 解决办法

最近在学rhel7,不知道怎么回事,今天突然yum不能用了, 提示: bash:yum:command not found 在度娘搜了半天,真不好说啥了. 自己研究了半天 步骤如下 第一步: http://mirrors.163.com/cen...

寰宇01
21分钟前
1
0
弘康人寿基于 RocketMQ 构建微服务边界总线的实践

随着互联网+和平台化战略的兴起,各个行业的 IT 系统都在向互联网架构发展,涉及的主要技术包括微服务、消息和弹性计算等,采用微服务架构实现服务高内聚、低耦合,通过异步消息完成交易快速...

阿里云官方博客
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部