linux下mysql mycat 安装部署 即MySQL 集群的企业级数据库

安装环境:系统是 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安装 
  1. 下载mycat【http://www.mycat.org.cn/】  mycat 对jdk 是有版本要求的 。安装前注意查阅资料,我这里是 mycat1.6  jdk1.8 
  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
  4. 新建用户和组

    groupadd mycat
    adduser -r -g mycat mycat
    chown -R mycat.mycat /usr/local/mycat  //修改mycat目录所属mycat用户
        
        
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
  5. 修改配置文件 /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>
        
        
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    server.xml 
    这里配置mycat的用户名密码

    <user name="root">
       <property name="password">digdeep</property>
       <property name="schemas">TESTDB</property>
    </user>
        
        
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4
  6. 启动mycat /usr/local/mycat/bin/mycat start

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

  8. 创建测试数据

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
  • 2
  • 3
  • 1
  • 2
  • 3
  1. 结果:查看mysql上的数据库db1,db2,db3上都创建了表company

mysql主从服务器配置

  1. 修改主mysql配置文件my.cnf

    [mysqld]
    log_bin = mysql-bin  #记录操作日志
    binlog_ignore_db =  mysql  #不同步mysql系统数据库
    server_id = 1
       
       
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4
  2. 启动主mysql,在主mysql创建一个用户让从mysql连接,执行sql 
    主mysql:node1 
    从mysql:node2

    grant replication slave on *.* to 'user'@'node2' identified by 'password'
       
       
    • 1
    • 1
  3. 修改从mysql配置文件my.cnf

    log_bin = mysql-bin  #记录操作日志
    replicate_ignore_db = mysql #不同步mysql系统数据库
    slave_skip_errors = all 
    server_id = 2
       
       
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4
  4. 主mysql执行sql show master status;\G 
    show master status

  5. 从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
    • 2
    • 3
    • 1
    • 2
    • 3
  6. 开启从mysql,从mysql中执行 start slave;
  7. 查看从mysql状态,从mysql执行 show slave status\G; 
    show slave status 
    红色下划线部分为yes则开启成功

  8. 测试成果 
    首先在主从mysql上都新建数据库testdb 
    主mysql:use testdb;create table user(id int not null primary key,name varchar(50)); 
    从mysql上也会产生user表,主从mysql配置成功!

mycat读写分离配置

  1. 注意事项

    • 远程 mysql 必须允许 mycat主机 远程连接,修改mysql.user表中的用户数据,执行sql

      update mysql.user set host = '%' where user = 'root'
           
           
      • 1
      • 1
  2. 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>
       
       
    • 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 种:

    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
  3. 根据主从延时切换技术 
    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时则表示主从同步,可以安全切换,否则不会切换。

  4. 重启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
    • 2
    • 3
    • 1
    • 2
    • 3
  5. 结果:查看主从mysql上的db1,db2,db3上都创建了表company

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

    insert into company values(1,@@hostname,"usa");`
    select * from company ;
       
       
    • 1
    • 2
    • 1
    • 2

    这里写图片描述 
    可以看出,读取数据是从从mysql读出的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值