CentOS7 Linux 搭建MySQL主从复制
前言
MySQL主从复制实战。以前总听说集群之类的,从来没有好好思考过。如今有空余时间,终于亲自搭建环境得以实现MySQL主从复制。
从搭建虚拟机环境,以及安装Redhat系列的centos7.5服务器,部署MySQL5.6环境。嘿嘿,测试使用虚拟机搭建美滋滋。当然你也可以花money,多建几台云服务器实现集群环境。
正文
MySQL主从复制实战
主要使用到的环境说明
数据库版本
1 | #使用centos7.3初始安装就可选择安装所需基本环境 |
操作系统
1 | linux for centos7.3 or centos7.5 |
测试环境:VMware12虚拟机搭建三台centos7.3服务器
服务器IP地址:
1 | IP_MASTER:192.168.245.131 |
搭建服务器环境参考文章:VMware12配合使用Centos7搭建Linux开发环境
测试模型:一主两从,即(master、slave、slave)
知识宝库:VMware的简单使用,Linux基本命令、MySQL数据库CRUD
tips:VMware8亦可搭建,解决内存过小,这个小伙子有点东西啊!
目标实现:MySQL主从复制
一、binlog与relay-log
1.1 binlog
作用:记录数据库改变的数据,在第四步可以进行验证。
查看binlog日志
1 | /** 查看binlog日志 **/ |
mysqlbinlog查看binlog日志
1 | /** mysqlbinlog查看binlog日志 **/ |
1.2 relay-log
作用:连接master与slave节点的核心
1 | 01 master.info |
二、master节点配置
2.1 master节点配置
MySQL数据库配置文件my.cnf
1 | vim /etc/my.cnf |
加入配置
1 | [mysqld] |
2.2 重启mysql
1 | #readhat7系列使用方式 |
2.3 通过命令查看主节点状态
1 | show master status\G; |
注意查看:master_log_pos的值,这点很重要,master与搭建集群的两个slave节点保持一致。
2.4 授权slave节点账号
关联授权搭建的两个slave子节点
1 | #关联授权搭建的两个slave子节点 |
1 | #关联授权搭建的两个slave子节点 |
刷新权限
1 | #刷新权限 |
2.5 查看验证
显示查看日志
1 | #显示查看日志 |
显示查看服务
1 | #显示查看服务 |
三、slave节点配置
3.1 slave节点配置
MySQL数据库配置文件my.cnf
1 | #slave01(从节点配置) |
1 | [mysqld] |
3.2 登录mysql设置
1 | mysql -uroot -p |
输入命令如下
1 | CHANGE MASTER TO |
3.3 开启中继日志
1 | [mysqld] |
3.4 辅助操作
查看slave子节点状态
1 | #查看slave子节点状态 |
启动slave节点
1 | #启动slave节点 |
关闭slave节点
1 | #关闭slave节点 |
3.5 slave02(从节点配置)
修改MySQL从节点配置文件
1 | vim /etc/my.cnf |
1 | [mysqld] |
查看slave子节点状态
1 | #查看slave子节点状态 |
启动slave节点
1 | #启动slave节点 |
四、创建表以及新增数据进行验证
4.1 创建数据库用户
建议使用SQLyog工具创建用户,比较方便。
链接: https://pan.baidu.com/s/11gIlZKxoTG5BCCcoXdVJRg 提取码: ntu7
4.2 创建表
1 | /** 创建测试表GIRL **/ |
4.3 生成测试数据
1 | /** 插入测试数据 **/ |
4.4 采用SQLylog工具验证
master节点插入测试数据
master节点binlog日志验证
slave_check_RELAYLOG(133服务器)
132_slave_insert_data_girl同步数据
133_slave_check_RELAYLOG日志
133_slave_同步数据
五、排查问题
5.1 error 1236
master_log_pos与从节点不一致导致error 1236
分析日志:position日志偏移量与master节点不一致
设置的master_log_pos发生改变,导致position不一致,出现无法同步(报:error 1236)
slave节点正常状态参考
注意:我截图上的是后期优化处理过的,所以看到的pos和上面的不一致
5.2 解决问题
通过如下设置保持与master节点一致
首先关闭slave节点
1 | stop slave |
查看master节点日志偏移量
1 | show master status\G; |
在slave节点修改日志偏移量与master一致
1 | change master to master_log_file ='mysql-bin.000005',master_log_pos=950; |
最后启动slave节点
1 | start slave |
5.3 数据库授权远程登录
5.3.1 授权命令
1 | GRANT ALL PRIVILEGES ON *.* TO '你的数据库用户名'@'单个ip或者%表示所有' IDENTIFIED BY '你的数据库连接密码' WITH GRANT OPTION; |
1 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; |
5.3.2 修改用户密码:
1 | set password for root@localhost=password('123456'); |
5.4 防火墙问题
5.4.1 本次实战中使用到的是centos7,默认安装的是firewalld
5.4.2 临时关闭防火墙:
1 | systemctl stop firewalld.service |
5.4.3 实际工作中推荐需要使用哪些端口采取开放,比如开放MySQL默认的3306:
公共区域设置开放3306端口永久生效(–permanent):
1 | firewall-cmd --zone=public --add-port=3306/tcp --permanent |
操作完记住重启或重载:
1 | firewalld-cmd --reload |
移除:
1 | firewall-cmd --zone=public --remove-port=3306/tcp --permanent |
查看是否开放:
1 | firewall-cmd --zone=public --query-port=3306/tcp |
5.5 连接工具
推荐使用Navicat和SQLyog可视化工具。
链接: https://pan.baidu.com/s/11gIlZKxoTG5BCCcoXdVJRg 提取码: ntu7
SQLyog官网下载
https://sqlyog.en.softonic.com/
六、实现MySQL主从复制
6.1 分析模型
分析模型:一主一从,一主多从,多主一从
6.1.1 一主一从模型:master->slave
6.1.2 一主多从
在slave节点再配置slave缓解master服务器压力
6.1.3 多主一从
6.1.4 特例:主-主复制
(每一个主既是从又是主)
6.1.5 使用SQLylog操作验证
分别登陆三台数据库服务器(推荐SQLylog工具)
同时登陆xshell工具连接查看三台服务器状态(推荐使用xshell或者SecureCRT)
1 | ip:192.168.245.131 //master |
数据库:test_db //与master节点配置单一用户对应
数据库表:GIRL
1 | ip:192.168.245.132 //slave |
master节点创建GIRL表,slave同步创建
1 | ip:192.168.245.133 //slave |
master节点创建GIRL表,slave同步创建
tips:如果想实现主-主同步,则需要在其它两台配置数据库用户关联授权,参考第二步。
我并没有验证主-主同步,嘿嘿,当然你可以私下验证哟!
七、附件(搭建环境)
7.1 虚拟机搭建环境
搭建服务器环境参考文章:VMware12配合使用Centos7搭建Linux开发环境
7.1.1 搭建虚拟机环境
7.1.2 虚拟机服务器配置
7.2 xshell远程连接
7.2.1 使用xshell远程连接
7.3 搭建linux环境
准备三台MySQL服务器配置主从复制(master:131,slave:132,slave:133)
131 master主节点my.cnf配置
131 验证master节点log_bin开启
131 show_master_status查看状态(注意:此时master的pos为120)
131查看主节点master的server服务(131服务器)
131查看主节点binlog日志所在目录(131服务器)
start_slave启动从节点132(此时master的pos为120,没对应上导致slave无法读取)
参考步骤五排查问题进行解决
在slave节点修改日志偏移量与master一致,master_log_file对应先查出主节点最新的:
1 | show master status\G; |
查看此时master的pos为120
此时设置master_log_pos=120
1 | change master to master_log_file ='mysql-bin.000001',master_log_pos=120; |
正常slave节点读取_IO_SQL_Running为YES,如下图
slave_mysql_log(132服务器对应的slave节点)
启动从节点slave(对应slave节点133服务器)
1 | /**(此时master的pos为120,没对应上导致slave无法读取) |
slave节点MySQL日志(slave节点对应133服务器)
132开启从节点中继日志
7.4 采用SQLylog工具进行测试
131_master_插入测试数据
131_master_binlog_日志验证
132_slave_check_RELAYLOG
132_slave_insert_data_girl同步数据
133_slave_check_RELAYLOG日志
133_slave_同步数据
—END—