mysql安装

  1. 下载mysql【百度云

  2. tar -zxvf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz 解压

  3. 把mysql文件夹移动到 /usr/local/ 下mv mysql-5.6.32-linux-glibc2.5-x86_64 /usr/local/mysql

  4. 创建MySQL用户和组

groupadd mysql adduser -r -g mysql mysql chown -R mysql.mysql /usr/local/mysql  //修改mysql目录所属mysql用户

5、安装 /usr/local/mysql/scripts/mysql_install_db

6、修改配置文件my.cnf,必须要修改才能使用mycat 
最后一行添加

lower_case_table_names = 1 

7、设置mysql服务

cp -f /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

  1. 启动mysql service mysqld start

2、把mysql命令加入环境变量

修改/etc/profile文件,最后行添加export PATH=$PATH:/usr/local/mysql/bin

然后执行 source /etc/profile 使配置立即生效

登陆mysql如果提示错误 Can't connect to local MySQL server through socket '/tmp/mysql.sock' 

执行命令 ln /var/lib/mysql/mysql.sock /tmp/mysql.sock 后再登陆

root用户初始密码为空,修改密码使用mysqladmin命令

  mysqladmin -uroot -p password

  1. 登陆客户端 mysql -uroot -p

创建测试数据库

CREATE database db1;

CREATE database db2;

CREATE database db3; 

至此mysql已经安装完成了

安装java

linux下安装java

mycat安装

  1. 下载mycat【百度云

 2、解压 tar -zxvf Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz

3、把mycat文件夹移动到 /usr/local/ 下mv Mycat-server-1.6-RELEASE-20161012170031-linux /usr/local/mycat

新建用户和组

groupadd mycat adduser -r -g mycat mycat chown -R mycat.mycat /usr/local/mycat  //修改mycat目录所属mycat用户

修改配置文件 /usr/local/mycat/conf/schema.xml 

这里配置mysql的地址、用户名和密码

<writeHost host="hostM1" url="localhost:3306" user="root" password="root">    <readHost host="hostS1" url="localhost:3306" user="root" password="root" />

</writeHost>

server.xml 

这里配置mycat的用户名密码

<user name="root">   <property name="password">digdeep</property>   <property name="schemas">TESTDB</property> </user>

  1. 启动mycat /usr/local/mycat/bin/mycat start

  1. 连接mycat mysql -uroot -pdigdeep -h127.0.0.1 -P8066 -DTESTDB 
    注意这里 -h 后面必须是ip,使用localhost会出错

  1. 创建测试数据

use TESTDB;

create table company(id int not null primary key,name varchar(50),addr varchar(255));

insert into company values(1,"facebook","usa");

  1. 结果:查看mysql上的数据库db1,db2,db3上都创建了表company

mysql主从服务器配置

修改主mysql配置文件my.cnf

[mysqld]log_bin = mysql-bin  

#记录操作日志

binlog_ignore_db =  mysql  

#不同步mysql系统数据库

server_id = 1

启动主mysql,在主mysql创建一个用户让从mysql连接,执行sql 

主mysql:node1 
从mysql:node2

grant replication slave on *.* to 'user'@'node2' identified by 'password'

修改从mysql配置文件my.cnf

log_bin = mysql-bin  

#记录操作日志

replicate_ignore_db = mysql 

#不同步mysql系统数据库

slave_skip_errors = all 

server_id = 2

主mysql执行sql show master status;\G 

Linux下Mycat安装配置和使用_linux mysql

从mysql连接主mysql 
根据第2步配创建的user,password 和 第4步获取的file,position 连接主mysql

change master to master_host='node1',master_user='user',master_password='password',master_log_file='mysql-bin.000004',master_log_pos=120;

//如果是mysql5.6即以上可以不需要master_log_file和master_log_pos,mysql会自动识别

change master to master_host='node1',master_user='user',master_password='password';

  1. 开启从mysql,从mysql中执行 start slave;

查看从mysql状态,从mysql执行 show slave status\G;

Linux下Mycat安装配置和使用_linux mysql_02

红色下划线部分为yes则开启成功

  1. 测试成果 
    首先在主从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

update mysql.user set host = '%' where user = 'root'

schema.xml配置

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">    <heartbeat>show slave status</heartbeat>    <writeHost host="hostM1" url="node1:3306" user="root" password="root">        <readHost host="hostS1" url="node2:3306" user="root" password="root" />    </writeHost>

</dataHost>

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 种:

  1. balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。

  2. balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

  3. balance=”2”,所有读操作都随机的在 writeHost、readhost 上分发。

  4. balance=”3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压 
    力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType 属性 
负载均衡类型,目前的取值有 3 种:

  1. writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 
    writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

  2. writeType=”1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

switchType 属性

  • -1 表示不自动切换

  • 1 默认值,自动切换

  • 2 基于 MySQL 主从同步的状态决定是否切换 
    心跳语句为 show slave status

  1. 根据主从延时切换技术 
    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,连接创建测试数据

use TESTDB;

create table company(id int not null primary key,name varchar(50),addr varchar(255));

insert into company values(1,"facebook","usa");

  1. 结果:查看主从mysql上的db1,db2,db3上都创建了表company

如果你的mysql的复制模式为STATEMENT(可以在my.cnf中配置binlog_format="STATEMENT"),还可以这样测试。 
mycat执行sql :

insert into company values(1,@@hostname,"usa");

select * from company ;

Linux下Mycat安装配置和使用_linux mysql_03 
可以看出,读取数据是从从mysql读出的

本文出自http://blog.csdn.net/jaysonhu/article/details/52858535