Mysql集群搭建(主从复制、读写分离)

一、MySQL多实例

(一)、MySQL多实例介绍

1、什么是MySQL多实例

MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307,3308),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。

2、MySQL多实例的特点有以下几点

(1)、有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

(2)、节约服务器资源

(3)、资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降;

3、部署mysql多实例的两种方式

(1)、第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;

(2)、第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理;

4、同一开发环境下安装多个数据库,必须处理以下问题

(1)、配置文件安装路径不能相同

(2)、数据库目录不能相同

(3)、启动脚本不能同名

(4)、端口不能相同

(5)、socket文件的生成路径不能相同

(二)、主从复制原理

MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。

主机MySql 会将dmlMySql(create、update、delete、insert等,不包括查询sql) 语句写入到二进制日志文件中(binLog)。

从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog; SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

从节点中Sql线程的作用:就是IO线程从主机获取二进制执行文件之后,通过Sql线程进行执行二进制执行文件。sql线程依赖于IOx线程

主库与从库会建立长连接,如果产生网络延迟的情况下 会产生数据不同步的问题。

注意:Mysql主从复制是Mysql本身自带的功能。myCat做读写分离 和 Nginx 比较相似。

如果不小心数据被删除了,可以从binlog日志中恢复。

二、MySQL主从复制配置

主节点服务器 地址 192.168.1.105

从节点服务器 地址 192.168.1.107

(一)、主节点服务器配置

1.进入配置页面命令

   vi /etc/my.cnf

2.配置服务器id server_id

这里的server_id 尽量配置为服务器地址的后3位 以用来区分

  server_id=234

3.开启日志文件(binLog)

  log-bin=mysql-bin

配置文件的地址应该在 : # Recommended in standard MySQL setup,否则配置不起作用

如下图所示

 

4.重启mysql服务

service mysqld restart

验证是否已经配置成功:

5.show variables like '%server_id%';

能够查询对应配置文件中的server_id 说明已经配置成功,如下图,则表示配置成功。server_id=234

 

6.show master status;

能够看到同步的文件,和行数说明已经配置成功。

 

三、从服务器节点

1.进入配置页面命令

   vi /etc/my.cnf

2.配置服务器id server_id

这里的server_id 尽量配置为服务器地址的后3位 以用来区分

  server_id=30

3.开启日志文件(binLog)

  log-bin=mysql-bin

4.添加需用同步的数据库

binlog_do_db=test  

5.重启mysql服务

service mysqld restart

验证是否已经配置成功

6.show variables like '%server_id%';

能够查询对应配置文件中的server_id 说明已经配置成功

7.从服务器同步主服务器配置

master_host 主服务器地址

master_user 主服务器用户名

master_password 主服务器密码

master_log_file 主服务器配置文件

master_log_pos 主服务器读取配置文件的开始位置,也就是从第多少行开始读取。

change master to master_host='192.168.1.107',master_user=“用户名”,master_password=“密码”,master_log_file='mysql-bin.000001',master_log_pos=120;

8.开始同步

start slave

9.检查从服务器复制功能状态

SHOW SLAVE STATUS

如果二个从服务器是克隆主服务器的,这时候就会出现如下图的情况,二个服务器的server-uuid 是相同的,因为是克隆过来的。这时候运行  SHOW SLAVE STATUS  就会出现 Slave_IO_Running 为 No,而Slave_SQL_Running为Yes。说明IO同步出错,在Last_IO_Error 字段可以看到错误信息,如下。错误信息的意思就是server-uuid 重复了。也就是下图展示的效果。

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work。

如果出现这种情况,需要将 /var/lib/mysql  文件下的生成uuid 的文件删除,然后再重新启动 mysql 服务,就会重新在生成一个 server-uuid,在下图2中 也 显示了这个重新生成的server-uuid。

如果你的从服务器不是克隆主服务器而是重新安装的,那么就不会出现这种情况。直接运行  SHOW SLAVE STATUS 命令,如下图。则表示同步成功

存放server-uuid的 地址,可以在 /etc/my.cnf 文件中查看

如何验证我们mysql 主从复制 集群搭建成功?

在234节点主服务器新建test数据库,如果30节点(从服务器)能够同步过来,则说明环境搭建成功。

如果同步执行失败,作如下修改:

show variables like '%server_id%';

show master status;

STOP SLAVE;

set GLOBAL sql_slave_skip_counter=1;

start slave;

SHOW SLAVE STATUS;

 

注意:

1.切记从服务器只操作读,不操作增删改.保持数据的同步性,这样当一台服务器故障的时候,另一台就可以顶上去(其实主服务器宕机的时候肯定会丢失一部分最新数据).

2.从服务器的带宽一定>=主服务器,尽量减少同步延迟.要是小水管,同步自然慢一步嘛.

发布了5 篇原创文章 · 获赞 4 · 访问量 174

猜你喜欢

转载自blog.csdn.net/zhuxiang997/article/details/105064509