MYSQL集群搭建详解(3台机器)一主多从

# MYSQL集群搭建详解(3台机器)一主多从
2017/10/24 14:17:01 
## 1. 集群配置如下
<pre>
    主节点:192.168.11.129
    从节点1:192.168.11.130
    从节点2:192.168.11.131
</pre>

## 2. 主,从节点安装(192.168.5.14/15/16)
<pre>
见《mysql源码版本安装教程》 
</pre>

## 3. 配置主节点
<pre>
    vi my.cnf 添加以下内容
[mysqld]
server-id=1  #设置主服务器的ID(每台不一样)
innodb_flush_log_at_trx_commit=1  #自行百度
sync_binlog=1  #开启binlog日志同步功能
log-bin=mysql-bin-1  #binlog日志文件名
binlog-do-db=test  # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)
binlog-ignore-db=mysql #要忽略的数据库
</pre>
### 3.1 在主数据库里创建一个同步账号
    mysql> CREATE USER 'mycat'@'192.168.5.%' IDENTIFIED BY '123456';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'mycat'@'192.168.5.%';
### 3.2 查看 主节点状态
    配置完重启mysql之后
    shell> show master status;
![](https://i.imgur.com/QDtmTbT.png)
<pre>提示1:如果你不配置server-id或者配置值为0,那么主服务器将拒绝所有从服务器的连接。
提示2:在使用InnoDB的事务复制,为了尽可能持久和数据一致,你应该在my.cnf里配置<br>innodb_flush_log_at_trx_commit=1 和 sync_binlog=1;For the greatest possible<br> durability and consistency in a replication setup using InnoDB with transactions, you <br>should useinnodb_flush_log_at_trx_commit=1 and sync_binlog=1 in the master my.cnf file.
提示3:确保主服务器里的skip-networking选项未启用,如果网络被禁用,你的从服务器将不<br>能与主服务器通信并且复制失败。
</pre>
## 4. 从节点配置
<pre>
[mysqld]
server-id=2
#在master端不指定binlog-do-db,在slave端用replication-do-db来过滤
#replicate-do-db = test 
#replicate-ignore-db = mysql #忽略的库
#我看网上还有下面的配置
#relay-log=mysqld-relay-bin
log-bin=mysql-bin-2 #配置在这里可以作为其他机器的主节点
</pre>
    提示1:如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
    提示2:一般你不需要在从服务器上启用二进制日志,如果你在从服务器上启用二进制日志,那你可用它来做数据备份和崩溃恢复,或者做更复杂的事情(比如这个从服务器用来当作其它从服务器的主服务器)。
### 4.1 配置连接主服务器的信息
    配置前 重启mysql服务
    mysql> stop slave;
    mysql> CHANGE MASTER TO
        -> MASTER_HOST='192.168.5.16',
        -> master_port=3307,
        -> MASTER_USER='mycat',
        -> MASTER_PASSWORD='123456',
        -> MASTER_LOG_FILE='mysql-bin.000004',
        -> MASTER_LOG_POS=1704;
    mysql> start slave;
### 4.2 查看从服务器状态
    mysql> show slave status \G;
![](https://i.imgur.com/p2qVIYX.png)

## 5. 遇到问题
### 5.1  slave_io_running:no
    我出现的原因:(看日志) because master and slave have equal MySQL server UUIDs
    解决办法:/data/auto.cnf 文件里面的值在三台服务器都是一样的,改掉从服务器zuto.cnf文件名,重启从服务器mysql得到解决。
    其余可能看网上说法,基本都是一个套路。科科

## 6. 功能测试
<pre>
    自己在navcat上操作(建表,插入删除更新等等)
    停掉从服务器,继续操作,在启动从服务器看是否同步
</pre>

## 7. 部署 mycat
### 7.1 补充
<pre>
(1) MySQL主从复制配置中,如果涉及到函数或存储过程的同步复制,需要在/etc/my.cnf中的[mysqld]段中增加配置log_bin_trust_function_creators=true 或在客户端中设置 set global log_bin_trust_function_creators = 1;
(2) 如果要做读写分离下的主从切换,那么从节点也有可能会变为写节点,因此从节点就不能设置为只读 read_only=1 。
(3) Linux版本的MySQL,需要设置为MySQL大小写不敏感,否则可能会发生找不到表的问题。可在/etc/my.cnf的[mysqld]段中增加lower_case_table_names=1 。
</pre>

### 7.2 配置MyCat的schema.xml(用于设置MyCat的逻辑库、表、数据节点、dataHost等内容)
    <!-- 定义MyCat的逻辑库,逻辑库的概念与MySQL中的 database 概念相同 -->
    <schema name="masterTest" checkSQLschema="false" sqlMaxLimit="100" dataNode="master"></schema>     //注意:masterTest是数据库的名称,这个是mycat的的数据库名称

    <dataNode name="master" dataHost="masterDataHost" database="test" />           //database是数据库连接的数据库

    <dataHost name="masterDataHost" maxCon="1000" minCon="10" balance="1"
         writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
          <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.5.16:3306" user="root" password="123" >              //注意:这里是登录数据库的用户和密码,跟mycat没关系
        <readHost host="hostS1" url="192.168.5.14:3306" user="root" password="123" weight="1" />
        <readHost host="hostS2" url="192.168.5.15:3306" user="root" password="123" weight="1" />
    </writeHost>
    </dataHost>

### 7.3 配置MyCat的server.xml
<pre>
没有特殊要求,就只新加自定义账户密码,自带文件里面有格式。
这里是登录mycat的账号和密码
 <user name="root">
                <property name="password">root123</property>
                <property name="schemas">masterTest</property>

                <!-- 表级 DML 权限设置 -->
                <!--
                <privileges check="false">
                        <schema name="masterTest" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>
                 -->
</user>
</pre>

### 7.4 启动
    shell> mycat start
    shell> mycat conslole #这个debug模式用户初次安装启动,查看信息

    查看日志文件命令,解决主从同步失败的方式
    bin/mysqlbinlog --start-position=443 logs/mysql-bin-1.000011
    bin/mysqlbinlog  logs/mysql-bin-1.000011 > /home/noteapp/mysql/logs/test.log
  


CHANGE MASTER TO
         MASTER_HOST='192.168.11.129',
         master_port=3306,
         MASTER_USER='root',
         MASTER_PASSWORD='root123',
         MASTER_LOG_FILE='mysql-bin.000018',
         MASTER_LOG_POS=120;

Slave_IO_Running为no,两个原因(1)mysql-bin.xxx跟主的配不上
                                    进入mysql的数据库里面。
                                    stop slave
                                    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=120;    注意120就是分区数,查看主的status里面的那个数值。
                              (2)data文件夹下面的auto.cnf里面UUID与主的一样了,这里修改一下。
                              

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值