安装环境:系统是 centos6.5
第一 安装java(建议不要使用云安装 )
第二 安装mysql
1、下载
下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads
下载版本:我这里选择的5.6.33,通用版,linux下64位
也可以直接复制64位的下载地址,通过命令下载:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
2、解压
1
2
3
4
|
#解压
tar
-zxvf mysql-5.6.33-linux-glibc2.5-x86_64.
tar
.gz
#复制解压后的mysql目录
cp
-r mysql-5.6.33-linux-glibc2.5-x86_64
/usr/local/mysql
|
3、添加用户组和用户
1
2
3
4
|
#添加用户组
groupadd mysql
#添加用户mysql 到用户组mysql
useradd
-g mysql mysql
|
4、安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
cd
/usr/local/mysql/
mkdir
.
/data/mysql
chown
-R mysql:mysql ./
.
/scripts/mysql_install_db
--user=mysql --datadir=
/usr/local/mysql/data/mysql
cp
support-files
/mysql
.server
/etc/init
.d
/mysqld
chmod
755
/etc/init
.d
/mysqld
cp
support-files
/my-default
.cnf
/etc/my
.cnf
#修改启动脚本
vi
/etc/init
.d
/mysqld
#修改项:
basedir=
/usr/local/mysql/
datadir=
/usr/local/mysql/data/mysql
#启动服务
service mysqld start
#测试连接
.
/mysql/bin/mysql
-uroot
#加入环境变量,编辑 /etc/profile,这样可以在任何地方用mysql命令了
export
PATH=$PATH:
/usr/local/mysql/bin
#环境变量立即生效
source
/etc/profile
#启动mysql
service mysqld start
#关闭mysql
service mysqld stop
#查看运行状态
service mysqld status
|
5、错误
5.1 sqlyog连接时,第一步记得关闭防火墙,报1130错误,是由于没有给远程连接的用户权限问题
解决1:更改 ‘mysql’数据库‘user’表‘host’项,从‘localhost’改成‘%’。
use mysql; select 'host' from user where user='root'; update user set host = '%' where user ='root'; flush privileges;
解决2:直接授权
GRANT ALL PRIVILEGES ON *.* TO ‘root’@'%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;
5.2 安装时的一些错误
-bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: 没有那个文件或目录
解决: yum -y install perl perl-devel
Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决:yum -y install libaio-devel
6、其他
6.1 配置环境变量
vi + /etc/profile
export PATH=....:/usr/local/mysql/bin
第三步 mycat安装
- 下载mycat【http://www.mycat.org.cn/】 mycat 对jdk 是有版本要求的 。安装前注意查阅资料,我这里是 mycat1.6 jdk1.8
- 解压
tar -zxvf Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz
- 把mycat文件夹移动到 /usr/local/ 下
mv Mycat-server-1.6-RELEASE-20161012170031-linux /usr/local/mycat
-
新建用户和组
- 1
- 2
- 3
- 1
- 2
- 3
-
修改配置文件 /usr/local/mycat/conf/schema.xml
这里配置mysql的地址、用户名和密码
- 1
- 2
- 3
- 1
- 2
- 3
server.xml
这里配置mycat的用户名密码
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
-
启动mycat /usr/local/mycat/bin/mycat start
-
连接mycat mysql -uroot -pdigdeep -h127.0.0.1 -P8066 -DTESTDB
注意这里 -h 后面必须是ip,使用localhost会出错
-
创建测试数据
- 1
- 2
- 3
- 1
- 2
- 3
- 结果:查看mysql上的数据库db1,db2,db3上都创建了表company
tar -zxvf Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz
mv Mycat-server-1.6-RELEASE-20161012170031-linux /usr/local/mycat
新建用户和组
- 1
- 2
- 3
- 1
- 2
- 3
修改配置文件 /usr/local/mycat/conf/schema.xml
这里配置mysql的地址、用户名和密码
- 1
- 2
- 3
- 1
- 2
- 3
server.xml
这里配置mycat的用户名密码
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
启动mycat /usr/local/mycat/bin/mycat start
连接mycat mysql -uroot -pdigdeep -h127.0.0.1 -P8066 -DTESTDB
注意这里 -h 后面必须是ip,使用localhost会出错
创建测试数据
mysql主从服务器配置
-
修改主mysql配置文件my.cnf
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
-
启动主mysql,在主mysql创建一个用户让从mysql连接,执行sql
主mysql:node1
从mysql:node2- 1
- 1
-
修改从mysql配置文件my.cnf
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
-
主mysql执行sql
show master status;\G
-
从mysql连接主mysql
根据第2步配创建的user,password 和 第4步获取的file,position 连接主mysql- 1
- 2
- 3
- 1
- 2
- 3
- 开启从mysql,从mysql中执行
start slave;
-
查看从mysql状态,从mysql执行
show slave status\G;
红色下划线部分为yes则开启成功 -
测试成果
首先在主从mysql上都新建数据库testdb
主mysql:use testdb;create table user(id int not null primary key,name varchar(50));
从mysql上也会产生user表,主从mysql配置成功!
mycat读写分离配置
-
注意事项
-
远程 mysql 必须允许 mycat主机 远程连接,修改mysql.user表中的用户数据,执行sql
- 1
- 1
-
-
schema.xml配置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
dbDriver 属性
指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。
从 1.6 版本开始支持 postgresql 的 native 原始协议。
如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到 MYCAT\lib 目录下,并检查驱动 JAR 包中包括如下目录结构的文件:META-INF\services\Java.sql.Driver。在这个文件内写上具体的 Driver 类名,例如:com.mysql.jdbc.Driver。balance 属性
负载均衡类型,目前的取值有 3 种:- balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
- balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
- balance=”2”,所有读操作都随机的在 writeHost、readhost 上分发。
- balance=”3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压
力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
writeType 属性
负载均衡类型,目前的取值有 3 种:- writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties . - writeType=”1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于 MySQL 主从同步的状态决定是否切换
心跳语句为 show slave status
-
根据主从延时切换技术
Mycat1.4开始支持 MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠,配置如下: MyCAT心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType=”2” 与slaveThreshold=”100”,此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制,Mycat心跳机制通过检测 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master 主从复制时延, 当Seconds_Behind_Master>slaveThreshold 时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是否为0,为0时则表示主从同步,可以安全切换,否则不会切换。 -
重启mycat,连接创建测试数据
- 1
- 2
- 3
- 1
- 2
- 3
-
结果:查看主从mysql上的db1,db2,db3上都创建了表company
-
如果你的mysql的复制模式为STATEMENT(可以在my.cnf中配置
binlog_format="STATEMENT"
),还可以这样测试。
mycat执行sql :- 1
- 2
- 1
- 2
可以看出,读取数据是从从mysql读出的