老哥絮叨
上篇文章我们大致介绍了什么是MySQL主从复制,主从复制的几种集群架构图大概都有哪几种,今天我们就来讲讲如何实现MySQL集群的搭建。主从复制有两种方式可以实现,binlog和GTID,这期我们先通过binlog方式来实现,下篇我们来讲binlog的原理,和注意事项。
大赞点起来,在看刷起来。如果你觉得通过老哥的文章能学到一些知识,请把老哥推荐给你的朋友。分享是一件快乐的事,我们一起来玩Java。
一主一从集群搭建
binlog 简介
Mysql中有一个binlog二进制日志,这个日志会记录下主服务器所有修改了的SQL语句,从服务器把主服务器上的binlog二进制日志,在指定的位置开始复制主服务器所有修改的语句,在从服务器上执行一遍。
简而言之就是,主服务器会把create、update、delete语句都记录到一个二进制文件中(binlog),从服务器读取这个文件,执行一遍文件中记录的create、update、delete语句。从而实现主从数据同步。
准备工作
三台服务器:192.168.216.111、192.168.216.222、192.168.216.333
主从和主主我们用 111 和 222 两台机器,111 位主,222 位从。主主时两台机器都为主。双主多从时,333为从
服务器环境:采用 Windows 的,因为大多数小伙伴都是用 Windows 系统,方便大家学习,真实企业中用 Linux。
三台机器分别装好 MySQL 数据库,并能互相 ping 通。
配置主从库 my.ini 或者 my.cnf 文件
my.ini是Windows系统的,my.cnf是Linux系统的,我们这期主要以 Windows 系统为例
在 111 和 222 的 my.ini 中的[mysqld]节点下配置
server-id = 唯一ID:主服务器唯一 ID,一般设置为机器 IP 地址后三位
log-bin = 二进制日志文件存放路径:这个是启动并记录 binlog 日志
log-err = 错误日志路径(可选):启动错误日志
read-only = 0:0是读写都行(主库),1是只读(从库)
binlog-lgnore-db= 数据库名(可选):设置不要主从复制的数据库
binlog-do-db = 数据库名(可选):需要复制的数据库名
111 主库建授权用户给 222 从库
当主库和从库都配置完 my.ini 文件之后,还需要主库建立一个授权用户,让从库能通过这个用户登录到主库上。
语法
111主库执行:GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机IP' IDENTIFIED BY '密码';(建立授权用户)FLUSH PRIVILEGES;(刷新MySQL的系统权限相关表)复制代码
在从机上试试可否连接上主机
222从库执行:mysql -h 主机IP -usally -pilovesally复制代码
如果连接失败,看看是不是防火墙的原因,配置防火墙的 IP 规则
开始主从复制
查看 master 111 主机状态
show master status;复制代码
这里主要看File和Position两个参数,File代表从哪个日志文件里同步数据,Position代表从这个文件的什么位置开始同步数据,binlog-do-db 和 binlog-lgnore-db 意思为同步哪几个数据库和不同步哪几个数据库。
从库登录主库设置同步数据文件
如果之前做过同步数据,那么请先停止(stop slave;),否则会报错。
222执行:MASTER_HOST='主机IP',MASTER_USER='主机用户名',MASTER_PASSWORD='主机密码',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字;复制代码
启动从库复制功能
start slave;复制代码
查看从库同步状态
show slave status\G;复制代码