Mysql集群搭建(主从复制、读写分离)
发布时间:2022-11-23 11:28:13 所属栏目:MySql教程 来源:
导读: 一、MySQL多实例
(一)、MySQL多实例介绍
1、什么是MySQL多实例
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307,3308),运行多个MySQL服务进程,通过不同的soc
(一)、MySQL多实例介绍
1、什么是MySQL多实例
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307,3308),运行多个MySQL服务进程,通过不同的soc
一、MySQL多实例 (一)、MySQL多实例介绍 1、什么是MySQL多实例 MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307,3308),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。 2、MySQL多实例的特点有以下几点 (1)、有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。 (2)、节约服务器资源 (3)、资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降; 3、部署mysql多实例的两种方式 (1)、第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便; (2)、第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便mysql集群,集中管理; 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.从服务器的带宽一定>=主服务器,尽量减少同步延迟.要是小水管,同步自然慢一步嘛. (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐